X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=dgit;h=a21cddec32952c26243ae029a9edd490cb39d3a3;hp=e1b07977fb58ccc23b4f708ee7c3fe0190439fc0;hb=985e8045f860fb0be72b56b6859034b8c8746db9;hpb=adab6c02b46f732060d97dc19b052077b1b0e4b4 diff --git a/dgit b/dgit index e1b07977..a21cddec 100755 --- a/dgit +++ b/dgit @@ -512,16 +512,37 @@ sub mktree_in_ud_from_only_subdir () { return ($tree,$dir); } -sub dsc_files () { - my $field = $dsc->{'Checksums-Sha256'} || $dsc->{Files}; - defined $field or - fail "missing both Checksums-Sha256 and Files in ". +sub dsc_files_info () { + foreach my $csum (qw(Sha256 Sha1 MD5)) { + my $fname = $csum eq 'MD5' ? 'Files' : "Checksums-$csum"; + my $field = $dsc->{$fname}; + next unless defined $field; + my $digest = uc $csum; + if (!eval "use Digest::$digest; 1;") { + print DEBUG "ignoring $fname because $@\n"; + next; + } + my @out; + foreach (split /\n/, $field) { + next unless m/\S/; + m/^(\w+) (\d+) (\S+)$/ or + fail "could not parse .dsc $fname line \`$_'"; + my $digester = eval "Digest::$digest->new;" or die $@; + push @out, { + Hash => $1, + Bytes => $2, + Filename => $3, + Digester => $digester, + }; + } + return @out; + } + fail "missing any supported Checksums-* or Files field in ". $dsc->get_option('name'); - map { - m/^\w+ \d+ (\S+)$/ or - fail "could not parse .dsc Files/Checksums line \`$_'"; - $1; - } grep m/\S/, split /\n/, $field; +} + +sub dsc_files () { + map { $_->{Filename} } dsc_files_info(); } sub is_orig_file ($) {