oldvalue, newvalue FROM bugs_activity");
$sth->execute;
while (my ($bug_id, $who, $bug_when, $fieldid, $oldvalue, $newvalue) = $sth->fetchrow_array()) {
- # print a "." every 500 records so the user knows we didn't die
- print "." if !($i++ % 500);
+ # print the iteration count every 500 records so the user knows we didn't die
+ print "$i..." if !($i++ % 500);
# Make sure (old|new)value isn't null (to suppress warnings)
$oldvalue ||= "";
$newvalue ||= "";
my ($added, $removed) = "";
- if (grep /^$fieldid$/, @multi) {
+ if (grep ($_ eq $fieldid, @multi)) {
+ $oldvalue =~ s/[\s,]+/ /g;
+ $newvalue =~ s/[\s,]+/ /g;
+ my @old = split(" ", $oldvalue);
+ my @new = split(" ", $newvalue);
my (@add, @remove) = ();
- my @old = split(/[ ,]/, $oldvalue);
- my @new = split(/[ ,]/, $newvalue);
# Find values that were "added"
foreach my $value(@new) {
- if (! grep /^$value$/, @old) {
+ if (! grep ($_ eq $value, @old)) {
push (@add, $value);
}
}
# Find values that were removed
foreach my $value(@old) {
- if (! grep /^$value$/, @new) {
+ if (! grep ($_ eq $value, @new)) {
push (@remove, $value);
}
}
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);
+
my (@remove, @add) = ();
- my @old = split(/[ ,]/, $oldstr);
- my @new = split(/[ ,]/, $newstr);
# Find values that were removed
- foreach my $value(@old) {
- next if $value =~ /^\s*$/;
- if (! grep /^$value$/, @new) {
- push (@remove, $value);
- }
+ foreach my $value (@old) {
+ push (@remove, $value) if !grep($_ eq $value, @new);
}
# Find values that were added
- foreach my $value(@new) {
- next if $value =~ /^\s*$/;
- if (! grep /^$value$/, @old) {
- push (@add, $value);
- }
+ foreach my $value (@new) {
+ push (@add, $value) if !grep($_ eq $value, @old);
}
my $removed = join (", ", @remove);