diff --git a/webtools/bugzilla/Bugzilla/Flag.pm b/webtools/bugzilla/Bugzilla/Flag.pm index 57ea5598281..ffed79bdef7 100644 --- a/webtools/bugzilla/Bugzilla/Flag.pm +++ b/webtools/bugzilla/Bugzilla/Flag.pm @@ -307,7 +307,7 @@ sub process { my $old_summaries = join(", ", @old_summaries); my $new_summaries = join(", ", @new_summaries); - my ($removed, $added) = &::DiffStrings($old_summaries, $new_summaries); + my ($removed, $added) = diff_strings($old_summaries, $new_summaries); if ($removed ne $added) { my $sql_removed = &::SqlQuote($removed); my $sql_added = &::SqlQuote($added); diff --git a/webtools/bugzilla/Bugzilla/Util.pm b/webtools/bugzilla/Bugzilla/Util.pm index 0328c4f8686..125d911640e 100644 --- a/webtools/bugzilla/Bugzilla/Util.pm +++ b/webtools/bugzilla/Bugzilla/Util.pm @@ -32,7 +32,7 @@ use base qw(Exporter); html_quote url_quote value_quote xml_quote css_class_quote lsearch max min - trim format_time); + trim diff_strings format_time); use Bugzilla::Config; @@ -146,6 +146,33 @@ sub trim { return $str; } +sub diff_strings { + my ($oldstr, $newstr) = @_; + + # Split the old and new strings into arrays containing their values. + $oldstr =~ s/[\s,]+/ /g; + $newstr =~ s/[\s,]+/ /g; + my @old = split(" ", $oldstr); + my @new = split(" ", $newstr); + + # For each pair of (old, new) entries: + # 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 = ''; + } + } + } + my $removed = join (", ", grep { $_ ne '' } @old); + my $added = join (", ", grep { $_ ne '' } @new); + + return ($removed, $added); +} + sub format_time { my ($time) = @_; @@ -208,8 +235,9 @@ Bugzilla::Util - Generic utility functions for bugzilla $val = max($a, $b, $c); $val = min($a, $b, $c); - # Functions for trimming variables + # Functions for manipulating strings $val = trim(" abc "); + ($removed, $added) = diff_strings($old, $new); # Functions for formatting time format_time($time); @@ -315,7 +343,7 @@ Returns the minimum from a set of values. =back -=head2 Trimming +=head2 String Manipulation =over 4 @@ -324,6 +352,14 @@ Returns the minimum from a set of values. Removes any leading or trailing whitespace from a string. This routine does not modify the existing string. +=item C + +Takes two strings containing a list of comma- or space-separated items +and returns what items were removed from or added to the new one, +compared to the old one. Returns a list, where the first entry is a scalar +containing removed items, and the second entry is a scalar containing added +items. + =back =head2 Formatting Time diff --git a/webtools/bugzilla/globals.pl b/webtools/bugzilla/globals.pl index 5f599146f32..81b99c8ac65 100644 --- a/webtools/bugzilla/globals.pl +++ b/webtools/bugzilla/globals.pl @@ -1442,35 +1442,6 @@ sub RemoveVotes { } } -# Take two comma or space separated strings and return what -# values were removed from or added to the new one. -sub DiffStrings { - my ($oldstr, $newstr) = @_; - - # Split the old and new strings into arrays containing their values. - $oldstr =~ s/[\s,]+/ /g; - $newstr =~ s/[\s,]+/ /g; - my @old = split(" ", $oldstr); - my @new = split(" ", $newstr); - - # For each pair of (old, new) entries: - # 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 = ''; - } - } - } - my $removed = join (", ", grep { $_ ne '' } @old); - my $added = join (", ", grep { $_ ne '' } @new); - - return ($removed, $added); -} - sub PerformSubsts { my ($str, $substs) = (@_); $str =~ s/%([a-z]*)%/(defined $substs->{$1} ? $substs->{$1} : Param($1))/eg; diff --git a/webtools/bugzilla/process_bug.cgi b/webtools/bugzilla/process_bug.cgi index e389d45513f..d8ad4cafa26 100755 --- a/webtools/bugzilla/process_bug.cgi +++ b/webtools/bugzilla/process_bug.cgi @@ -37,6 +37,7 @@ require "CGI.pl"; use Bugzilla::Bug; use Bugzilla::User; +use Bugzilla::Util; use Bugzilla::RelationSet; # Use the Flag module to modify flag data if the user set flags. @@ -1082,7 +1083,7 @@ sub LogDependencyActivity { my $newstr = SnapShotDeps($i, $target, $me); if ($oldstr ne $newstr) { # Figure out what's really different... - my ($removed, $added) = DiffStrings($oldstr, $newstr); + my ($removed, $added) = diff_strings($oldstr, $newstr); LogActivityEntry($i,$target,$removed,$added,$whoid,$timestamp); # update timestamp on target bug so midairs will be triggered SendSQL("UPDATE bugs SET delta_ts=NOW() WHERE bug_id=$i"); @@ -1687,7 +1688,7 @@ foreach my $id (@idlist) { # If this is the keyword field, only record the changes, not everything. if ($col eq 'keywords') { - ($old, $new) = DiffStrings($old, $new); + ($old, $new) = diff_strings($old, $new); } if ($col eq 'product') {