- next if $fn ne 'version';
- next if $fv !~ /^(\d[^,\s]*(?:[,\s]+|$))+/;
- if ($closing) {
- for my $v (split /[,\s]+/, $fv) {
- push @fixed_versions, $v
- unless exists $fixed_versions{$v};
- $fixed_versions{$v} = 1;
- @found_versions = grep { $_ ne $v } @found_versions;
- delete $found_versions{$v};
- }
- } else {
- for my $v (split /[,\s]+/, $fv) {
- push @found_versions, $v
- unless exists $found_versions{$v};
- $found_versions{$v} = 1;
- @fixed_versions = grep { $_ ne $v } @fixed_versions;
- delete $fixed_versions{$v};
- }
+ if ($fn eq 'source') {
+ $source = $fv;
+ } elsif ($fn eq 'source-version' and
+ $fv =~ /^(\d[^,\s]*(?:[,\s]+|$))+/) {
+ $sourcever = $fv;
+ } elsif ($fn eq 'version' and $fv =~ /^(\d[^,\s]*(?:[,\s]+|$))+/) {
+ # Deal with reportbug brain-damage.
+ next if $fv =~ /^unavailable/i;
+ $fv =~ s/;.*//;
+ $fv =~ s/ *\(.*\)//;
+ # Strip off other random junk at the end of a version.
+ $fv =~ s/ +[A-Za-z].*//;
+ $ver = $fv;
+ }
+ }
+
+ my @parsedvers;
+ if (defined $ver) {
+ push @parsedvers, split /[,\s]+/, $ver;
+ } elsif (defined $source and defined $sourcever) {
+ push @parsedvers, map "$source/$_", split /[,\s]+/, $sourcever;
+ }
+
+ if ($closing) {
+ for my $v (@parsedvers) {
+ push @fixed_versions, $v
+ unless exists $fixed_versions{$v};
+ $fixed_versions{$v} = 1;
+ @found_versions = grep { $_ ne $v } @found_versions;
+ delete $found_versions{$v};
+ }
+ } else {
+ for my $v (@parsedvers) {
+ push @found_versions, $v
+ unless exists $found_versions{$v};
+ $found_versions{$v} = 1;
+ @fixed_versions = grep { $_ ne $v } @fixed_versions;
+ delete $fixed_versions{$v};