From a7b2327c34ac4799c283b8de9c15490335e62feb Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 28 Apr 2020 05:42:18 -0700 Subject: [PATCH] Fix an issue with "Auditors:" where an edge edit was used as a PHID list Summary: See . When importing commits with "Auditors:", a raw transaction new value (with an edge edit map using a "+" key) may be passed as an unmentionable PHID list. Instead, pass an actual PHID list. Test Plan: - Pushed a commit with "Auditors: duck". - Ran daemons. - Before patch: umentionable PHID exception. - After patch: clean commit import. - Verified "duck" was added as an auditor. Differential Revision: https://secure.phabricator.com/D21181 --- .../audit/editor/PhabricatorAuditEditor.php | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/applications/audit/editor/PhabricatorAuditEditor.php b/src/applications/audit/editor/PhabricatorAuditEditor.php index 887f29a3d8..0b2564cf7c 100644 --- a/src/applications/audit/editor/PhabricatorAuditEditor.php +++ b/src/applications/audit/editor/PhabricatorAuditEditor.php @@ -232,14 +232,22 @@ final class PhabricatorAuditEditor PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction) { + $auditors_type = DiffusionCommitAuditorsTransaction::TRANSACTIONTYPE; + $xactions = parent::expandTransaction($object, $xaction); + switch ($xaction->getTransactionType()) { case PhabricatorAuditTransaction::TYPE_COMMIT: - $request = $this->createAuditRequestTransactionFromCommitMessage( + $phids = $this->getAuditRequestTransactionPHIDsFromCommitMessage( $object); - if ($request) { - $xactions[] = $request; - $this->addUnmentionablePHIDs($request->getNewValue()); + if ($phids) { + $xactions[] = $object->getApplicationTransactionTemplate() + ->setTransactionType($auditors_type) + ->setNewValue( + array( + '+' => array_fuse($phids), + )); + $this->addUnmentionablePHIDs($phids); } break; default: @@ -268,7 +276,7 @@ final class PhabricatorAuditEditor return $xactions; } - private function createAuditRequestTransactionFromCommitMessage( + private function getAuditRequestTransactionPHIDsFromCommitMessage( PhabricatorRepositoryCommit $commit) { $actor = $this->getActor(); @@ -297,12 +305,7 @@ final class PhabricatorAuditEditor return array(); } - return $commit->getApplicationTransactionTemplate() - ->setTransactionType(DiffusionCommitAuditorsTransaction::TRANSACTIONTYPE) - ->setNewValue( - array( - '+' => array_fuse($phids), - )); + return $phids; } protected function sortTransactions(array $xactions) {