Skip to content

Commit 2b920e1

Browse files
authored
Bug 1907593 - Consider changing default setting when a reviewer "requests changes" so revisions don't disappear from other reviewers' queues
1 parent 47fb933 commit 2b920e1

File tree

4 files changed

+82
-4
lines changed

4 files changed

+82
-4
lines changed

moz-extensions/src/__phutil_library_map__.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
'DifferentialUpliftRequestCustomField' => 'differential/customfield/DifferentialUpliftRequestCustomField.php',
2323
'DifferentialUpliftRequestCustomFieldTestCase' => 'differential/customfield/__tests__/DifferentialUpliftRequestCustomFieldTestCase.php',
2424
'PhabricatorUpdateUpliftCommentAction' => 'applications/transactions/commentaction/PhabricatorUpdateUpliftCommentAction.php',
25+
'DifferentialRevisionRequiredActionWithNeedsChangesResultBucket' => 'differential/query/DifferentialRevisionRequiredActionWithNeedsChangesResultBucket.php',
2526
'DifferentialRevisionWarning' => 'differential/view/DifferentialRevisionWarning.php',
2627
'EmailAPIAuthorization' => 'email/EmailAPIAuthorization.php',
2728
'EmailAffectedFile' => 'email/model/EmailAffectedFile.php',
@@ -137,6 +138,7 @@
137138
'DifferentialBugzillaBugIDValidator' => 'Phobject',
138139
'DifferentialUpliftRequestCustomField' => 'DifferentialStoredCustomField',
139140
'PhabricatorUpdateUpliftCommentAction' => 'PhabricatorEditEngineCommentAction',
141+
'DifferentialRevisionRequiredActionWithNeedsChangesResultBucket' => 'DifferentialRevisionRequiredActionResultBucket',
140142
'DifferentialRevisionWarning' => 'Phobject',
141143
'EmailRevisionAbandoned' => 'PublicEmailBody',
142144
'EmailRevisionAccepted' => 'PublicEmailBody',
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<?php
2+
3+
final class DifferentialRevisionRequiredActionWithNeedsChangesResultBucket
4+
extends DifferentialRevisionRequiredActionResultBucket {
5+
6+
const BUCKETKEY = 'action-with-needs-changes';
7+
8+
public function getResultBucketName() {
9+
return pht('Bucket by Required Action (Include Needs Changes)');
10+
}
11+
12+
protected function filterMustReview(array $phids) {
13+
$needs_review_statuses = array_fuse(array(
14+
DifferentialReviewerStatus::STATUS_BLOCKING,
15+
DifferentialReviewerStatus::STATUS_REJECTED,
16+
DifferentialReviewerStatus::STATUS_REJECTED_OLDER,
17+
));
18+
19+
return $this->filterWithNeedsRevision($phids, $needs_review_statuses);
20+
}
21+
22+
protected function filterShouldReview(array $phids) {
23+
$needs_review_statuses = array_fuse(array(
24+
DifferentialReviewerStatus::STATUS_ADDED,
25+
DifferentialReviewerStatus::STATUS_COMMENTED,
26+
DifferentialReviewerStatus::STATUS_ACCEPTED,
27+
));
28+
29+
return $this->filterWithNeedsRevision($phids, $needs_review_statuses);
30+
}
31+
32+
private function filterWithNeedsRevision(array $phids, array $needs_review_statuses) {
33+
$inactive = array_fuse(array(
34+
DifferentialReviewerStatus::STATUS_ADDED,
35+
DifferentialReviewerStatus::STATUS_COMMENTED,
36+
));
37+
38+
// Standard NEEDS_REVIEW revisions (same as parent).
39+
$objects = $this->getRevisionsUnderReview($this->objects, $phids);
40+
41+
// Also pick up NEEDS_REVISION revisions where the viewer hasn't acted yet.
42+
foreach ($this->getRevisionsNotAuthored($this->objects, $phids) as $key => $object) {
43+
if ($object->isNeedsRevision()) {
44+
$objects[$key] = $object;
45+
}
46+
}
47+
48+
$results = array();
49+
foreach ($objects as $key => $object) {
50+
if ($object->isNeedsReview()) {
51+
// Same as parent — check voided accepts too.
52+
if (!$this->hasReviewersWithStatus($object, $phids, $needs_review_statuses, true)) {
53+
continue;
54+
}
55+
} else {
56+
// NEEDS_REVISION — only show if this reviewer hasn't acted yet.
57+
if (!$this->hasReviewersWithStatus($object, $phids, $inactive)) {
58+
continue;
59+
}
60+
}
61+
62+
$results[$key] = $object;
63+
unset($this->objects[$key]);
64+
}
65+
66+
return $results;
67+
}
68+
}

src/applications/differential/query/DifferentialRevisionRequiredActionResultBucket.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
<?php
22

3-
final class DifferentialRevisionRequiredActionResultBucket
3+
class DifferentialRevisionRequiredActionResultBucket
44
extends DifferentialRevisionResultBucket {
55

66
const BUCKETKEY = 'action';
77

88
const KEY_MUSTREVIEW = 'must-review';
99
const KEY_SHOULDREVIEW = 'should-review';
1010

11-
private $objects;
11+
protected $objects;
1212

1313
public function getResultBucketName() {
1414
return pht('Bucket by Required Action');
@@ -96,7 +96,7 @@ protected function buildResultGroups(
9696
return $groups;
9797
}
9898

99-
private function filterMustReview(array $phids) {
99+
protected function filterMustReview(array $phids) {
100100
$blocking = array(
101101
DifferentialReviewerStatus::STATUS_BLOCKING,
102102
DifferentialReviewerStatus::STATUS_REJECTED,
@@ -119,7 +119,7 @@ private function filterMustReview(array $phids) {
119119
return $results;
120120
}
121121

122-
private function filterShouldReview(array $phids) {
122+
protected function filterShouldReview(array $phids) {
123123
$reviewing = array(
124124
DifferentialReviewerStatus::STATUS_ADDED,
125125
DifferentialReviewerStatus::STATUS_COMMENTED,

src/applications/differential/query/DifferentialRevisionSearchEngine.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ protected function getBuiltinQueryNames() {
140140

141141
if ($this->requireViewer()->isLoggedIn()) {
142142
$names['active'] = pht('Active Revisions');
143+
$names['action-with-needs-changes'] = pht('Active With Needs Changes');
143144
$names['authored'] = pht('Authored');
144145
}
145146

@@ -158,6 +159,13 @@ public function buildSavedQueryFromBuiltin($query_key) {
158159
case 'active':
159160
$bucket_key = DifferentialRevisionRequiredActionResultBucket::BUCKETKEY;
160161

162+
return $query
163+
->setParameter('responsiblePHIDs', array($viewer->getPHID()))
164+
->setParameter('statuses', array('open()'))
165+
->setParameter('bucket', $bucket_key);
166+
case 'action-with-needs-changes':
167+
$bucket_key = DifferentialRevisionRequiredActionWithNeedsChangesResultBucket::BUCKETKEY;
168+
161169
return $query
162170
->setParameter('responsiblePHIDs', array($viewer->getPHID()))
163171
->setParameter('statuses', array('open()'))

0 commit comments

Comments
 (0)