Changeset 481
- Timestamp:
- 05/02/08 19:37:23 (3 months ago)
- Files:
-
- firmware/trunk/kamikaze/scripts/feeds (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
firmware/trunk/kamikaze/scripts/feeds
r457 r481 42 42 } 43 43 44 sub update_index($ $)44 sub update_index($) 45 45 { 46 46 my $name = shift; 47 my $src = shift; 47 48 48 -d "./feeds/$name.tmp" or mkdir "./feeds/$name.tmp" or return 1; 49 49 -d "./feeds/$name.tmp/info" or mkdir "./feeds/$name.tmp/info" or return 1; … … 66 66 system("svn co $src \"./feeds/$name\"") == 0 or return 1; 67 67 } 68 return update_index($name, $src); 68 69 return 0; 69 70 } 70 71 … … 73 74 my $src = shift; 74 75 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; 77 80 } 78 81 … … 81 84 my $src = abs_path(shift); 82 85 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; 85 89 } 86 90 … … 95 99 system("git-clone --depth 1 $src ./feeds/$name") == 0 or return 1; 96 100 } 97 return update_index($name, $src); 101 102 return 0; 98 103 } 99 104 100 105 sub get_feed($) { 101 106 my $feed = shift; 107 my $file = "./feeds/$feed.index"; 102 108 103 109 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; 105 116 return { %package }; 106 117 } … … 234 245 $feed or do { 235 246 $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; 238 250 }; 239 251 … … 241 253 $pkg->{name} or do { 242 254 $installed{$name} and return 0; 255 # TODO: check if this is an alias package, maybe it's known by another name 243 256 warn "WARNING: Package '$name' is not available in feed $feed->[1].\n"; 244 return 1;257 return 0; 245 258 }; 246 259 my $src = $pkg->{src}; … … 251 264 # newly installed packages set the source package 252 265 $installed{$src} and return 0; 253 254 # install all dependencies255 foreach my $dep (@{$pkg->{depends}}) {256 next if $dep =~ /@/;257 $dep =~ s/^\+//;258 install_package($feed, $dep) == 0 or $ret = 1;259 }260 266 261 267 # check previously installed packages … … 274 280 }; 275 281 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 276 289 return $ret; 277 290 } … … 279 292 sub refresh_config { 280 293 my $default = shift; 281 $default or $default = "o";282 294 283 295 # workaround for timestamp check … … 285 297 286 298 # 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 } 288 304 } 289 305 … … 294 310 my $ret = 0; 295 311 296 getopts('ap:d:', \%opts); 312 getopts('ap:d:h', \%opts); 313 314 if ($opts{h}) { 315 usage(); 316 return 0; 317 } 318 297 319 get_installed(); 298 320 … … 314 336 if( $p->{name} ) { 315 337 install_package($feed, $p->{name}) == 0 or $ret = 1; 316 } else {317 warn "WARNING: Package '$name' is not available\n";318 338 } 319 339 } … … 337 357 338 358 sub uninstall { 359 my %opts; 339 360 my $name; 340 361 my $uninstall; 341 362 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"); 344 372 $uninstall = 1; 345 373 } else { 374 if($#ARGV == -1) { 375 warn "WARNING: no package to uninstall\n"; 376 return 0; 377 } 346 378 get_installed(); 347 379 while ($name = shift @ARGV) { … … 361 393 } 362 394 363 sub usage() {364 print <<EOF;365 Usage: $0 <command> [options]366 367 Commands:368 list [options]: List feeds and their content369 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 package374 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 package380 Options:381 -r <feedname>: Only search in this feed382 383 uninstall -a|<package>: Uninstall a package384 -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 EOF391 exit(1);392 }393 394 395 my %update_method = ( 395 396 'src-svn' => \&update_svn, … … 399 400 ); 400 401 402 sub 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 428 sub 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 475 sub usage() { 476 print <<EOF; 477 Usage: $0 <command> [options] 478 479 Commands: 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 506 EOF 507 exit(1); 508 } 509 401 510 my %commands = ( 402 511 '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, 423 513 'install' => \&install, 424 514 'search' => \&search,
