}
}
+=head2 removefoundversions
+
+ removefoundversions($data,$package,$versiontoremove)
+
+Removes found versions from $data
+
+If a version is fully qualified (contains /) only versions matching
+exactly are removed. Otherwise, all versions matching the version
+number are removed.
+
+Currently $package and $isbinary are entirely ignored, but accepted
+for backwards compatibilty.
+
+=cut
+
sub removefoundversions {
my $data = shift;
my $package = shift;
my $version = shift;
my $isbinary = shift;
return unless defined $version;
- 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.
- removefoundversions($data, $_->[0], $_->[1], '') foreach @srcinfo;
- return;
- }
- # Otherwise, an unqualified version will have to do.
- undef $source;
- }
foreach my $ver (split /[,\s]+/, $version) {
- my $sver = defined($source) ? "$source/$ver" : '';
- @{$data->{found_versions}} =
- grep { $_ ne $ver and $_ ne $sver } @{$data->{found_versions}};
+ if ($ver =~ m{/}) {
+ # fully qualified version
+ @{$data->{found_versions}} =
+ grep {$_ ne $ver}
+ @{$data->{found_versions}};
+ }
+ else {
+ # non qualified version; delete all matchers
+ @{$data->{found_versions}} =
+ grep {$_ !~ m[(?:^|/)\Q$ver\E$]}
+ @{$data->{found_versions}};
+ }
}
}
--- /dev/null
+# -*- mode: cperl;-*-
+
+use Test::More tests => 3;
+
+use warnings;
+use strict;
+
+use Storable qw(dclone);
+
+# First, lets create a dataset for the illustrious foo package
+
+my %data = (package => q(foo),
+ found_versions => ['bar/1.00',
+ '1.00',
+ '1.34',
+ ],
+ fixed_versions => ['bar/1.02',
+ '1.45',
+ ],
+ );
+
+
+require_ok('scripts/errorlib.in');
+# check removefoundversions
+my $data = dclone(\%data);
+removefoundversions($data,$data->{package},'1.00');
+is_deeply($data->{found_versions},['1.34'],'removefoundversions removes all 1.00 versions');
+$data = dclone(\%data);
+removefoundversions($data,$data->{package},'bar/1.00');
+is_deeply($data->{found_versions},['1.00','1.34'],'removefoundversions removes only bar/1.00 versions');