]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/Control.pm
fix ordering of allowed; add merge versions test
[debbugs.git] / Debbugs / Control.pm
index c5d73d17b3da4b7f81e8fa7879ce978d7de098a2..829a4535b9c51d83c0b516722a441281da7939be 100644 (file)
@@ -2075,7 +2075,7 @@ sub set_merged {
            # figure out the problems
            print {$transcript} "Unable to merge bugs because:\n";
            for my $change (@{$disallowed_changes}) {
-               print {$transcript} "$change->{field} of #$change->{bug} is '$change->{orig_value}' not '$change->{value}'\n";
+               print {$transcript} "$change->{field} of #$change->{bug} is '$change->{text_orig_value}' not '$change->{text_value}'\n";
            }
            if ($attempts > 0) {
                croak "Some bugs were altered while attempting to merge";
@@ -2373,10 +2373,12 @@ sub __calculate_merge_changes{
                           },
             fixed_versions => {func => \&set_fixed,
                                key => 'fixed',
+                               modify_value => sub {(defined $_[0] and ref($_[0]) eq 'HASH')?[sort keys %{$_[0]}]:$_[0]},
                                allowed => 1,
                               },
             found_versions => {func => \&set_found,
                                key   => 'found',
+                               modify_value => sub {(defined $_[0] and ref($_[0]) eq 'HASH')?[sort keys %{$_[0]}]:$_[0]},
                                allowed => 1,
                               },
            );
@@ -2402,14 +2404,16 @@ sub __calculate_merge_changes{
                 (exists $force_functions{$field}{modify_value} ?
                  $force_functions{$field}{modify_value}->($merge_status->{$field}):
                  $merge_status->{$field}),
-                value    => ref($merge_status->{$field}) eq 'HASH'?[sort keys %{$merge_status->{$field}}]:$merge_status->{$field},
+                value    => $merge_status->{$field},
                 function => $force_functions{$field}{func},
                 key      => $force_functions{$field}{key},
                 options  => $force_functions{$field}{options},
-                allowed  => exists $force_functions{$field}{allowed} ? 0 : $force_functions{$field}{allowed},
+                allowed  => exists $force_functions{$field}{allowed} ? $force_functions{$field}{allowed} : 0,
                };
-           if ($param->{force}) {
-               if ($field ne 'package') {
+           $change->{text_value} = ref($change->{func_value}) eq 'ARRAY'?join(' ',@{$change->{func_value}}):$change->{func_value};
+           $change->{text_orig_value} = ref($change->{orig_value}) eq 'ARRAY'?join(' ',@{$change->{orig_value}}):$change->{orig_value};
+           if ($param->{force} or $change->{allowed}) {
+               if ($field ne 'package' or $change->{allowed}) {
                    push @{$changes{$data->{bug_num}}},$change;
                    next;
                }