Changeset 31677


Ignore:
Timestamp:
2012-05-11T20:17:15+02:00 (6 years ago)
Author:
jow
Message:

[scripts] 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
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/scripts/download.pl

    r31240 r31677  
    5353} 
    5454 
    55 my $md5cmd = which("md5sum"); 
    56 $md5cmd or $md5cmd = which("md5"); 
    57 $md5cmd or die 'no md5 checksum program found, please install md5 or md5sum'; 
     55my $md5cmd = which("md5sum") || which("md5") || die 'no md5 checksum program found, please install md5 or md5sum'; 
    5856chomp $md5cmd; 
    5957 
     
    6159{ 
    6260        my $mirror = shift; 
    63         my $options = $ENV{WGET_OPTIONS}; 
    64         $options or $options = ""; 
    65  
    66         $mirror =~ s/\/$//; 
    67         if( $mirror =~ /^file:\/\// ) { 
    68                 my $cache = $mirror; 
    69                 $cache =~ s/file:\/\///g; 
    70                 if(system("test -d $cache")) { 
    71                         print STDERR "Wrong local cache directory -$cache-.\n"; 
     61        my $options = $ENV{WGET_OPTIONS} || ""; 
     62 
     63        $mirror =~ s!/$!!; 
     64 
     65        if ($mirror =~ s!^file://!!) { 
     66                if (! -d "$mirror") { 
     67                        print STDERR "Wrong local cache directory -$mirror-.\n"; 
    7268                        cleanup(); 
    7369                        return; 
    7470                } 
    75                 if(! -d $target) { 
    76                         system("mkdir -p $target/"); 
    77                 } 
    78                 if (open TMPDLS, "find $cache -follow -name $filename 2>/dev/null |"){ 
    79                         my $i = 0; 
    80                         my $link = ""; 
    81                         while (defined($link = readline TMPDLS)) { 
    82                                 chomp $link; 
    83                                 $i++; 
    84                                 if ($i > 1) { 
    85                                         print("$i or more instances of $filename in $cache found . Only one instance allowed.\n"); 
    86                                         return; 
    87                                 } 
     71 
     72                if (! -d "$target") { 
     73                        system("mkdir", "-p", "$target/"); 
     74                } 
     75 
     76                if (! open TMPDLS, "find $mirror -follow -name $filename 2>/dev/null |") { 
     77                        print("Failed to search for $filename in $mirror\n"); 
     78                        return; 
     79                } 
     80 
     81                my $link; 
     82 
     83                while (defined(my $line = readline TMPDLS)) { 
     84                        chomp ($link = $line); 
     85                        if ($. > 1) { 
     86                                print("$. or more instances of $filename in $mirror found . Only one instance allowed.\n"); 
     87                                return; 
    8888                        } 
    89                         close TMPDLS; 
    90                         if ($i < 1) { 
    91                                 print("No instances of $filename found in $cache.\n"); 
    92                                 return; 
    93                         } elsif ($i == 1){ 
    94                                 print("Copying $filename from $link\n"); 
    95                                 copy($link, "$target/$filename.dl"); 
    96                         } 
    97                 } else { 
    98                         print("Failed to search for $filename in $cache\n"); 
    99                         return; 
    100                 } 
    101                 system("$md5cmd $target/$filename.dl > \"$target/$filename.md5sum\" ") == 0 or return; 
     89                } 
     90 
     91                close TMPDLS; 
     92 
     93                if (! $link) { 
     94                        print("No instances of $filename found in $mirror.\n"); 
     95                        return; 
     96                } 
     97 
     98                print("Copying $filename from $link\n"); 
     99                copy($link, "$target/$filename.dl"); 
     100 
     101                if (system("$md5cmd '$target/$filename.dl' > '$target/$filename.md5sum'")) { 
     102                        print("Failed to generate md5 sum for $filename\n"); 
     103                        return; 
     104                } 
    102105        } else { 
    103                 open WGET, "wget -t5 --timeout=20 --no-check-certificate $options -O- \"$mirror/$filename\" |" or die "Cannot launch wget.\n"; 
    104                 open MD5SUM, "| $md5cmd > \"$target/$filename.md5sum\"" or die "Cannot launch md5sum.\n"; 
     106                open WGET, "wget -t5 --timeout=20 --no-check-certificate $options -O- '$mirror/$filename' |" or die "Cannot launch wget.\n"; 
     107                open MD5SUM, "| $md5cmd > '$target/$filename.md5sum'" or die "Cannot launch md5sum.\n"; 
    105108                open OUTPUT, "> $target/$filename.dl" or die "Cannot create file $target/$filename.dl: $!\n"; 
    106109                my $buffer; 
     
    113116                close OUTPUT; 
    114117 
    115                 if (($? >> 8) != 0 ) { 
     118                if ($? >> 8) { 
    116119                        print STDERR "Download failed.\n"; 
    117120                        cleanup(); 
     
    131134 
    132135        unlink "$target/$filename"; 
    133         system("mv \"$target/$filename.dl\" \"$target/$filename\""); 
     136        system("mv", "$target/$filename.dl", "$target/$filename"); 
    134137        cleanup(); 
    135138} 
Note: See TracChangeset for help on using the changeset viewer.