allow arbitary folder layout when using localmirrors
Make the download script follow symlinks and search subfolders when looking for a file in a local download mirror. Signed-off-by: Tathagata Das <tathagata@alumnux.com> SVN-Revision: 31240
This commit is contained in:
		| @@ -9,6 +9,7 @@ | |||||||
| use strict; | use strict; | ||||||
| use warnings; | use warnings; | ||||||
| use File::Basename; | use File::Basename; | ||||||
|  | use File::Copy; | ||||||
|  |  | ||||||
| @ARGV > 2 or die "Syntax: $0 <target dir> <filename> <md5sum> [<mirror> ...]\n"; | @ARGV > 2 or die "Syntax: $0 <target dir> <filename> <md5sum> [<mirror> ...]\n"; | ||||||
|  |  | ||||||
| @@ -74,7 +75,29 @@ sub download | |||||||
| 		if(! -d $target) { | 		if(! -d $target) { | ||||||
| 			system("mkdir -p $target/"); | 			system("mkdir -p $target/"); | ||||||
| 		} | 		} | ||||||
| 		system("cp -vf $cache/$filename $target/$filename.dl") == 0 or return; | 		if (open TMPDLS, "find $cache -follow -name $filename 2>/dev/null |"){ | ||||||
|  | 			my $i = 0; | ||||||
|  | 			my $link = ""; | ||||||
|  | 			while (defined($link = readline TMPDLS)) { | ||||||
|  | 				chomp $link; | ||||||
|  | 				$i++; | ||||||
|  | 				if ($i > 1) { | ||||||
|  | 					print("$i or more instances of $filename in $cache found . Only one instance allowed.\n"); | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			close TMPDLS; | ||||||
|  | 			if ($i < 1) { | ||||||
|  | 				print("No instances of $filename found in $cache.\n"); | ||||||
|  | 				return; | ||||||
|  | 			} elsif ($i == 1){ | ||||||
|  | 				print("Copying $filename from $link\n"); | ||||||
|  | 				copy($link, "$target/$filename.dl"); | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			print("Failed to search for $filename in $cache\n"); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
| 		system("$md5cmd $target/$filename.dl > \"$target/$filename.md5sum\" ") == 0 or return; | 		system("$md5cmd $target/$filename.dl > \"$target/$filename.md5sum\" ") == 0 or return; | ||||||
| 	} else { | 	} else { | ||||||
| 		open WGET, "wget -t5 --timeout=20 --no-check-certificate $options -O- \"$mirror/$filename\" |" or die "Cannot launch wget.\n"; | 		open WGET, "wget -t5 --timeout=20 --no-check-certificate $options -O- \"$mirror/$filename\" |" or die "Cannot launch wget.\n"; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 John Crispin
					John Crispin