]> git.donarmstrong.com Git - debbugs.git/commitdiff
[project @ 2005-07-24 17:31:18 by cjwatson]
authorcjwatson <>
Mon, 25 Jul 2005 00:31:18 +0000 (16:31 -0800)
committercjwatson <>
Mon, 25 Jul 2005 00:31:18 +0000 (16:31 -0800)
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
scripts/process.in
scripts/service.in

index 746e832ad2aa16da2eab693efc9f1ba3a95ed588..a7d809e5be255fb33005ffd4ec64d8023e9c95b6 100755 (executable)
@@ -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}};
     }
 }
 
index 26f556a9d6fdcdf037cff532991b2b5247b52cb2..f363d571ce73c1721cc5b2c2043028388ef10c61 100755 (executable)
@@ -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);
 }
 
index 926e4476162108178d09025f4b86e0ece9720772..0f1d9ade85defba6dba6b14a6c16b1a265e94a59 100755 (executable)
@@ -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 <code>.nn
 # Temps:  incoming/P<code>.nn
@@ -268,7 +268,7 @@ END
                         $data->{keywords}= join ' ', grep $_ ne 'pending',
                                                 @keywords;
                     }
-                    addfixedversions($data, undef, $version);
+                    addfixedversions($data, $data->{package}, $version, 'binary');
 
                    $message= <<END;
 From: $gMaintainerEmail ($gProject $gBug Tracking System)
@@ -317,7 +317,7 @@ END
                 $data->{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} = '';
                         }