summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorRaphaël Hertzog <hertzog@debian.org>2009-09-19 18:50:29 +0200
committerRaphaël Hertzog <hertzog@debian.org>2009-09-19 18:50:29 +0200
commitbeab30545253f39953156ad8dc62d58053e7d848 (patch)
tree142306559cf4d9567831e5a97d4fed59aaa5beb2 /scripts
parent7aa35855a72ea57497719715db6a5c8f93c467d5 (diff)
downloaddpkg-beab30545253f39953156ad8dc62d58053e7d848.tar.gz
dpkg-scanpackages: simplify by using the Dpkg::Control object
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/dpkg-scanpackages.pl53
1 files changed, 15 insertions, 38 deletions
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"));