diff options
author | Jeremy T. Bouse <jbouse@users.noreply.github.com> | 2022-06-22 17:14:18 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-22 17:14:18 +0300 |
commit | adf14c9b3a8d16b3b7d5bceee754053c99d11309 (patch) | |
tree | a3efd3e1f0e50bddd422228855ea8328f375a4ef | |
parent | 48dcc4ba3729f185aeb53c44ec4afdaa03a83c19 (diff) | |
parent | a55ea4024344a6a8fcc36c520e48be2ce3039980 (diff) |
Merge pull request #131 from liedekef/master
Download the by-hash directories
-rwxr-xr-x | apt-mirror | 92 |
1 files changed, 92 insertions, 0 deletions
@@ -722,6 +722,98 @@ foreach ( keys %urls_to_download ) } ###################################################################################### +## by-hash SHA256 files download + +%urls_to_download = (); + +sub find_by_hash_sha256_files_in_release +{ + # Look in the dists/$DIST/Release file for the by-hash SHA256 files that belong + # to the given component and architecture. + + my $dist_uri = shift; + my $component = shift; + my $arch = shift; + my ( $release_uri, $release_path, $line ) = ''; + + $release_uri = $dist_uri . "Release"; + $release_path = get_variable("skel_path") . "/" . sanitise_uri($release_uri); + + unless ( open STREAM, "<$release_path" ) + { + warn( "Failed to open Release file from " . $release_uri ); + return; + } + + my $checksums = 0; + while ( $line = <STREAM> ) + { + chomp $line; + if ($checksums) + { + if ( $line =~ /^ +(.*)$/ ) + { + my @parts = split( / +/, $1 ); + if ( @parts == 3 ) + { + my ( $sha256, $size, $filename ) = @parts; + my $dirname = dirname($filename); + my $sha256_filename = '/'.$dirname.'/by-hash/SHA256/'.$sha256; + { + add_url_to_download( $dist_uri . $sha256_filename ); + } + } + else + { + warn("Malformed checksum line \"$1\" in $release_uri"); + } + } + else + { + $checksums = 0; + } + } + if ( not $checksums ) + { + if ( $line eq "SHA256:" ) + { + $checksums = 1; + } + } + } +} + +print "Processing SHA256 by-hash files ["; + +foreach (@config_binaries) +{ + my ( $arch, $uri, $distribution, @components ) = @{$_}; + print "D"; + if (@components) + { + $url = $uri . "/dists/" . $distribution . "/"; + + my $component; + foreach $component (@components) + { + find_by_hash_sha256_files_in_release( $url, $component, $arch ); + } + } +} + +print "]\n\n"; + +push( @index_urls, sort keys %urls_to_download ); +download_urls( "by-hash-SHA256", sort keys %urls_to_download ); + +foreach ( keys %urls_to_download ) +{ + s[^(\w+)://][]; + s[~][%7E]g if get_variable("_tilde"); + $skipclean{$_} = 1; +} + +###################################################################################### ## Main download preparations %urls_to_download = (); |