]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1403584: Clear r+ in bug when reviewer is removed from the revision by the author...
authordklawren <dklawren@users.noreply.github.com>
Thu, 28 Sep 2017 14:22:37 +0000 (10:22 -0400)
committerDavid Walsh <davidwalsh83@gmail.com>
Thu, 28 Sep 2017 14:22:37 +0000 (09:22 -0500)
extensions/PhabBugz/lib/WebService.pm

index 28ca19172868212fa2c46e1c4aa671ff80a52310..4b14f1495688f419612f9eba6c7090ce2e6a1746 100644 (file)
@@ -185,16 +185,20 @@ sub update_reviewer_statuses {
         next if $revision_id != $curr_revision_id;
 
         # Clear old flags if no longer accepted
-        my (@old_flags, @new_flags, %accepted_done, %denied_done, $flag_type);
+        my (@denied_flags, @new_flags, @removed_flags, %accepted_done, $flag_type);
         foreach my $flag (@{ $attachment->flags }) {
             next if $flag->type->name ne 'review';
             $flag_type = $flag->type;
             if (any { $flag->setter->id == $_ } @$denied_user_ids) {
-                push(@old_flags, { id => $flag->id, setter => $flag->setter, status => 'X' });
+                push(@denied_flags, { id => $flag->id, setter => $flag->setter, status => 'X' });
             }
             if (any { $flag->setter->id == $_ } @$accepted_user_ids) {
                 $accepted_done{$flag->setter->id}++;
             }
+            if ($flag->status eq '+'
+                && !any { $flag->setter->id == $_ } (@$accepted_user_ids, @$denied_user_ids)) {
+                push(@removed_flags, { id => $flag->id, setter => $flag->setter, status => 'X' });
+            }
         }
 
         $flag_type ||= first { $_->name eq 'review' } @{ $attachment->flag_types };
@@ -212,9 +216,12 @@ sub update_reviewer_statuses {
         foreach my $flag_data (@new_flags) {
             $comment .= $flag_data->{setter}->name . " has approved the revision.\n";
         }
-        foreach my $flag_data (@old_flags) {
+        foreach my $flag_data (@denied_flags) {
             $comment .= $flag_data->{setter}->name . " has requested changes to the revision.\n";
         }
+        foreach my $flag_data (@removed_flags) {
+            $comment .= $flag_data->{setter}->name . " has been removed from the revision.\n";
+        }
 
         if ($comment) {
             $comment .= "\n" . Bugzilla->params->{phabricator_base_uri} . "D" . $revision_id;
@@ -227,7 +234,7 @@ sub update_reviewer_statuses {
             });
         }
 
-        $attachment->set_flags(\@old_flags, \@new_flags);
+        $attachment->set_flags([ @denied_flags, @removed_flags ], \@new_flags);
         $attachment->update($timestamp);
         $bug->update($timestamp) if $comment;