Page MenuHomePhabricator

D21450.diff
No OneTemporary

D21450.diff

diff --git a/src/applications/repository/worker/PhabricatorRepositoryCommitPublishWorker.php b/src/applications/repository/worker/PhabricatorRepositoryCommitPublishWorker.php
--- a/src/applications/repository/worker/PhabricatorRepositoryCommitPublishWorker.php
+++ b/src/applications/repository/worker/PhabricatorRepositoryCommitPublishWorker.php
@@ -30,11 +30,6 @@
PhabricatorRepositoryCommit $commit) {
$viewer = PhabricatorUser::getOmnipotentUser();
- $publisher = $repository->newPublisher();
- if (!$publisher->shouldPublishCommit($commit)) {
- return;
- }
-
$commit_phid = $commit->getPHID();
// Reload the commit to get the commit data, identities, and any
@@ -53,6 +48,36 @@
$commit_phid));
}
+ $publisher = $repository->newPublisher();
+ $should_publish = $publisher->shouldPublishCommit($commit);
+
+ if (!$should_publish) {
+ $hold_reasons = $publisher->getCommitHoldReasons($commit);
+ } else {
+ $hold_reasons = array();
+ }
+
+ $data = $commit->getCommitData();
+ if ($data->getCommitDetail('holdReasons') !== $hold_reasons) {
+ $data->setCommitDetail('holdReasons', $hold_reasons);
+ $data->save();
+ }
+
+ if (!$should_publish) {
+ return;
+ }
+
+ $this->applyTransactions($viewer, $repository, $commit);
+
+ $this->closeRevisions($viewer, $commit);
+ $this->closeTasks($viewer, $commit);
+ }
+
+ private function applyTransactions(
+ PhabricatorUser $actor,
+ PhabricatorRepository $repository,
+ PhabricatorRepositoryCommit $commit) {
+
$xactions = array(
$this->newAuditTransactions($commit),
$this->newPublishTransactions($commit),
@@ -63,7 +88,7 @@
$content_source = $this->newContentSource();
$revision = DiffusionCommitRevisionQuery::loadRevisionForCommit(
- $viewer,
+ $actor,
$commit);
// Prevent the commit from generating a mention of the associated
@@ -75,7 +100,7 @@
}
$editor = $commit->getApplicationTransactionEditor()
- ->setActor($viewer)
+ ->setActor($actor)
->setActingAsPHID($acting_phid)
->setContinueOnNoEffect(true)
->setContinueOnMissingFields(true)
@@ -391,4 +416,129 @@
return $file->loadFileData();
}
+
+ private function closeRevisions(
+ PhabricatorUser $actor,
+ PhabricatorRepositoryCommit $commit) {
+
+ $differential = 'PhabricatorDifferentialApplication';
+ if (!PhabricatorApplication::isClassInstalled($differential)) {
+ return;
+ }
+
+ $repository = $commit->getRepository();
+ $data = $commit->getCommitData();
+ $ref = $data->getCommitRef();
+
+ $field_query = id(new DiffusionLowLevelCommitFieldsQuery())
+ ->setRepository($repository)
+ ->withCommitRef($ref);
+
+ $field_values = $field_query->execute();
+
+ $revision_id = idx($field_values, 'revisionID');
+ if (!$revision_id) {
+ return;
+ }
+
+ $revision = id(new DifferentialRevisionQuery())
+ ->setViewer($actor)
+ ->withIDs(array($revision_id))
+ ->executeOne();
+ if (!$revision) {
+ return;
+ }
+
+ // NOTE: This is very old code from when revisions had a single reviewer.
+ // It still powers the "Reviewer (Deprecated)" field in Herald, but should
+ // be removed.
+ if (!empty($field_values['reviewedByPHIDs'])) {
+ $data->setCommitDetail(
+ 'reviewerPHID',
+ head($field_values['reviewedByPHIDs']));
+ }
+
+ $match_data = $field_query->getRevisionMatchData();
+
+ $data->setCommitDetail('differential.revisionID', $revision_id);
+ $data->setCommitDetail('revisionMatchData', $match_data);
+
+ $data->save();
+
+ $properties = array(
+ 'revisionMatchData' => $match_data,
+ );
+ $this->queueObjectUpdate($commit, $revision, $properties);
+ }
+
+ private function closeTasks(
+ PhabricatorUser $actor,
+ PhabricatorRepositoryCommit $commit) {
+
+ $maniphest = 'PhabricatorManiphestApplication';
+ if (!PhabricatorApplication::isClassInstalled($maniphest)) {
+ return;
+ }
+
+ $data = $commit->getCommitData();
+
+ $prefixes = ManiphestTaskStatus::getStatusPrefixMap();
+ $suffixes = ManiphestTaskStatus::getStatusSuffixMap();
+ $message = $data->getCommitMessage();
+
+ $matches = id(new ManiphestCustomFieldStatusParser())
+ ->parseCorpus($message);
+
+ $task_map = array();
+ foreach ($matches as $match) {
+ $prefix = phutil_utf8_strtolower($match['prefix']);
+ $suffix = phutil_utf8_strtolower($match['suffix']);
+
+ $status = idx($suffixes, $suffix);
+ if (!$status) {
+ $status = idx($prefixes, $prefix);
+ }
+
+ foreach ($match['monograms'] as $task_monogram) {
+ $task_id = (int)trim($task_monogram, 'tT');
+ $task_map[$task_id] = $status;
+ }
+ }
+
+ if (!$task_map) {
+ return;
+ }
+
+ $tasks = id(new ManiphestTaskQuery())
+ ->setViewer($actor)
+ ->withIDs(array_keys($task_map))
+ ->execute();
+ foreach ($tasks as $task_id => $task) {
+ $status = $task_map[$task_id];
+
+ $properties = array(
+ 'status' => $status,
+ );
+
+ $this->queueObjectUpdate($commit, $task, $properties);
+ }
+ }
+
+ private function queueObjectUpdate(
+ PhabricatorRepositoryCommit $commit,
+ $object,
+ array $properties) {
+
+ $this->queueTask(
+ 'DiffusionUpdateObjectAfterCommitWorker',
+ array(
+ 'commitPHID' => $commit->getPHID(),
+ 'objectPHID' => $object->getPHID(),
+ 'properties' => $properties,
+ ),
+ array(
+ 'priority' => PhabricatorWorker::PRIORITY_DEFAULT,
+ ));
+ }
+
}
diff --git a/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php b/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php
--- a/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php
+++ b/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php
@@ -125,145 +125,8 @@
$commit->save();
$data->save();
- // If we're publishing this commit, we're going to queue tasks to update
- // referenced objects (like tasks and revisions). Otherwise, record some
- // details about why we are not publishing it yet.
-
- $publisher = $repository->newPublisher();
- if ($publisher->shouldPublishCommit($commit)) {
- $this->closeRevisions($viewer, $commit);
- $this->closeTasks($viewer, $commit);
- } else {
- $hold_reasons = $publisher->getCommitHoldReasons($commit);
-
- $data->setCommitDetail('holdReasons', $hold_reasons);
- $data->save();
- }
-
$commit->writeImportStatusFlag(
PhabricatorRepositoryCommit::IMPORTED_MESSAGE);
}
- private function closeRevisions(
- PhabricatorUser $actor,
- PhabricatorRepositoryCommit $commit) {
-
- $differential = 'PhabricatorDifferentialApplication';
- if (!PhabricatorApplication::isClassInstalled($differential)) {
- return;
- }
-
- $repository = $commit->getRepository();
- $data = $commit->getCommitData();
- $ref = $data->getCommitRef();
-
- $field_query = id(new DiffusionLowLevelCommitFieldsQuery())
- ->setRepository($repository)
- ->withCommitRef($ref);
-
- $field_values = $field_query->execute();
-
- $revision_id = idx($field_values, 'revisionID');
- if (!$revision_id) {
- return;
- }
-
- $revision = id(new DifferentialRevisionQuery())
- ->setViewer($actor)
- ->withIDs(array($revision_id))
- ->executeOne();
- if (!$revision) {
- return;
- }
-
- // NOTE: This is very old code from when revisions had a single reviewer.
- // It still powers the "Reviewer (Deprecated)" field in Herald, but should
- // be removed.
- if (!empty($field_values['reviewedByPHIDs'])) {
- $data->setCommitDetail(
- 'reviewerPHID',
- head($field_values['reviewedByPHIDs']));
- }
-
- $match_data = $field_query->getRevisionMatchData();
-
- $data->setCommitDetail('differential.revisionID', $revision_id);
- $data->setCommitDetail('revisionMatchData', $match_data);
-
- $properties = array(
- 'revisionMatchData' => $match_data,
- );
- $this->queueObjectUpdate($commit, $revision, $properties);
- }
-
- private function closeTasks(
- PhabricatorUser $actor,
- PhabricatorRepositoryCommit $commit) {
-
- $maniphest = 'PhabricatorManiphestApplication';
- if (!PhabricatorApplication::isClassInstalled($maniphest)) {
- return;
- }
-
- $data = $commit->getCommitData();
-
- $prefixes = ManiphestTaskStatus::getStatusPrefixMap();
- $suffixes = ManiphestTaskStatus::getStatusSuffixMap();
- $message = $data->getCommitMessage();
-
- $matches = id(new ManiphestCustomFieldStatusParser())
- ->parseCorpus($message);
-
- $task_map = array();
- foreach ($matches as $match) {
- $prefix = phutil_utf8_strtolower($match['prefix']);
- $suffix = phutil_utf8_strtolower($match['suffix']);
-
- $status = idx($suffixes, $suffix);
- if (!$status) {
- $status = idx($prefixes, $prefix);
- }
-
- foreach ($match['monograms'] as $task_monogram) {
- $task_id = (int)trim($task_monogram, 'tT');
- $task_map[$task_id] = $status;
- }
- }
-
- if (!$task_map) {
- return;
- }
-
- $tasks = id(new ManiphestTaskQuery())
- ->setViewer($actor)
- ->withIDs(array_keys($task_map))
- ->execute();
- foreach ($tasks as $task_id => $task) {
- $status = $task_map[$task_id];
-
- $properties = array(
- 'status' => $status,
- );
-
- $this->queueObjectUpdate($commit, $task, $properties);
- }
- }
-
- private function queueObjectUpdate(
- PhabricatorRepositoryCommit $commit,
- $object,
- array $properties) {
-
- $this->queueTask(
- 'DiffusionUpdateObjectAfterCommitWorker',
- array(
- 'commitPHID' => $commit->getPHID(),
- 'objectPHID' => $object->getPHID(),
- 'properties' => $properties,
- ),
- array(
- 'priority' => PhabricatorWorker::PRIORITY_DEFAULT,
- ));
- }
-
}

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 8, 8:47 PM (1 w, 3 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7384360
Default Alt Text
D21450.diff (10 KB)

Event Timeline