X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/7e8f0bc28dcf77eb881b9455332da32027f2b228..6974a2421ed5195743aae9c16d02e50f83b6b159:/scripts/feeds

diff --git a/scripts/feeds b/scripts/feeds
index 8ec0799f7..0586b429d 100755
--- a/scripts/feeds
+++ b/scripts/feeds
@@ -48,6 +48,33 @@ sub parse_config() {
 	close FEEDS;
 }
 
+sub update_location($$)
+{
+	my $name = shift;
+	my $url  = shift;
+	my $old_url;
+
+	-d "./feeds/$name.tmp" or mkdir "./feeds/$name.tmp" or return 1;
+
+	if( open LOC, "< ./feeds/$name.tmp/location" )
+	{
+		chomp($old_url = readline LOC);
+		close LOC;
+	}
+
+	if( !$old_url || $old_url ne $url )
+	{
+		if( open LOC, "> ./feeds/$name.tmp/location" )
+		{
+			print LOC $url, "\n";
+			close LOC;
+		}
+		return $old_url ? 1 : 0;
+	}
+
+	return 0;	
+}
+
 sub update_index($)
 {
 	my $name = shift;
@@ -62,11 +89,12 @@ sub update_index($)
 	return 0;
 }
 
-sub update_svn($$) {
+sub update_svn($$$) {
 	my $name = shift;
 	my $src = shift;
+	my $relocate = shift;
 
-	if (-d "./feeds/$name/.svn" ) {
+	if ( !$relocate && -d "./feeds/$name/.svn" ) {
 		system("(cd \"./feeds/$name\"; svn up)") == 0 or return 1;
 	} else {
 		system("rm -rf \"./feeds/$name\"");
@@ -76,30 +104,34 @@ sub update_svn($$) {
 	return 0;
 }
 
-sub update_cpy($$) {
+sub update_cpy($$$) {
 	my $name = shift;
 	my $src = shift;
+	my $relocate = shift;
 
+	$relocate && system("rm -rf \"./feeds/$name\"");
 	system("mkdir -p ./feeds/$name");
 	system("cp -Rf $src ./feeds");
 
 	return 0;
 }
 
-sub update_link($$) {
+sub update_link($$$) {
 	my $name = shift;
 	my $src = abs_path(shift);
+	my $relocate = shift;	# no-op
 
 	system("rm -f ./feeds/$name; ln -s $src ./feeds/$name");
 
 	return 0;
 }
 
-sub update_git($$) {
+sub update_git($$$) {
 	my $name = shift;
 	my $src = shift;
+	my $relocate = shift;
 
-	if (-d "./feeds/$name/.git" ) {
+	if ( !$relocate && -d "./feeds/$name/.git" ) {
 		system("GIT_DIR=./feeds/$name/.git git pull") == 0 or return 1;
 	} else {
 		system("rm -rf \"./feeds/$name\"");
@@ -290,8 +322,9 @@ sub install_package {
 	foreach my $vpkg (@{$srcpackage{$src}}, $pkg) {
 		foreach my $dep (@{$vpkg->{depends}}, @{$vpkg->{builddepends}}) {
 			next if $dep =~ /@/;
-			next if $dep =~ /:/;
 			$dep =~ s/^\+//;
+			$dep =~ s/^.+://;
+			next unless $dep;
 			install_package($feed, $dep) == 0 or $ret = 1;
 		}
 	}
@@ -415,7 +448,11 @@ sub update_feed($$$$)
 	my $name=shift;
 	my $src=shift;
 	my $perform_update=shift;
+	my $force_relocate=update_location( $name, "@$src" );
 
+	if( $force_relocate ) {
+		warn "Source of feed $name has changed, replacing copy\n";
+	}
 	$update_method{$type} or do {
 		warn "Unknown type '$type' in feed $name\n";
 		return 1;
@@ -424,7 +461,7 @@ sub update_feed($$$$)
 		my $failed = 1;
 		foreach my $feedsrc (@$src) {
 			warn "Updating feed '$name' from '$feedsrc' ...\n";
-			next unless &{$update_method{$type}}($name, $feedsrc) == 0;
+			next unless &{$update_method{$type}}($name, $feedsrc, $force_relocate) == 0;
 			$failed = 0;
 			last;
 		}