X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=migrate%2Fdebbugs-makeversions;h=fd70f2dcfb6262a3f810effa1334555bc0a41fb1;hb=867420593c939cf9585bd42f558778ad598076b9;hp=2891dfeba0f4e878b0a4627790a35d9666eae502;hpb=5c102d4541a9200d7e746739bdfd36eee6712b5d;p=debbugs.git diff --git a/migrate/debbugs-makeversions b/migrate/debbugs-makeversions index 2891dfe..fd70f2d 100755 --- a/migrate/debbugs-makeversions +++ b/migrate/debbugs-makeversions @@ -3,6 +3,12 @@ # guesswork, based on Version: pseudo-headers and closing mails that look # like Debian changelogs. The latter in particular is somewhat heuristic. +# <@aj> Hackin' on the BTS, Feelin' like it'll take forever; Oh you better +# hold it's hand, when it dies on names so clever. These are the best +# bugs of our life. It's up to archive-slash-69, man we were killin' +# time, we were young and resltess, we needed to unwind. I guess +# nothin' can last forever - forever, no... + my $config_path = '/etc/debbugs'; my $lib_path = '/usr/lib/debbugs'; @@ -75,7 +81,7 @@ sub getbuginfo ($) $fv =~ s/;.*//; $fv =~ s/ *\(.*\)//; # Strip off other random junk at the end of a version. - $fv =~ s/ *[A-Za-z].*//; + $fv =~ s/ +[A-Za-z].*//; $ver = $fv; } } @@ -136,17 +142,18 @@ sub mergeinto ($$) } } +chdir $gSpoolDir or die "Can't chdir $gSpoolDir: $!"; + my $db = $ARGV[0]; -opendir DB, "$gSpoolDir/$db" or die "Can't opendir $db: $!"; +opendir DB, $db or die "Can't opendir $db: $!"; while (defined(my $dir = readdir DB)) { - next if $dir =~ /^\.\.?$/ or not -d "$gSpoolDir/$db/$dir"; - opendir HASH, "$gSpoolDir/$db/$dir" - or die "Can't opendir $gSpoolDir/$db/$dir: $!"; + next if $dir =~ /^\.\.?$/ or not -d "$db/$dir"; + opendir HASH, "$db/$dir" or die "Can't opendir $db/$dir: $!"; while (defined(my $file = readdir HASH)) { next unless $file =~ /\.log$/; - next if -z "$gSpoolDir/$db/$dir/$file"; + next if -z "$db/$dir/$file"; (my $bug = $file) =~ s/\..*//; $bug =~ /(..)$/; @@ -160,21 +167,29 @@ while (defined(my $dir = readdir DB)) { next; } - my ($found_versions, $fixed_versions) = - getbuginfo("$gSpoolDir/$db/$dir/$file"); + if (@{$status->{found_versions}} or @{$status->{fixed_versions}}) { + unlockreadbugmerge($locks); + next; + } + my @merges = (); + # Only process the lowest of each set of merged bugs. if (length $status->{mergedwith}) { @merges = sort { $a <=> $b } split ' ', $status->{mergedwith}; if ($merges[0] < $bug) { - # already processed unlockreadbugmerge($locks); next; } + } + + my ($found_versions, $fixed_versions) = getbuginfo("$db/$dir/$file"); + + if (length $status->{mergedwith}) { for my $merge (@merges) { $merge =~ /(..)$/; my $mergehash = $1; my ($mfound, $mfixed) = - getbuginfo("$gSpoolDir/$db/$mergehash/$merge.log"); + getbuginfo("$db/$mergehash/$merge.log"); mergeinto($found_versions, $mfound); mergeinto($fixed_versions, $mfixed); } @@ -182,14 +197,14 @@ while (defined(my $dir = readdir DB)) { @$fixed_versions = () unless length $status->{done}; - for my $out ($bug, (split ' ', $status->{mergedwith})) { + for my $out ($bug, @merges) { if ($out != $bug) { filelock("lock/$out"); } my $outstatus = readbug($out, $db); $outstatus->{found_versions} = [@$found_versions]; $outstatus->{fixed_versions} = [@$fixed_versions]; - writebug($out, $mergestatus); + writebug($out, $outstatus, $db, 2, 'disable bughook'); if ($out != $bug) { unfilelock(); }