diff options
Diffstat (limited to 'SBO-Lib')
| -rw-r--r-- | SBO-Lib/lib/SBO/Lib/Download.pm | 52 | ||||
| -rw-r--r-- | SBO-Lib/lib/SBO/Lib/Util.pm | 1 | 
2 files changed, 32 insertions, 21 deletions
diff --git a/SBO-Lib/lib/SBO/Lib/Download.pm b/SBO-Lib/lib/SBO/Lib/Download.pm index e574580..331949b 100644 --- a/SBO-Lib/lib/SBO/Lib/Download.pm +++ b/SBO-Lib/lib/SBO/Lib/Download.pm @@ -6,7 +6,7 @@ use warnings;  our $VERSION = '2.8.0'; -use SBO::Lib::Util qw/ :const script_error get_sbo_from_loc open_read get_arch /; +use SBO::Lib::Util qw/ :const %config script_error get_sbo_from_loc open_read get_arch /;  use SBO::Lib::Repo qw/ $distfiles /;  use SBO::Lib::Info qw/ get_download_info /; @@ -153,34 +153,44 @@ second value is true, the first one will have an error message.  sub get_distfile {    script_error('get_distfile requires two arguments') unless @_ == 2;    my ($link, $info_md5) = @_; +    my $filename = get_filename_from_link($link);    mkdir $distfiles unless -d $distfiles;    chdir $distfiles; -  unlink $filename if -f $filename; + +  my @links = $link;    my $fail = {}; -  #  if wget $link && verify, return -  #  else wget sbosrcarch && verify -  if (system('wget', '--no-check-certificate', '--tries=5', $link) != 0) { -    $fail->{msg} = "Unable to wget $link.\n"; -    $fail->{err} = _ERR_DOWNLOAD; -  } -  return 1 if not %$fail and verify_distfile(@_); -  if (not %$fail) { -    $fail->{msg} = "md5sum failure for $filename.\n"; -    $fail->{err} = _ERR_MD5SUM; +  if ($config{FALLBACK_ARCHIVE} ne 'FALSE') { +    push(@links, sprintf( +      "%s/by-md5/%s/%s/%s/%s", +      $config{FALLBACK_ARCHIVE}, +      substr($info_md5, 0, 1), substr($info_md5, 1, 1), $info_md5, _get_fname($link), +    ));    } -  # since the download from the original link either didn't download or -  # didn't verify, try to get it from sbosrcarch instead -  unlink $filename if -f $filename; -  my $sbosrcarch = sprintf( -    "ftp://slackware.uk/sbosrcarch/by-md5/%s/%s/%s/%s", -    substr($info_md5, 0, 1), substr($info_md5, 1, 1), $info_md5, _get_fname($link)); +  for my $link (@links) { +    unlink $filename if -f $filename; + +    if (system('wget', '--no-check-certificate', '--tries=5', $link) != 0) { +      if (not %$fail) { +        # The failure from the first source is apparently what is important. +        $fail = {msg => "Unable to wget $link.\n", err => _ERR_DOWNLOAD}; +      } + +      next; +    } + +    if (not verify_distfile(@_)) { +      if (not %$fail) { +        $fail = {msg => "md5sum failure for $filename.\n", err => _ERR_MD5SUM}; +      } -  return 1 if -    system('wget', '--no-check-certificate', '--tries=5', $sbosrcarch) == 0 and -    verify_distfile(@_); +      next; +    } + +    return 1; +  }    return $fail->{msg}, $fail->{err};  } diff --git a/SBO-Lib/lib/SBO/Lib/Util.pm b/SBO-Lib/lib/SBO/Lib/Util.pm index 1598cf1..83e837b 100644 --- a/SBO-Lib/lib/SBO/Lib/Util.pm +++ b/SBO-Lib/lib/SBO/Lib/Util.pm @@ -115,6 +115,7 @@ our %config = (    SLACKWARE_VERSION => 'FALSE',    REPO => 'FALSE',    GPG_KEY => 'D3076BC3E783EE747F09B8B70368EF579C7BA3B6', +  FALLBACK_ARCHIVE => "ftp://slackware.uk/sbosrcarch",  );  read_config();  | 
