mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-24 00:56:14 +02:00
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 git-svn-id: svn://svn.openwrt.org/openwrt/trunk@10614 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
b5c0892412
commit
f6e91c760f
164
scripts/feeds
164
scripts/feeds
@ -41,10 +41,10 @@ sub parse_config() {
|
|||||||
close FEEDS;
|
close FEEDS;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub update_index($$)
|
sub update_index($)
|
||||||
{
|
{
|
||||||
my $name = shift;
|
my $name = shift;
|
||||||
my $src = shift;
|
|
||||||
-d "./feeds/$name.tmp" or mkdir "./feeds/$name.tmp" or return 1;
|
-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;
|
-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("rm -rf \"./feeds/$name\"");
|
||||||
system("svn co $src \"./feeds/$name\"") == 0 or return 1;
|
system("svn co $src \"./feeds/$name\"") == 0 or return 1;
|
||||||
}
|
}
|
||||||
return update_index($name, $src);
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub update_cpy($$) {
|
sub update_cpy($$) {
|
||||||
my $name = shift;
|
my $name = shift;
|
||||||
my $src = shift;
|
my $src = shift;
|
||||||
|
|
||||||
system("cp -Rf $src ./feeds/$name");
|
system("mkdir -p ./feeds/$name");
|
||||||
return update_index($name, $src);
|
system("cp -Rf $src ./feeds");
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub update_link($$) {
|
sub update_link($$) {
|
||||||
@ -81,7 +84,8 @@ sub update_link($$) {
|
|||||||
my $src = abs_path(shift);
|
my $src = abs_path(shift);
|
||||||
|
|
||||||
system("ln -sf $src ./feeds/$name");
|
system("ln -sf $src ./feeds/$name");
|
||||||
return update_index($name, $src);
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub update_git($$) {
|
sub update_git($$) {
|
||||||
@ -94,7 +98,8 @@ sub update_git($$) {
|
|||||||
system("rm -rf \"./feeds/$name\"");
|
system("rm -rf \"./feeds/$name\"");
|
||||||
system("git-clone --depth 1 $src ./feeds/$name") == 0 or return 1;
|
system("git-clone --depth 1 $src ./feeds/$name") == 0 or return 1;
|
||||||
}
|
}
|
||||||
return update_index($name, $src);
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub get_feed($) {
|
sub get_feed($) {
|
||||||
@ -278,13 +283,16 @@ sub install_package {
|
|||||||
|
|
||||||
sub refresh_config {
|
sub refresh_config {
|
||||||
my $default = shift;
|
my $default = shift;
|
||||||
$default or $default = "o";
|
|
||||||
|
|
||||||
# workaround for timestamp check
|
# workaround for timestamp check
|
||||||
system("rm -f tmp/.packageinfo");
|
system("rm -f tmp/.packageinfo");
|
||||||
|
|
||||||
# refresh the config
|
# refresh the config
|
||||||
system("make oldconfig CONFDEFAULT=\"$default\" Config.in >/dev/null 2>/dev/null");
|
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 {
|
sub install {
|
||||||
@ -293,7 +301,13 @@ sub install {
|
|||||||
my $feed;
|
my $feed;
|
||||||
my $ret = 0;
|
my $ret = 0;
|
||||||
|
|
||||||
getopts('ap:d:', \%opts);
|
getopts('ap:d:h', \%opts);
|
||||||
|
|
||||||
|
if ($opts{h}) {
|
||||||
|
usage();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
get_installed();
|
get_installed();
|
||||||
|
|
||||||
foreach my $f (@feeds) {
|
foreach my $f (@feeds) {
|
||||||
@ -336,13 +350,25 @@ sub install {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub uninstall {
|
sub uninstall {
|
||||||
|
my %opts;
|
||||||
my $name;
|
my $name;
|
||||||
my $uninstall;
|
my $uninstall;
|
||||||
|
|
||||||
if ($ARGV[0] eq '-a') {
|
getopts('ah', \%opts);
|
||||||
system("rm -rf ./package/feeds");
|
|
||||||
|
if ($opts{h}) {
|
||||||
|
usage();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($opts{a}) {
|
||||||
|
system("rm -rvf ./package/feeds");
|
||||||
$uninstall = 1;
|
$uninstall = 1;
|
||||||
} else {
|
} else {
|
||||||
|
if($#ARGV == -1) {
|
||||||
|
warn "WARNING: no package to uninstall\n";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
get_installed();
|
get_installed();
|
||||||
while ($name = shift @ARGV) {
|
while ($name = shift @ARGV) {
|
||||||
my $pkg = $installed{$name};
|
my $pkg = $installed{$name};
|
||||||
@ -360,6 +386,86 @@ sub uninstall {
|
|||||||
return 0;
|
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() {
|
sub usage() {
|
||||||
print <<EOF;
|
print <<EOF;
|
||||||
Usage: $0 <command> [options]
|
Usage: $0 <command> [options]
|
||||||
@ -381,9 +487,13 @@ Commands:
|
|||||||
-r <feedname>: Only search in this feed
|
-r <feedname>: Only search in this feed
|
||||||
|
|
||||||
uninstall -a|<package>: Uninstall a package
|
uninstall -a|<package>: Uninstall a package
|
||||||
|
Options:
|
||||||
-a : Uninstalls all packages.
|
-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.
|
clean: Remove downloaded/generated files.
|
||||||
|
|
||||||
@ -391,35 +501,9 @@ EOF
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
my %update_method = (
|
|
||||||
'src-svn' => \&update_svn,
|
|
||||||
'src-cpy' => \&update_cpy,
|
|
||||||
'src-link' => \&update_link,
|
|
||||||
'src-git' => \&update_git
|
|
||||||
);
|
|
||||||
|
|
||||||
my %commands = (
|
my %commands = (
|
||||||
'list' => \&list,
|
'list' => \&list,
|
||||||
'update' => sub {
|
'update' => \&update,
|
||||||
-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;
|
|
||||||
},
|
|
||||||
'install' => \&install,
|
'install' => \&install,
|
||||||
'search' => \&search,
|
'search' => \&search,
|
||||||
'uninstall' => \&uninstall,
|
'uninstall' => \&uninstall,
|
||||||
|
Loading…
Reference in New Issue
Block a user