Changeset 10252


Ignore:
Timestamp:
2008-01-25T12:33:20+01:00 (10 years ago)
Author:
nbd
Message:

the attached patch adds the -a option to the feeds install command.
Therefore following command option should work now

./scripts/feeds install -a
./scripts/feeds install -a -p xwrt

To-do:

  • The next step should be to replace the current make package/symlinks implementation with ./scripts/feeds install -a . ( the locations of the packages within ./packages are different with both methods )
  • The current feed script is not able to handle "Provides" statements properly. The dependencies will be installed only if they are real package names and not aliases (provides) .

Note:
This patch also includes the previous patch reg. directory (ClearCase) support from 30.12.07.

br/R

Signed-off-by: ralph <ralph.hempel@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/scripts/feeds

    r9667 r10252  
    77use warnings; 
    88use strict; 
     9use Cwd 'abs_path'; 
    910 
    1011chdir "$FindBin::Bin/.."; 
     
    5657} 
    5758 
     59sub update_cpy($$) { 
     60        my $name = shift; 
     61        my $src = shift; 
     62 
     63        system("cp -Rf $src ./feeds/$name"); 
     64        -d "./feeds/$name.tmp" or mkdir "./feeds/$name.tmp" or return 1; 
     65        -d "./feeds/$name.tmp/info" or mkdir "./feeds/$name.tmp/info" or return 1; 
     66 
     67        system("make -s prepare-mk TMP_DIR=\"$ENV{TOPDIR}/feeds/$name.tmp\""); 
     68        system("make -s -f include/scan.mk IS_TTY=1 SCAN_TARGET=\"packageinfo\" SCAN_DIR=\"feeds/$name\" SCAN_NAME=\"package\" SCAN_DEPS=\"$ENV{TOPDIR}/include/package*.mk\" SCAN_DEPTH=4 SCAN_EXTRA=\"\" TMP_DIR=\"$ENV{TOPDIR}/feeds/$name.tmp\""); 
     69        system("ln -sf $name.tmp/.packageinfo ./feeds/$name.index"); 
     70 
     71        return 0; 
     72} 
     73 
     74sub update_link($$) { 
     75        my $name = shift; 
     76        my $src = abs_path(shift); 
     77 
     78        system("ln -sf $src ./feeds/$name"); 
     79        -d "./feeds/$name.tmp" or mkdir "./feeds/$name.tmp" or return 1; 
     80        -d "./feeds/$name.tmp/info" or mkdir "./feeds/$name.tmp/info" or return 1; 
     81 
     82        system("make -s prepare-mk TMP_DIR=\"$ENV{TOPDIR}/feeds/$name.tmp\""); 
     83        system("make -s -f include/scan.mk IS_TTY=1 SCAN_TARGET=\"packageinfo\" SCAN_DIR=\"feeds/$name\" SCAN_NAME=\"package\" SCAN_DEPS=\"$ENV{TOPDIR}/include/package*.mk\" SCAN_DEPTH=4 SCAN_EXTRA=\"\" TMP_DIR=\"$ENV{TOPDIR}/feeds/$name.tmp\""); 
     84        system("ln -sf $name.tmp/.packageinfo ./feeds/$name.index"); 
     85 
     86        return 0; 
     87} 
     88 
    5889sub get_feed($) { 
    5990        my $feed = shift; 
     
    75106        my @substr = @_; 
    76107        my $display; 
    77          
     108 
    78109        return unless @substr > 0; 
    79110        get_feed($feed); 
     
    111142} 
    112143 
    113 sub install_svn() { 
     144sub install_generic() { 
    114145        my $feed = shift; 
    115146        my $pkg = shift; 
    116147        my $path = $pkg->{makefile}; 
    117         $path =~ s/\/Makefile$//; 
    118  
    119         -d "./package/feeds" or mkdir "./package/feeds"; 
    120         -d "./package/feeds/$feed->[1]" or mkdir "./package/feeds/$feed->[1]"; 
    121         system("ln -sf ../../../$path ./package/feeds/$feed->[1]/"); 
    122  
     148         
     149        if($path) { 
     150         
     151                $path =~ s/\/Makefile$//; 
     152 
     153                -d "./package/feeds" or mkdir "./package/feeds"; 
     154                -d "./package/feeds/$feed->[1]" or mkdir "./package/feeds/$feed->[1]"; 
     155                system("ln -sf ../../../$path ./package/feeds/$feed->[1]/"); 
     156 
     157        } else { 
     158                warn "Package is not valid\n"; 
     159                return 1; 
     160        } 
    123161        return 0; 
    124162} 
    125163 
    126164my %install_method = ( 
    127         'src-svn' => \&install_svn 
     165        'src-svn' => \&install_generic, 
     166        'src-cpy' => \&install_generic, 
     167        'src-link' => \&install_generic 
    128168); 
    129169 
     
    150190        $feed or do { 
    151191                $installed{$name} and return 0; 
    152                 warn "WARNING: Package '$name' is not available.\n"; 
     192                warn "WARNING: No feed for package '$name' found.\n"; 
    153193                return 1; 
    154194        }; 
    155195 
    156196        my $pkg = $feed{$feed->[1]}->{$name} or return 1; 
     197        $pkg->{name} or do { 
     198                $installed{$name} and return 0; 
     199                warn "WARNING: Package '$name' is not available in feed $feed->[1].\n"; 
     200                return 1; 
     201        }; 
    157202        my $src = $pkg->{src}; 
    158203        my $type = $feed->[0]; 
     
    195240        system("rm -f tmp/.packageinfo"); 
    196241 
    197         # refresh the config  
     242        # refresh the config 
    198243        system("make oldconfig CONFDEFAULT=\"$default\" Config.in >/dev/null 2>/dev/null"); 
    199244} 
     
    204249        my $feed; 
    205250        my $ret = 0; 
    206          
    207         getopt('p:d:', \%opts); 
     251 
     252        getopts('ap:d:', \%opts); 
    208253        get_installed(); 
    209254 
     
    216261        } 
    217262 
    218         while ($name = shift @ARGV) { 
    219                 install_package($feed, $name) == 0 or $ret = 1; 
     263        if($opts{a}) { 
     264                foreach my $f (@feeds) { 
     265                        if (!defined($opts{p}) or $opts{p} eq $f->[1]) { 
     266                                printf "Installing all packages from feed %s.\n", $f->[1]; 
     267                                get_feed($f->[1]); 
     268                                foreach my $name (sort { lc($a) cmp lc($b) } keys %package) { 
     269                                        my $p = $package{$name}; 
     270                                        if( $p->{name} ) { 
     271                                                install_package($feed, $p->{name}) == 0 or $ret = 1; 
     272                                        } else { 
     273                                                warn "WARNING: Package '$name' is not available\n"; 
     274                                        } 
     275                                } 
     276                        } 
     277                } 
     278        } else { 
     279                while ($name = shift @ARGV) { 
     280                        install_package($feed, $name) == 0 or $ret = 1; 
     281                } 
    220282        } 
    221283 
    222284        # workaround for timestamp check 
    223          
     285 
    224286        # set the defaults 
    225287        if ($opts{d} and $opts{d} =~ /^[ymn]$/) { 
     
    262324        install [options] <package>: Install a package 
    263325        Options: 
     326            -a installs all packages from all feeds or from the specified feed 
    264327            -p <feedname>: Prefer this feed when installing packages 
    265328            -d <y|m|n>:    Set default for newly installed packages 
     
    280343 
    281344my %update_method = ( 
    282         'src-svn' => \&update_svn 
     345        'src-svn' => \&update_svn, 
     346        'src-cpy' => \&update_cpy, 
     347        'src-link' => \&update_link 
    283348); 
    284349 
Note: See TracChangeset for help on using the changeset viewer.