Page MenuHomePhabricator

D17568.diff
No OneTemporary

D17568.diff

diff --git a/src/applications/differential/editor/DifferentialTransactionEditor.php b/src/applications/differential/editor/DifferentialTransactionEditor.php
--- a/src/applications/differential/editor/DifferentialTransactionEditor.php
+++ b/src/applications/differential/editor/DifferentialTransactionEditor.php
@@ -339,7 +339,7 @@
}
}
- if ($downgrade_accepts) {
+ if ($downgrade_accepts || $downgrade_rejects) {
$void_type = DifferentialRevisionVoidTransaction::TRANSACTIONTYPE;
$results[] = id(new DifferentialTransaction())
->setTransactionType($void_type)
@@ -659,11 +659,8 @@
$reviewer_status = $reviewer->getReviewerStatus();
switch ($reviewer_status) {
case DifferentialReviewerStatus::STATUS_REJECTED:
- $action_phid = $reviewer->getLastActionDiffPHID();
$active_phid = $active_diff->getPHID();
- $is_current = ($action_phid == $active_phid);
-
- if ($is_current) {
+ if ($reviewer->isRejected($active_phid)) {
$has_rejecting_reviewer = true;
}
break;
diff --git a/src/applications/differential/storage/DifferentialReviewer.php b/src/applications/differential/storage/DifferentialReviewer.php
--- a/src/applications/differential/storage/DifferentialReviewer.php
+++ b/src/applications/differential/storage/DifferentialReviewer.php
@@ -54,6 +54,25 @@
return ($this->getReviewerStatus() == $status_resigned);
}
+ public function isRejected($diff_phid) {
+ $status_rejected = DifferentialReviewerStatus::STATUS_REJECTED;
+
+ if ($this->getReviewerStatus() != $status_rejected) {
+ return false;
+ }
+
+ if ($this->getVoidedPHID()) {
+ return false;
+ }
+
+ if ($this->isCurrentAction($diff_phid)) {
+ return true;
+ }
+
+ return false;
+ }
+
+
public function isAccepted($diff_phid) {
$status_accepted = DifferentialReviewerStatus::STATUS_ACCEPTED;
@@ -68,24 +87,32 @@
return false;
}
- if (!$diff_phid) {
+ if ($this->isCurrentAction($diff_phid)) {
return true;
}
- $action_phid = $this->getLastActionDiffPHID();
+ $sticky_key = 'differential.sticky-accept';
+ $is_sticky = PhabricatorEnv::getEnvConfig($sticky_key);
- if (!$action_phid) {
+ if ($is_sticky) {
return true;
}
- if ($action_phid == $diff_phid) {
+ return false;
+ }
+
+ private function isCurrentAction($diff_phid) {
+ if (!$diff_phid) {
return true;
}
- $sticky_key = 'differential.sticky-accept';
- $is_sticky = PhabricatorEnv::getEnvConfig($sticky_key);
+ $action_phid = $this->getLastActionDiffPHID();
- if ($is_sticky) {
+ if (!$action_phid) {
+ return true;
+ }
+
+ if ($action_phid == $diff_phid) {
return true;
}
diff --git a/src/applications/differential/xaction/DifferentialRevisionReviewTransaction.php b/src/applications/differential/xaction/DifferentialRevisionReviewTransaction.php
--- a/src/applications/differential/xaction/DifferentialRevisionReviewTransaction.php
+++ b/src/applications/differential/xaction/DifferentialRevisionReviewTransaction.php
@@ -100,7 +100,10 @@
$active_phid = $this->getActiveDiffPHID($revision);
$status_accepted = DifferentialReviewerStatus::STATUS_ACCEPTED;
+ $status_rejected = DifferentialReviewerStatus::STATUS_REJECTED;
+
$is_accepted = ($require_status == $status_accepted);
+ $is_rejected = ($require_status == $status_rejected);
// Otherwise, check that all reviews they have authority over are in
// the desired set of states.
@@ -121,6 +124,12 @@
}
}
+ if ($is_rejected) {
+ if (!$reviewer->isRejected($active_phid)) {
+ return false;
+ }
+ }
+
// This is a broader check to see if we can update the diff where the
// last action occurred.
if ($reviewer->getLastActionDiffPHID() != $active_phid) {
diff --git a/src/applications/differential/xaction/DifferentialRevisionVoidTransaction.php b/src/applications/differential/xaction/DifferentialRevisionVoidTransaction.php
--- a/src/applications/differential/xaction/DifferentialRevisionVoidTransaction.php
+++ b/src/applications/differential/xaction/DifferentialRevisionVoidTransaction.php
@@ -25,10 +25,10 @@
'SELECT reviewerPHID FROM %T
WHERE revisionPHID = %s
AND voidedPHID IS NULL
- AND reviewerStatus = %s',
+ AND reviewerStatus IN (%Ls)',
$table_name,
$object->getPHID(),
- DifferentialReviewerStatus::STATUS_ACCEPTED);
+ $this->getVoidableStatuses());
return ipull($rows, 'reviewerPHID');
}
@@ -47,11 +47,11 @@
'UPDATE %T SET voidedPHID = %s
WHERE revisionPHID = %s
AND voidedPHID IS NULL
- AND reviewerStatus = %s',
+ AND reviewerStatus IN (%Ls)',
$table_name,
$this->getActingAsPHID(),
$object->getPHID(),
- DifferentialReviewerStatus::STATUS_ACCEPTED);
+ $this->getVoidableStatuses());
}
public function shouldHide() {
@@ -60,4 +60,11 @@
return true;
}
+ private function getVoidableStatuses() {
+ return array(
+ DifferentialReviewerStatus::STATUS_ACCEPTED,
+ DifferentialReviewerStatus::STATUS_REJECTED,
+ );
+ }
+
}

File Metadata

Mime Type
text/plain
Expires
Jul 31 2025, 10:42 PM (9 w, 4 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
8653664
Default Alt Text
D17568.diff (5 KB)

Event Timeline