Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15332824
D21450.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
10 KB
Referenced Files
None
Subscribers
None
D21450.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D21450: Move task and revision closure to the "publishing" step of the commit import pipeline
Attached
Detach File
Event Timeline
Log In to Comment