From f0b6242097e487198de559d39d4169a2a0a4d8e7 Mon Sep 17 00:00:00 2001 From: Tiago Mello Date: Thu, 10 Feb 2011 23:31:28 -0200 Subject: Bug 620827: Refactor remove see also to use remove_from_db instead. r/a=mkanat --- Bugzilla/Util.pm | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'Bugzilla/Util.pm') diff --git a/Bugzilla/Util.pm b/Bugzilla/Util.pm index f9e8d12f7..058a49af3 100644 --- a/Bugzilla/Util.pm +++ b/Bugzilla/Util.pm @@ -55,7 +55,7 @@ use Digest; use Email::Address; use List::Util qw(first); use Math::Random::Secure qw(irand); -use Scalar::Util qw(tainted); +use Scalar::Util qw(tainted blessed); use Template::Filters; use Text::Wrap; @@ -307,25 +307,37 @@ sub use_attachbase { } sub diff_arrays { - my ($old_ref, $new_ref) = @_; + my ($old_ref, $new_ref, $attrib) = @_; my @old = @$old_ref; my @new = @$new_ref; + $attrib ||= 'name'; # For each pair of (old, new) entries: + # If object arrays were passed then an attribute should be defined; # If they're equal, set them to empty. When done, @old contains entries # that were removed; @new contains ones that got added. foreach my $oldv (@old) { foreach my $newv (@new) { - next if ($newv eq ''); - if ($oldv eq $newv) { - $newv = $oldv = ''; + next if ($newv eq '' or $oldv eq ''); + if (blessed($oldv) and blessed($newv)) { + if ($oldv->$attrib eq $newv->$attrib) { + $newv = $oldv = ''; + } + } + else { + if ($oldv eq $newv) { + $newv = $oldv = '' + } } } } - my @removed = grep { $_ ne '' } @old; - my @added = grep { $_ ne '' } @new; + my @removed; + my @added; + @removed = grep { $_ ne '' } @old; + @added = grep { $_ ne '' } @new; + return (\@removed, \@added); } -- cgit v1.2.3-24-g4f1b