From 6c76373bccaa3e2f2f94c75651b9274ac31c83d1 Mon Sep 17 00:00:00 2001 From: Sjoerd Simons Date: Mon, 10 Nov 2014 17:16:48 +0100 Subject: [PATCH] debmd: Fix DebMd parsing of Packages files Debian packages file use a newline to signal the end of a record, not Size. While e.g. the main Debian archive always uses Size as the last record that's not the case for e.g. the Raspbian archives. --- src/backend/Meta/Debmd.pm | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/backend/Meta/Debmd.pm b/src/backend/Meta/Debmd.pm index b43fde8ad22..ffe823fc96c 100644 --- a/src/backend/Meta/Debmd.pm +++ b/src/backend/Meta/Debmd.pm @@ -45,6 +45,17 @@ sub parse { open(F, '<', $fn) or die("open: $!\n"); while () { chomp; + # Empty line signifies the end of a package section + if (/^$/) { + $cur->{'hdrmd5'} = 0; + my $rel = exists $cur->{'release'} ? "-$cur->{'release'}" : ''; + push @{$cur->{'provides'}}, "$cur->{'name'} = $cur->{'version'}$rel"; + $cur->{'requires'} = [] unless exists $cur->{'requires'}; + $cur->{'source'} = $cur->{'name'} unless exists $cur->{'source'}; + $packs{$cur->{'name'}} = $cur; + $cur = {}; + next; + } next unless /^(Package|Version|Provides|Depends|Pre-Depends|Filename|Source|Architecture|Size):\s(.*)/; my ($tag, $what) = ($1, $2); if ($tag =~ /^[\w-]*Depends|Provides/) { @@ -63,16 +74,8 @@ sub parse { push @{$cur->{$tagmap{$tag}}}, @l; next; } - # Size is the last entry in a package section if ($tag eq 'Size') { $cur->{'id'} = "-1/$what/-1"; - $cur->{'hdrmd5'} = 0; - my $rel = exists $cur->{'release'} ? "-$cur->{'release'}" : ''; - push @{$cur->{'provides'}}, "$cur->{'name'} = $cur->{'version'}$rel"; - $cur->{'requires'} = [] unless exists $cur->{'requires'}; - $cur->{'source'} = $cur->{'name'} unless exists $cur->{'source'}; - $packs{$cur->{'name'}} = $cur; - $cur = {}; next; } $cur->{$tagmap{$tag}} = $what;