fix multiple update (cpy), added index generation (allows to re-create the index without updating the complete package) possible to specify the feed(s) which should be updated added -h switch to most of the commands

SVN-Revision: 10614
This commit is contained in:
Ralph Hempel 2008-03-18 15:50:29 +00:00
parent 515e65dd5a
commit 0e158467a4

View file

@ -41,10 +41,10 @@ sub parse_config() {
close FEEDS;
}
sub update_index($$)
sub update_index($)
{
my $name = shift;
my $src = shift;
-d "./feeds/$name.tmp" or mkdir "./feeds/$name.tmp" or return 1;
-d "./feeds/$name.tmp/info" or mkdir "./feeds/$name.tmp/info" or return 1;
@ -65,15 +65,18 @@ sub update_svn($$) {
system("rm -rf \"./feeds/$name\"");
system("svn co $src \"./feeds/$name\"") == 0 or return 1;
}
return update_index($name, $src);
return 0;
}
sub update_cpy($$) {
my $name = shift;
my $src = shift;
system("cp -Rf $src ./feeds/$name");
return update_index($name, $src);
system("mkdir -p ./feeds/$name");
system("cp -Rf $src ./feeds");
return 0;
}
sub update_link($$) {
@ -81,7 +84,8 @@ sub update_link($$) {
my $src = abs_path(shift);
system("ln -sf $src ./feeds/$name");
return update_index($name, $src);
return 0;
}
sub update_git($$) {
@ -94,7 +98,8 @@ sub update_git($$) {
system("rm -rf \"./feeds/$name\"");
system("git-clone --depth 1 $src ./feeds/$name") == 0 or return 1;
}
return update_index($name, $src);
return 0;
}
sub get_feed($) {
@ -278,13 +283,16 @@ sub install_package {
sub refresh_config {
my $default = shift;
$default or $default = "o";
# workaround for timestamp check
system("rm -f tmp/.packageinfo");
# refresh the config
if ($default) {
system("make oldconfig CONFDEFAULT=\"$default\" Config.in >/dev/null 2>/dev/null");
} else {
system("make defconfig Config.in >/dev/null 2>/dev/null");
}
}
sub install {
@ -293,7 +301,13 @@ sub install {
my $feed;
my $ret = 0;
getopts('ap:d:', \%opts);
getopts('ap:d:h', \%opts);
if ($opts{h}) {
usage();
return 0;
}
get_installed();
foreach my $f (@feeds) {
@ -336,13 +350,25 @@ sub install {
}
sub uninstall {
my %opts;
my $name;
my $uninstall;
if ($ARGV[0] eq '-a') {
system("rm -rf ./package/feeds");
getopts('ah', \%opts);
if ($opts{h}) {
usage();
return 0;
}
if ($opts{a}) {
system("rm -rvf ./package/feeds");
$uninstall = 1;
} else {
if($#ARGV == -1) {
warn "WARNING: no package to uninstall\n";
return 0;
}
get_installed();
while ($name = shift @ARGV) {
my $pkg = $installed{$name};
@ -360,6 +386,86 @@ sub uninstall {
return 0;
}
my %update_method = (
'src-svn' => \&update_svn,
'src-cpy' => \&update_cpy,
'src-link' => \&update_link,
'src-git' => \&update_git
);
sub update_feed($$$$)
{
my $type=shift;
my $name=shift;
my $src=shift;
my $perform_update=shift;
$update_method{$type} or do {
warn "Unknown type '$type' in feed $name\n";
return 1;
};
$perform_update and do {
warn "Updating feed '$name' from '$src' ...\n";
&{$update_method{$type}}($name, $src) == 0 or do {
warn "failed.\n";
return 1;
};
};
warn "Create index file './feeds/$name.index' \n";
update_index($name) == 0 or do {
warn "failed.\n";
return 1;
};
return 0;
}
sub update {
my %opts;
my $feed_name;
my $perform_update=1;
$ENV{SCAN_COOKIE} = $$;
$ENV{KBUILD_VERBOSE} = 99;
getopts('ahi', \%opts);
if ($opts{h}) {
usage();
return 0;
}
if ($opts{i}) {
# don't update from (remote) repository
# only re-create index information
$perform_update=0;
}
-d "feeds" or do {
mkdir "feeds" or die "Unable to create the feeds directory";
};
if ( ($#ARGV == -1) or $opts{a}) {
foreach my $feed (@feeds) {
my ($type, $name, $src) = @$feed;
update_feed($type, $name, $src, $perform_update);
}
} else {
while ($feed_name = shift @ARGV) {
foreach my $feed (@feeds) {
my ($type, $name, $src) = @$feed;
if($feed_name ne $name) {
next;
}
update_feed($type, $name, $src, $perform_update);
}
}
}
refresh_config();
return 0;
}
sub usage() {
print <<EOF;
Usage: $0 <command> [options]
@ -381,9 +487,13 @@ Commands:
-r <feedname>: Only search in this feed
uninstall -a|<package>: Uninstall a package
Options:
-a : Uninstalls all packages.
update: Update packages and lists of feeds in feeds.conf .
update -a|<feedname(s)>: Update packages and lists of feeds in feeds.conf .
Options:
-a : Update all feeds listed within feeds.conf. Otherwise the spezified feeds will be updated.
-i : Recreate the index only. No feed update from repository is performed.
clean: Remove downloaded/generated files.
@ -391,35 +501,9 @@ EOF
exit(1);
}
my %update_method = (
'src-svn' => \&update_svn,
'src-cpy' => \&update_cpy,
'src-link' => \&update_link,
'src-git' => \&update_git
);
my %commands = (
'list' => \&list,
'update' => sub {
-d "feeds" or do {
mkdir "feeds" or die "Unable to create the feeds directory";
};
$ENV{SCAN_COOKIE} = $$;
$ENV{KBUILD_VERBOSE} = 99;
foreach my $feed (@feeds) {
my ($type, $name, $src) = @$feed;
$update_method{$type} or do {
warn "Unknown type '$type' in feed $name\n";
next;
};
warn "Updating feed '$name'...\n";
&{$update_method{$type}}($name, $src) == 0 or do {
warn "failed.\n";
return 1;
};
}
return 0;
},
'update' => \&update,
'install' => \&install,
'search' => \&search,
'uninstall' => \&uninstall,