# 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';
$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;
}
}
}
}
+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 =~ /(..)$/;
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);
}
@$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();
}