From beab30545253f39953156ad8dc62d58053e7d848 Mon Sep 17 00:00:00 2001 From: Raphaƫl Hertzog Date: Sat, 19 Sep 2009 18:50:29 +0200 Subject: dpkg-scanpackages: simplify by using the Dpkg::Control object --- scripts/dpkg-scanpackages.pl | 53 +++++++++++++------------------------------- 1 file changed, 15 insertions(+), 38 deletions(-) (limited to 'scripts') diff --git a/scripts/dpkg-scanpackages.pl b/scripts/dpkg-scanpackages.pl index 65b6d66b3..ff8e00110 100755 --- a/scripts/dpkg-scanpackages.pl +++ b/scripts/dpkg-scanpackages.pl @@ -8,7 +8,7 @@ use IO::File; use Dpkg; use Dpkg::Gettext; use Dpkg::ErrorHandling; -use Dpkg::Control::Fields; +use Dpkg::Control; use Dpkg::Version qw(compare_versions); use Dpkg::Checksums; @@ -22,22 +22,6 @@ my @spuriousover; my %packages; my %overridden; -my @sums; -foreach (@check_supported) { - my $copy = uc($_); - $copy = "MD5sum" if $_ eq "md5"; - push @sums, $copy; -} -my @fieldpri = (qw(Package Package-Type Source Version Kernel-Version - Architecture Subarchitecture Essential Origin Bugs - Maintainer Installed-Size Installer-Menu-Item), - field_list_pkg_dep(), qw(Filename Size), @sums, - qw(Section Priority Homepage Description Tag Task)); - -# This maps the fields into the proper case -my %field_case; -@field_case{map{lc($_)} @fieldpri} = @fieldpri; - use Getopt::Long qw(:config bundling); my %options = (help => sub { usage(); exit 0; }, @@ -204,25 +188,24 @@ FILE: next; } - my %tv = (); + my $fields = Dpkg::Control->new(type => CTRL_APT_PKG); my $temp = $control; while ($temp =~ s/^\n*(\S+):[ \t]*(.*(\n[ \t].*)*)\n//) { - my ($key,$value)= (lc $1,$2); - if (defined($field_case{$key})) { $key= $field_case{$key}; } + my ($key, $value) = ($1, $2); $value =~ s/\s+$//; - $tv{$key}= $value; + $fields->{$key} = $value; } $temp =~ /^\n*$/ or error(_g("Unprocessed text from %s control file; info:\n%s / %s"), $fn, $control, $temp); - defined($tv{'Package'}) + defined($fields->{'Package'}) or error(_g("No Package field in control file of %s"), $fn); - my $p= $tv{'Package'}; delete $tv{'Package'}; + my $p = $fields->{'Package'}; if (defined($packages{$p}) and not $options{multiversion}) { foreach (@{$packages{$p}}) { - if (vercmp($tv{'Version'}, $_->{'Version'})) { + if (vercmp($fields->{'Version'}, $_->{'Version'})) { warning(_g("Package %s (filename %s) is repeat but newer version;"), $p, $fn); warning(_g("used that one and ignored data from %s!"), @@ -237,23 +220,23 @@ FILE: } } warning(_g("Package %s (filename %s) has Filename field!"), $p, $fn) - if defined($tv{'Filename'}); + if defined($fields->{'Filename'}); - $tv{'Filename'}= "$pathprefix$fn"; + $fields->{'Filename'} = "$pathprefix$fn"; my $sums = {}; my $size; getchecksums($fn, $sums, \$size); foreach my $alg (@check_supported) { if ($alg eq "md5") { - $tv{'MD5sum'} = $sums->{'md5'}; + $fields->{'MD5sum'} = $sums->{'md5'}; } else { - $tv{uc($alg)} = $sums->{$alg}; + $fields->{$alg} = $sums->{$alg}; } } - $tv{'Size'} = $size; + $fields->{'Size'} = $size; - push @{$packages{$p}}, {%tv}; + push @{$packages{$p}}, $fields; } close($find_h); @@ -268,14 +251,8 @@ for my $p (sort keys %packages) { push(@missingover,$p); } for my $package (@{$packages{$p}}) { - my $record= "Package: $p\n"; - for my $key (@fieldpri) { - next unless defined $$package{$key}; - $record .= "$key: $$package{$key}\n"; - } - $record .= "\n"; - $records_written++; - print(STDOUT $record) or syserr(_g("Failed when writing stdout")); + print(STDOUT "$package\n") or syserr(_g("Failed when writing stdout")); + $records_written++; } } close(STDOUT) or syserr(_g("Couldn't close stdout")); -- cgit v1.2.3