Changeset 481

Show
Ignore:
Timestamp:
05/02/08 19:37:23 (3 months ago)
Author:
florida
Message:

Changeset 10823 (openwrt)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • firmware/trunk/kamikaze/scripts/feeds

    r457 r481  
    4242} 
    4343 
    44 sub update_index($$
     44sub update_index($
    4545{ 
    4646        my $name = shift; 
    47         my $src = shift; 
     47 
    4848        -d "./feeds/$name.tmp" or mkdir "./feeds/$name.tmp" or return 1; 
    4949        -d "./feeds/$name.tmp/info" or mkdir "./feeds/$name.tmp/info" or return 1; 
     
    6666                system("svn co $src \"./feeds/$name\"") == 0 or return 1; 
    6767        } 
    68         return update_index($name, $src); 
     68 
     69        return 0; 
    6970} 
    7071 
     
    7374        my $src = shift; 
    7475 
    75         system("cp -Rf $src ./feeds/$name"); 
    76         return update_index($name, $src); 
     76        system("mkdir -p ./feeds/$name"); 
     77        system("cp -Rf $src ./feeds"); 
     78 
     79        return 0; 
    7780} 
    7881 
     
    8184        my $src = abs_path(shift); 
    8285 
    83         system("ln -sf $src ./feeds/$name"); 
    84         return update_index($name, $src); 
     86        system("rm -f ./feeds/$name; ln -s $src ./feeds/$name"); 
     87 
     88        return 0; 
    8589} 
    8690 
     
    9599                system("git-clone --depth 1 $src ./feeds/$name") == 0 or return 1; 
    96100        } 
    97         return update_index($name, $src); 
     101 
     102        return 0; 
    98103} 
    99104 
    100105sub get_feed($) { 
    101106        my $feed = shift; 
     107        my $file = "./feeds/$feed.index"; 
    102108 
    103109        clear_packages(); 
    104         parse_package_metadata("./feeds/$feed.index") or return; 
     110 
     111        -f $file or do { 
     112                print "Ignoring feed '$feed' - index missing\n"; 
     113                return; 
     114        }; 
     115        parse_package_metadata($file) or return; 
    105116        return { %package }; 
    106117} 
     
    234245        $feed or do { 
    235246                $installed{$name} and return 0; 
    236                 warn "WARNING: No feed for package '$name' found.\n"; 
    237                 return 1; 
     247                # TODO: check if it's already installed within ./package directory 
     248                warn "WARNING: No feed for package '$name' found, maybe it's already part of the standard packages?\n"; 
     249                return 0; 
    238250        }; 
    239251 
     
    241253        $pkg->{name} or do { 
    242254                $installed{$name} and return 0; 
     255                # TODO: check if this is an alias package, maybe it's known by another name 
    243256                warn "WARNING: Package '$name' is not available in feed $feed->[1].\n"; 
    244                 return 1
     257                return 0
    245258        }; 
    246259        my $src = $pkg->{src}; 
     
    251264        # newly installed packages set the source package 
    252265        $installed{$src} and return 0; 
    253  
    254         # install all dependencies 
    255         foreach my $dep (@{$pkg->{depends}}) { 
    256                 next if $dep =~ /@/; 
    257                 $dep =~ s/^\+//; 
    258                 install_package($feed, $dep) == 0 or $ret = 1; 
    259         } 
    260266 
    261267        # check previously installed packages 
     
    274280        }; 
    275281 
     282        # install all dependencies 
     283        foreach my $dep (@{$pkg->{depends}}, @{$pkg->{builddepends}}) { 
     284                next if $dep =~ /@/; 
     285                $dep =~ s/^\+//; 
     286                install_package($feed, $dep) == 0 or $ret = 1; 
     287        } 
     288 
    276289        return $ret; 
    277290} 
     
    279292sub refresh_config { 
    280293        my $default = shift; 
    281         $default or $default = "o"; 
    282294 
    283295        # workaround for timestamp check 
     
    285297 
    286298        # refresh the config 
    287         system("make oldconfig CONFDEFAULT=\"$default\" Config.in >/dev/null 2>/dev/null"); 
     299        if ($default) {  
     300                system("make oldconfig CONFDEFAULT=\"$default\" Config.in >/dev/null 2>/dev/null"); 
     301        } else { 
     302                system("make defconfig Config.in >/dev/null 2>/dev/null"); 
     303        } 
    288304} 
    289305 
     
    294310        my $ret = 0; 
    295311 
    296         getopts('ap:d:', \%opts); 
     312        getopts('ap:d:h', \%opts); 
     313 
     314        if ($opts{h}) { 
     315                usage(); 
     316                return 0; 
     317        } 
     318 
    297319        get_installed(); 
    298320 
     
    314336                                        if( $p->{name} ) { 
    315337                                                install_package($feed, $p->{name}) == 0 or $ret = 1; 
    316                                         } else { 
    317                                                 warn "WARNING: Package '$name' is not available\n"; 
    318338                                        } 
    319339                                } 
     
    337357 
    338358sub uninstall { 
     359        my %opts; 
    339360        my $name; 
    340361        my $uninstall; 
    341362 
    342         if ($ARGV[0] eq '-a') { 
    343                 system("rm -rf ./package/feeds"); 
     363        getopts('ah', \%opts); 
     364 
     365        if ($opts{h}) { 
     366                usage(); 
     367                return 0; 
     368        } 
     369 
     370        if ($opts{a}) { 
     371                system("rm -rvf ./package/feeds"); 
    344372                $uninstall = 1; 
    345373        } else { 
     374                if($#ARGV == -1) { 
     375                        warn "WARNING: no package to uninstall\n"; 
     376                        return 0; 
     377                } 
    346378                get_installed(); 
    347379                while ($name = shift @ARGV) { 
     
    361393} 
    362394 
    363 sub usage() { 
    364         print <<EOF; 
    365 Usage: $0 <command> [options] 
    366  
    367 Commands: 
    368         list [options]: List feeds and their content 
    369         Options: 
    370             -s :           List of feed names and their URL. 
    371             -r <feedname>: List packages of specified feed. 
    372  
    373         install [options] <package>: Install a package 
    374         Options: 
    375             -a :           Install all packages from all feeds or from the specified feed using the -p option. 
    376             -p <feedname>: Prefer this feed when installing packages. 
    377             -d <y|m|n>:    Set default for newly installed packages. 
    378  
    379         search [options] <substring>: Search for a package 
    380         Options: 
    381             -r <feedname>: Only search in this feed 
    382  
    383         uninstall -a|<package>: Uninstall a package 
    384             -a :           Uninstalls all packages. 
    385  
    386         update:            Update packages and lists of feeds in feeds.conf . 
    387  
    388         clean:             Remove downloaded/generated files. 
    389  
    390 EOF 
    391         exit(1); 
    392 } 
    393  
    394395my %update_method = ( 
    395396        'src-svn' => \&update_svn, 
     
    399400); 
    400401 
     402sub update_feed($$$$) 
     403{ 
     404        my $type=shift; 
     405        my $name=shift; 
     406        my $src=shift; 
     407        my $perform_update=shift; 
     408 
     409        $update_method{$type} or do { 
     410                warn "Unknown type '$type' in feed $name\n"; 
     411                return 1; 
     412        }; 
     413        $perform_update and do { 
     414                warn "Updating feed '$name' from '$src' ...\n"; 
     415                &{$update_method{$type}}($name, $src) == 0 or do { 
     416                        warn "failed.\n"; 
     417                        return 1; 
     418                }; 
     419        }; 
     420        warn "Create index file './feeds/$name.index' \n"; 
     421        update_index($name) == 0 or do { 
     422                warn "failed.\n"; 
     423                return 1; 
     424        }; 
     425        return 0; 
     426} 
     427 
     428sub update { 
     429        my %opts; 
     430        my $feed_name; 
     431        my $perform_update=1; 
     432 
     433        $ENV{SCAN_COOKIE} = $$; 
     434        $ENV{KBUILD_VERBOSE} = 99; 
     435 
     436        getopts('ahi', \%opts); 
     437 
     438        if ($opts{h}) { 
     439                usage(); 
     440                return 0; 
     441        } 
     442 
     443        if ($opts{i}) { 
     444                # don't update from (remote) repository 
     445                # only re-create index information 
     446                $perform_update=0; 
     447        } 
     448 
     449        -d "feeds" or do { 
     450                        mkdir "feeds" or die "Unable to create the feeds directory"; 
     451                }; 
     452 
     453        if ( ($#ARGV == -1) or $opts{a}) { 
     454                foreach my $feed (@feeds) { 
     455                        my ($type, $name, $src) = @$feed; 
     456                        update_feed($type, $name, $src, $perform_update); 
     457                } 
     458        } else { 
     459                while ($feed_name = shift @ARGV) { 
     460                        foreach my $feed (@feeds) { 
     461                                my ($type, $name, $src) = @$feed; 
     462                                if($feed_name ne $name) { 
     463                                        next; 
     464                                } 
     465                                update_feed($type, $name, $src, $perform_update); 
     466                        } 
     467                } 
     468        } 
     469 
     470        refresh_config(); 
     471 
     472        return 0; 
     473} 
     474 
     475sub usage() { 
     476        print <<EOF; 
     477Usage: $0 <command> [options] 
     478 
     479Commands: 
     480        list [options]: List feeds and their content 
     481        Options: 
     482            -s :           List of feed names and their URL. 
     483            -r <feedname>: List packages of specified feed. 
     484 
     485        install [options] <package>: Install a package 
     486        Options: 
     487            -a :           Install all packages from all feeds or from the specified feed using the -p option. 
     488            -p <feedname>: Prefer this feed when installing packages. 
     489            -d <y|m|n>:    Set default for newly installed packages. 
     490 
     491        search [options] <substring>: Search for a package 
     492        Options: 
     493            -r <feedname>: Only search in this feed 
     494 
     495        uninstall -a|<package>: Uninstall a package 
     496        Options: 
     497            -a :           Uninstalls all packages. 
     498 
     499        update -a|<feedname(s)>: Update packages and lists of feeds in feeds.conf . 
     500        Options: 
     501            -a :           Update all feeds listed within feeds.conf. Otherwise the spezified feeds will be updated. 
     502            -i :           Recreate the index only. No feed update from repository is performed. 
     503 
     504        clean:             Remove downloaded/generated files. 
     505 
     506EOF 
     507        exit(1); 
     508} 
     509 
    401510my %commands = ( 
    402511        'list' => \&list, 
    403         'update' => sub { 
    404                 -d "feeds" or do { 
    405                         mkdir "feeds" or die "Unable to create the feeds directory"; 
    406                 }; 
    407                 $ENV{SCAN_COOKIE} = $$; 
    408                 $ENV{KBUILD_VERBOSE} = 99; 
    409                 foreach my $feed (@feeds) { 
    410                         my ($type, $name, $src) = @$feed; 
    411                         $update_method{$type} or do { 
    412                                 warn "Unknown type '$type' in feed $name\n"; 
    413                                 next; 
    414                         }; 
    415                         warn "Updating feed '$name'...\n"; 
    416                         &{$update_method{$type}}($name, $src) == 0 or do { 
    417                                 warn "failed.\n"; 
    418                                 return 1; 
    419                         }; 
    420                 } 
    421                 return 0; 
    422         }, 
     512        'update' => \&update, 
    423513        'install' => \&install, 
    424514        'search' => \&search,