download.pl: - cleanup cache handling code - use alternative m// and s/// delimiters to get rid of tedious slash escaping - use multi-argument form of system() where possible to avoid quoting & escaping issues - avoid a temporary variable
SVN-Revision: 31677
This commit is contained in:
		| @@ -52,56 +52,59 @@ sub which($) { | |||||||
| 	return $res; | 	return $res; | ||||||
| } | } | ||||||
|  |  | ||||||
| my $md5cmd = which("md5sum"); | my $md5cmd = which("md5sum") || which("md5") || die 'no md5 checksum program found, please install md5 or md5sum'; | ||||||
| $md5cmd or $md5cmd = which("md5"); |  | ||||||
| $md5cmd or die 'no md5 checksum program found, please install md5 or md5sum'; |  | ||||||
| chomp $md5cmd; | chomp $md5cmd; | ||||||
|  |  | ||||||
| sub download | sub download | ||||||
| { | { | ||||||
| 	my $mirror = shift; | 	my $mirror = shift; | ||||||
| 	my $options = $ENV{WGET_OPTIONS}; | 	my $options = $ENV{WGET_OPTIONS} || ""; | ||||||
| 	$options or $options = ""; |  | ||||||
|  |  | ||||||
| 	$mirror =~ s/\/$//; | 	$mirror =~ s!/$!!; | ||||||
| 	if( $mirror =~ /^file:\/\// ) { |  | ||||||
| 		my $cache = $mirror; | 	if ($mirror =~ s!^file://!!) { | ||||||
| 		$cache =~ s/file:\/\///g; | 		if (! -d "$mirror") { | ||||||
| 		if(system("test -d $cache")) { | 			print STDERR "Wrong local cache directory -$mirror-.\n"; | ||||||
| 			print STDERR "Wrong local cache directory -$cache-.\n"; |  | ||||||
| 			cleanup(); | 			cleanup(); | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| 		if(! -d $target) { |  | ||||||
| 			system("mkdir -p $target/"); | 		if (! -d "$target") { | ||||||
|  | 			system("mkdir", "-p", "$target/"); | ||||||
| 		} | 		} | ||||||
| 		if (open TMPDLS, "find $cache -follow -name $filename 2>/dev/null |"){ |  | ||||||
| 			my $i = 0; | 		if (! open TMPDLS, "find $mirror -follow -name $filename 2>/dev/null |") { | ||||||
| 			my $link = ""; | 			print("Failed to search for $filename in $mirror\n"); | ||||||
| 			while (defined($link = readline TMPDLS)) { | 			return; | ||||||
| 				chomp $link; | 		} | ||||||
| 				$i++; |  | ||||||
| 				if ($i > 1) { | 		my $link; | ||||||
| 					print("$i or more instances of $filename in $cache found . Only one instance allowed.\n"); |  | ||||||
| 					return; | 		while (defined(my $line = readline TMPDLS)) { | ||||||
| 				} | 			chomp ($link = $line); | ||||||
| 			} | 			if ($. > 1) { | ||||||
| 			close TMPDLS; | 				print("$. or more instances of $filename in $mirror found . Only one instance allowed.\n"); | ||||||
| 			if ($i < 1) { | 				return; | ||||||
| 				print("No instances of $filename found in $cache.\n"); | 			} | ||||||
| 				return; | 		} | ||||||
| 			} elsif ($i == 1){ |  | ||||||
| 				print("Copying $filename from $link\n"); | 		close TMPDLS; | ||||||
| 				copy($link, "$target/$filename.dl"); |  | ||||||
| 			} | 		if (! $link) { | ||||||
| 		} else { | 			print("No instances of $filename found in $mirror.\n"); | ||||||
| 			print("Failed to search for $filename in $cache\n"); | 			return; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		print("Copying $filename from $link\n"); | ||||||
|  | 		copy($link, "$target/$filename.dl"); | ||||||
|  |  | ||||||
|  | 		if (system("$md5cmd '$target/$filename.dl' > '$target/$filename.md5sum'")) { | ||||||
|  | 			print("Failed to generate md5 sum for $filename\n"); | ||||||
| 			return; | 			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"; | ||||||
| 		open MD5SUM, "| $md5cmd > \"$target/$filename.md5sum\"" or die "Cannot launch md5sum.\n"; | 		open MD5SUM, "| $md5cmd > '$target/$filename.md5sum'" or die "Cannot launch md5sum.\n"; | ||||||
| 		open OUTPUT, "> $target/$filename.dl" or die "Cannot create file $target/$filename.dl: $!\n"; | 		open OUTPUT, "> $target/$filename.dl" or die "Cannot create file $target/$filename.dl: $!\n"; | ||||||
| 		my $buffer; | 		my $buffer; | ||||||
| 		while (read WGET, $buffer, 1048576) { | 		while (read WGET, $buffer, 1048576) { | ||||||
| @@ -112,7 +115,7 @@ sub download | |||||||
| 		close WGET; | 		close WGET; | ||||||
| 		close OUTPUT; | 		close OUTPUT; | ||||||
|  |  | ||||||
| 		if (($? >> 8) != 0 ) { | 		if ($? >> 8) { | ||||||
| 			print STDERR "Download failed.\n"; | 			print STDERR "Download failed.\n"; | ||||||
| 			cleanup(); | 			cleanup(); | ||||||
| 			return; | 			return; | ||||||
| @@ -130,7 +133,7 @@ sub download | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	unlink "$target/$filename"; | 	unlink "$target/$filename"; | ||||||
| 	system("mv \"$target/$filename.dl\" \"$target/$filename\""); | 	system("mv", "$target/$filename.dl", "$target/$filename"); | ||||||
| 	cleanup(); | 	cleanup(); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jo-Philipp Wich
					Jo-Philipp Wich