From 5b07a00be15ac3ce34a2aea8bcf11de9be3c9cd0 Mon Sep 17 00:00:00 2001 From: cjwatson <> Date: Sun, 24 Jul 2005 16:31:18 -0800 Subject: [PATCH] [project @ 2005-07-24 17:31:18 by cjwatson] Improve version canonicalisation when adding found/fixed versions and attempting to remove any corresponding fixed/found versions respectively. Try harder to store fully-qualified versions (i.e. with source package name). --- scripts/errorlib.in | 59 ++++++++++++++++++++++++++++++++------------- scripts/process.in | 12 ++++----- scripts/service.in | 8 +++--- 3 files changed, 52 insertions(+), 27 deletions(-) diff --git a/scripts/errorlib.in b/scripts/errorlib.in index 746e832a..a7d809e5 100755 --- a/scripts/errorlib.in +++ b/scripts/errorlib.in @@ -1,8 +1,9 @@ # -*- perl -*- -# $Id: errorlib.in,v 1.46 2005/07/18 03:09:09 cjwatson Exp $ +# $Id: errorlib.in,v 1.47 2005/07/24 17:31:18 cjwatson Exp $ use Mail::Address; use Debbugs::MIME qw(decode_rfc1522 encode_rfc1522); +use Debbugs::Packages; sub F_SETLK { 6; } sub F_WRLCK{ 1; } $flockstruct= 'sslll'; # And there ought to be something for this too. @@ -263,10 +264,22 @@ sub unfilelock { sub addfoundversions { my $data = shift; - my $source = shift; + my $package = shift; my $version = shift; + my $isbinary = shift; return unless defined $version; - undef $source if $source =~ m[(?:\s|/)]; + undef $package if $package =~ m[(?:\s|/)]; + my $source = $package; + + if (defined $package and $isbinary) { + my @srcinfo = binarytosource($package, $version, undef); + if (@srcinfo) { + # We know the source package(s). Use a fully-qualified version. + addfoundversions($data, $_->[0], $_->[1], '') foreach @srcinfo; + return; + } + # Otherwise, an unqualified version will have to do. + } # Strip off various kinds of brain-damage. $version =~ s/;.*//; @@ -274,12 +287,12 @@ sub addfoundversions { $version =~ s/ +[A-Za-z].*//; foreach my $ver (split /[,\s]+/, $version) { - $ver = "$source/$ver" if defined $source; - unless (grep { $_ eq $ver } @{$data->{found_versions}}) { - push @{$data->{found_versions}}, $ver; + my $sver = defined($source) ? "$source/$ver" : ''; + unless (grep { $_ eq $ver or $_ eq $sver } @{$data->{found_versions}}) { + push @{$data->{found_versions}}, defined($source) ? $sver : $ver; } @{$data->{fixed_versions}} = - grep { $_ ne $ver } @{$data->{fixed_versions}}; + grep { $_ ne $ver and $_ ne $sver } @{$data->{fixed_versions}}; } } @@ -291,18 +304,30 @@ sub removefoundversions { undef $source if $source =~ m[(?:\s|/)]; foreach my $ver (split /[,\s]+/, $version) { - $ver = "$source/$ver" if defined $source; + my $sver = defined($source) ? "$source/$ver" : ''; @{$data->{found_versions}} = - grep { $_ ne $ver } @{$data->{found_versions}}; + grep { $_ ne $ver and $_ ne $sver } @{$data->{found_versions}}; } } sub addfixedversions { my $data = shift; - my $source = shift; + my $package = shift; my $version = shift; + my $isbinary = shift; return unless defined $version; - undef $source if $source =~ m[(?:\s|/)]; + undef $package if $package =~ m[(?:\s|/)]; + my $source = $package; + + if (defined $package and $isbinary) { + my @srcinfo = binarytosource($package, $version, undef); + if (@srcinfo) { + # We know the source package(s). Use a fully-qualified version. + addfixedversions($data, $_->[0], $_->[1], '') foreach @srcinfo; + return; + } + # Otherwise, an unqualified version will have to do. + } # Strip off various kinds of brain-damage. $version =~ s/;.*//; @@ -310,12 +335,12 @@ sub addfixedversions { $version =~ s/ +[A-Za-z].*//; foreach my $ver (split /[,\s]+/, $version) { - $ver = "$source/$ver" if defined $source; - unless (grep { $_ eq $ver } @{$data->{fixed_versions}}) { - push @{$data->{fixed_versions}}, $ver; + my $sver = (defined($source) ? "$source/$ver" : ''; + unless (grep { $_ eq $ver or $_ eq $sver } @{$data->{fixed_versions}}) { + push @{$data->{fixed_versions}}, defined($source) ? $sver : $ver; } @{$data->{found_versions}} = - grep { $_ ne $ver } @{$data->{found_versions}}; + grep { $_ ne $ver and $_ ne $sver } @{$data->{found_versions}}; } } @@ -327,9 +352,9 @@ sub removefixedversions { undef $source if $source =~ m[(?:\s|/)]; foreach my $ver (split /[,\s]+/, $version) { - $ver = "$source/$ver" if defined $source; + my $sver = defined($source) ? "$source/$ver" : ''; @{$data->{fixed_versions}} = - grep { $_ ne $ver } @{$data->{fixed_versions}}; + grep { $_ ne $ver and $_ ne $sver } @{$data->{fixed_versions}}; } } diff --git a/scripts/process.in b/scripts/process.in index 26f556a9..f363d571 100755 --- a/scripts/process.in +++ b/scripts/process.in @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $Id: process.in,v 1.96 2005/07/22 03:49:44 don Exp $ +# $Id: process.in,v 1.97 2005/07/24 17:31:18 cjwatson Exp $ # # Usage: process nn # Temps: incoming/Pnn @@ -361,9 +361,9 @@ END $data->{keywords} = join ' ', grep $_ ne 'pending', split ' ', $data->{keywords}; if (defined $pheader{'source-version'}) { - addfixedversions($data, $pheader{source}, $pheader{'source-version'}); + addfixedversions($data, $pheader{source}, $pheader{'source-version'}, ''); } elsif (defined $pheader{version}) { - addfixedversions($data, undef, $pheader{version}); + addfixedversions($data, $pheader{package}, $pheader{version}, 'binary'); } } @@ -654,14 +654,14 @@ if (defined $pheader{source}) { # appear that way in version trees so that we can deal with binary # packages moving from one source package to another. if (defined $pheader{'source-version'}) { - addfoundversions($data, $pheader{source}, $pheader{'source-version'}); + addfoundversions($data, $pheader{source}, $pheader{'source-version'}, ''); } elsif (defined $pheader{version}) { - addfoundversions($data, $pheader{source}, $pheader{version}); + addfoundversions($data, $pheader{source}, $pheader{version}, ''); } writebug($ref, $data); } elsif (defined $pheader{package}) { # TODO: could handle Source-Version: by looking up the source package? - addfoundversions($data, undef, $pheader{version}) if defined($pheader{version}); + addfoundversions($data, $pheader{package}, $pheader{version}, 'binary'); writebug($ref, $data); } diff --git a/scripts/service.in b/scripts/service.in index 926e4476..0f1d9ade 100755 --- a/scripts/service.in +++ b/scripts/service.in @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $Id: service.in,v 1.104 2005/07/18 11:52:33 cjwatson Exp $ +# $Id: service.in,v 1.105 2005/07/24 17:31:18 cjwatson Exp $ # # Usage: service .nn # Temps: incoming/P.nn @@ -268,7 +268,7 @@ END $data->{keywords}= join ' ', grep $_ ne 'pending', @keywords; } - addfixedversions($data, undef, $version); + addfixedversions($data, $data->{package}, $version, 'binary'); $message= <{found_versions}= []; $data->{fixed_versions}= []; # TODO: what if $newpackage is a source package? - addfoundversions($data, undef, $version) if defined $version; + addfoundversions($data, $data->{package}, $version, 'binary'); &addmaintainers($data); } while (&getnextbug); } @@ -373,7 +373,7 @@ END my $lastfixed = (reverse @{$data->{fixed_versions}})[0]; # TODO: what if $data->{package} is a source package? - addfoundversions($data, undef, $version); + addfoundversions($data, $data->{package}, $version, 'binary'); if (defined $lastfixed and $version eq $lastfixed) { $data->{done} = ''; } -- 2.39.5