Differential D10485 Diff 25209 src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php
Show First 20 Lines • Show All 134 Lines • ▼ Show 20 Lines | if ($revision_id) { | ||||
$revision->getID(), | $revision->getID(), | ||||
$commit->getPHID()); | $commit->getPHID()); | ||||
$status_closed = ArcanistDifferentialRevisionStatus::CLOSED; | $status_closed = ArcanistDifferentialRevisionStatus::CLOSED; | ||||
$should_close = ($revision->getStatus() != $status_closed) && | $should_close = ($revision->getStatus() != $status_closed) && | ||||
$should_autoclose; | $should_autoclose; | ||||
if ($should_close) { | if ($should_close) { | ||||
$commit_name = $repository->formatCommitName( | $commit_close_xaction = id(new DifferentialTransaction()) | ||||
$commit->getCommitIdentifier()); | ->setTransactionType(DifferentialTransaction::TYPE_ACTION) | ||||
->setNewValue(DifferentialAction::ACTION_CLOSE) | |||||
$committer_name = $this->loadUserName( | ->setMetadataValue('isCommitClose', true); | ||||
$committer_phid, | |||||
$data->getCommitDetail('committer'), | |||||
$actor); | |||||
$author_name = $this->loadUserName( | |||||
$author_phid, | |||||
$data->getAuthorName(), | |||||
$actor); | |||||
if ($committer_name && ($committer_name != $author_name)) { | $commit_close_xaction->setMetadataValue( | ||||
$revision_update_comment = pht( | 'commitPHID', | ||||
'Closed by commit %s (authored by %s, committed by %s).', | $commit->getPHID()); | ||||
$commit_name, | $commit_close_xaction->setMetadataValue( | ||||
$author_name, | 'committerPHID', | ||||
$committer_name); | $committer_phid); | ||||
} else { | $commit_close_xaction->setMetadataValue( | ||||
$revision_update_comment = pht( | 'committerName', | ||||
'Closed by commit %s (authored by %s).', | $data->getCommitDetail('committer')); | ||||
$commit_name, | $commit_close_xaction->setMetadataValue( | ||||
$author_name); | 'authorPHID', | ||||
} | $author_phid); | ||||
$commit_close_xaction->setMetadataValue( | |||||
'authorName', | |||||
$data->getAuthorName()); | |||||
$commit_close_xaction->setMetadataValue( | |||||
'commitHashes', | |||||
$hashes); | |||||
$diff = $this->generateFinalDiff($revision, $acting_as_phid); | $diff = $this->generateFinalDiff($revision, $acting_as_phid); | ||||
$vs_diff = $this->loadChangedByCommit($revision, $diff); | $vs_diff = $this->loadChangedByCommit($revision, $diff); | ||||
$changed_uri = null; | $changed_uri = null; | ||||
if ($vs_diff) { | if ($vs_diff) { | ||||
$data->setCommitDetail('vsDiff', $vs_diff->getID()); | $data->setCommitDetail('vsDiff', $vs_diff->getID()); | ||||
$changed_uri = PhabricatorEnv::getProductionURI( | $changed_uri = PhabricatorEnv::getProductionURI( | ||||
'/D'.$revision->getID(). | '/D'.$revision->getID(). | ||||
'?vs='.$vs_diff->getID(). | '?vs='.$vs_diff->getID(). | ||||
'&id='.$diff->getID(). | '&id='.$diff->getID(). | ||||
'#toc'); | '#toc'); | ||||
} | } | ||||
$xactions = array(); | $xactions = array(); | ||||
$xactions[] = id(new DifferentialTransaction()) | |||||
->setTransactionType(DifferentialTransaction::TYPE_ACTION) | |||||
->setNewValue(DifferentialAction::ACTION_CLOSE); | |||||
$xactions[] = id(new DifferentialTransaction()) | $xactions[] = id(new DifferentialTransaction()) | ||||
->setTransactionType(DifferentialTransaction::TYPE_UPDATE) | ->setTransactionType(DifferentialTransaction::TYPE_UPDATE) | ||||
->setIgnoreOnNoEffect(true) | ->setIgnoreOnNoEffect(true) | ||||
->setNewValue($diff->getPHID()); | ->setNewValue($diff->getPHID()) | ||||
->setMetadataValue('isCommitUpdate', true); | |||||
$xactions[] = id(new DifferentialTransaction()) | $xactions[] = $commit_close_xaction; | ||||
->setTransactionType(PhabricatorTransactions::TYPE_COMMENT) | |||||
->setIgnoreOnNoEffect(true) | |||||
->attachComment( | |||||
id(new DifferentialTransactionComment()) | |||||
->setContent($revision_update_comment)); | |||||
$content_source = PhabricatorContentSource::newForSource( | $content_source = PhabricatorContentSource::newForSource( | ||||
PhabricatorContentSource::SOURCE_DAEMON, | PhabricatorContentSource::SOURCE_DAEMON, | ||||
array()); | array()); | ||||
$editor = id(new DifferentialTransactionEditor()) | $editor = id(new DifferentialTransactionEditor()) | ||||
->setActor($actor) | ->setActor($actor) | ||||
->setActingAsPHID($acting_as_phid) | ->setActingAsPHID($acting_as_phid) | ||||
Show All 24 Lines | final protected function updateCommitData(DiffusionCommitRef $ref) { | ||||
} | } | ||||
$data->save(); | $data->save(); | ||||
$commit->writeImportStatusFlag( | $commit->writeImportStatusFlag( | ||||
PhabricatorRepositoryCommit::IMPORTED_MESSAGE); | PhabricatorRepositoryCommit::IMPORTED_MESSAGE); | ||||
} | } | ||||
private function loadUserName($user_phid, $default, PhabricatorUser $actor) { | |||||
if (!$user_phid) { | |||||
return $default; | |||||
} | |||||
$handle = id(new PhabricatorHandleQuery()) | |||||
->setViewer($actor) | |||||
->withPHIDs(array($user_phid)) | |||||
->executeOne(); | |||||
return '@'.$handle->getName(); | |||||
} | |||||
private function generateFinalDiff( | private function generateFinalDiff( | ||||
DifferentialRevision $revision, | DifferentialRevision $revision, | ||||
$actor_phid) { | $actor_phid) { | ||||
$viewer = PhabricatorUser::getOmnipotentUser(); | $viewer = PhabricatorUser::getOmnipotentUser(); | ||||
$drequest = DiffusionRequest::newFromDictionary(array( | $drequest = DiffusionRequest::newFromDictionary(array( | ||||
'user' => $viewer, | 'user' => $viewer, | ||||
▲ Show 20 Lines • Show All 256 Lines • ▼ Show 20 Lines | foreach ($tasks as $task_id => $task) { | ||||
PhabricatorContentSource::SOURCE_DAEMON, | PhabricatorContentSource::SOURCE_DAEMON, | ||||
array()); | array()); | ||||
$editor = id(new ManiphestTransactionEditor()) | $editor = id(new ManiphestTransactionEditor()) | ||||
->setActor($actor) | ->setActor($actor) | ||||
->setActingAsPHID($acting_as) | ->setActingAsPHID($acting_as) | ||||
->setContinueOnNoEffect(true) | ->setContinueOnNoEffect(true) | ||||
->setContinueOnMissingFields(true) | ->setContinueOnMissingFields(true) | ||||
->setUnmentionablePHIDMap( | |||||
array($commit->getPHID() => $commit->getPHID())) | |||||
->setContentSource($content_source); | ->setContentSource($content_source); | ||||
$editor->applyTransactions($task, $xactions); | $editor->applyTransactions($task, $xactions); | ||||
} | } | ||||
} | } | ||||
} | } |