Просмотр исходного кода

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
Ralph Hempel 18 лет назад
Родитель
Сommit
0e158467a4
1 измененных файлов с 124 добавлено и 40 удалено
  1. 124 40
      scripts/feeds

+ 124 - 40
scripts/feeds

@@ -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
-	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 {
@@ -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,