From 7a16767e7b88dfecfb999fe24e3914eabce21631 Mon Sep 17 00:00:00 2001 From: Don Armstrong Date: Mon, 6 Nov 2006 01:17:20 -0800 Subject: [PATCH] * Clean up removefoundversions and add tests for the new functionality --- scripts/errorlib.in | 43 +++++++++++++++++++++++++++---------------- t/03_versions.t | 30 ++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 16 deletions(-) create mode 100644 t/03_versions.t diff --git a/scripts/errorlib.in b/scripts/errorlib.in index d26381e..fb32ba1 100755 --- a/scripts/errorlib.in +++ b/scripts/errorlib.in @@ -299,30 +299,41 @@ sub addfoundversions { } } +=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}}; + } } } diff --git a/t/03_versions.t b/t/03_versions.t new file mode 100644 index 0000000..ace98ce --- /dev/null +++ b/t/03_versions.t @@ -0,0 +1,30 @@ +# -*- 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'); -- 2.39.2