Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15338273
D12634.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
20 KB
Referenced Files
None
Subscribers
None
D12634.diff
View Options
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -466,6 +466,7 @@
'DifferentialRevisionQuery' => 'applications/differential/query/DifferentialRevisionQuery.php',
'DifferentialRevisionRepositoryHeraldField' => 'applications/differential/herald/DifferentialRevisionRepositoryHeraldField.php',
'DifferentialRevisionRepositoryProjectsHeraldField' => 'applications/differential/herald/DifferentialRevisionRepositoryProjectsHeraldField.php',
+ 'DifferentialRevisionRevertedByCommitEdgeType' => 'applications/differential/edge/DifferentialRevisionRevertedByCommitEdgeType.php',
'DifferentialRevisionReviewersHeraldField' => 'applications/differential/herald/DifferentialRevisionReviewersHeraldField.php',
'DifferentialRevisionSearchEngine' => 'applications/differential/query/DifferentialRevisionSearchEngine.php',
'DifferentialRevisionStatus' => 'applications/differential/constants/DifferentialRevisionStatus.php',
@@ -540,6 +541,8 @@
'DiffusionCommitRepositoryProjectsHeraldField' => 'applications/diffusion/herald/DiffusionCommitRepositoryProjectsHeraldField.php',
'DiffusionCommitRevertedByCommitEdgeType' => 'applications/diffusion/edge/DiffusionCommitRevertedByCommitEdgeType.php',
'DiffusionCommitRevertsCommitEdgeType' => 'applications/diffusion/edge/DiffusionCommitRevertsCommitEdgeType.php',
+ 'DiffusionCommitRevertsRevisionEdgeType' => 'applications/diffusion/edge/DiffusionCommitRevertsRevisionEdgeType.php',
+ 'DiffusionCommitRevertsTasksEdgeType' => 'applications/diffusion/edge/DiffusionCommitRevertsTasksEdgeType.php',
'DiffusionCommitReviewerHeraldField' => 'applications/diffusion/herald/DiffusionCommitReviewerHeraldField.php',
'DiffusionCommitRevisionAcceptedHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionAcceptedHeraldField.php',
'DiffusionCommitRevisionHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionHeraldField.php',
@@ -1203,6 +1206,7 @@
'ManiphestTaskPriorityHeraldField' => 'applications/maniphest/herald/ManiphestTaskPriorityHeraldField.php',
'ManiphestTaskQuery' => 'applications/maniphest/query/ManiphestTaskQuery.php',
'ManiphestTaskResultListView' => 'applications/maniphest/view/ManiphestTaskResultListView.php',
+ 'ManiphestTaskRevertedByCommitEdgeType' => 'applications/maniphest/edge/ManiphestTaskRevertedByCommitEdgeType.php',
'ManiphestTaskSearchEngine' => 'applications/maniphest/query/ManiphestTaskSearchEngine.php',
'ManiphestTaskStatus' => 'applications/maniphest/constants/ManiphestTaskStatus.php',
'ManiphestTaskStatusDatasource' => 'applications/maniphest/typeahead/ManiphestTaskStatusDatasource.php',
@@ -4063,6 +4067,7 @@
'DifferentialRevisionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DifferentialRevisionRepositoryHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionRepositoryProjectsHeraldField' => 'DifferentialRevisionHeraldField',
+ 'DifferentialRevisionRevertedByCommitEdgeType' => 'PhabricatorEdgeType',
'DifferentialRevisionReviewersHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DifferentialRevisionStatus' => 'Phobject',
@@ -4137,6 +4142,8 @@
'DiffusionCommitRepositoryProjectsHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRevertedByCommitEdgeType' => 'PhabricatorEdgeType',
'DiffusionCommitRevertsCommitEdgeType' => 'PhabricatorEdgeType',
+ 'DiffusionCommitRevertsRevisionEdgeType' => 'PhabricatorEdgeType',
+ 'DiffusionCommitRevertsTasksEdgeType' => 'PhabricatorEdgeType',
'DiffusionCommitReviewerHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRevisionAcceptedHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRevisionHeraldField' => 'DiffusionCommitHeraldField',
@@ -4917,6 +4924,7 @@
'ManiphestTaskPriorityHeraldField' => 'ManiphestTaskHeraldField',
'ManiphestTaskQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'ManiphestTaskResultListView' => 'ManiphestView',
+ 'ManiphestTaskRevertedByCommitEdgeType' => 'PhabricatorEdgeType',
'ManiphestTaskSearchEngine' => 'PhabricatorApplicationSearchEngine',
'ManiphestTaskStatus' => 'ManiphestConstants',
'ManiphestTaskStatusDatasource' => 'PhabricatorTypeaheadDatasource',
diff --git a/src/applications/differential/edge/DifferentialRevisionRevertedByCommitEdgeType.php b/src/applications/differential/edge/DifferentialRevisionRevertedByCommitEdgeType.php
new file mode 100644
--- /dev/null
+++ b/src/applications/differential/edge/DifferentialRevisionRevertedByCommitEdgeType.php
@@ -0,0 +1,103 @@
+<?php
+
+final class DifferentialRevisionRevertedByCommitEdgeType
+ extends PhabricatorEdgeType {
+
+ const EDGECONST = 61;
+
+ public function getInverseEdgeConstant() {
+ return DiffusionCommitRevertsRevisionEdgeType::EDGECONST;
+ }
+
+ public function shouldWriteInverseTransactions() {
+ return true;
+ }
+
+ public function getTransactionAddString(
+ $actor,
+ $add_count,
+ $add_edges) {
+
+ return pht(
+ '%s added %s reverting commit(s): %s.',
+ $actor,
+ $add_count,
+ $add_edges);
+ }
+
+ public function getTransactionRemoveString(
+ $actor,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s removed %s reverting commit(s): %s.',
+ $actor,
+ $rem_count,
+ $rem_edges);
+ }
+
+ public function getTransactionEditString(
+ $actor,
+ $total_count,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s edited reverting commit(s), added %s: %s; removed %s: %s.',
+ $actor,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges);
+ }
+
+ public function getFeedAddString(
+ $actor,
+ $object,
+ $add_count,
+ $add_edges) {
+
+ return pht(
+ '%s added %s reverting commit(s) for %s: %s.',
+ $actor,
+ $add_count,
+ $object,
+ $add_edges);
+ }
+
+ public function getFeedRemoveString(
+ $actor,
+ $object,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s removed %s reverting commit(s) for %s: %s.',
+ $actor,
+ $rem_count,
+ $object,
+ $rem_edges);
+ }
+
+ public function getFeedEditString(
+ $actor,
+ $object,
+ $total_count,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s edited reverting commit(s) for %s, added %s: %s; removed %s: %s.',
+ $actor,
+ $object,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges);
+ }
+}
diff --git a/src/applications/diffusion/edge/DiffusionCommitRevertsRevisionEdgeType.php b/src/applications/diffusion/edge/DiffusionCommitRevertsRevisionEdgeType.php
new file mode 100644
--- /dev/null
+++ b/src/applications/diffusion/edge/DiffusionCommitRevertsRevisionEdgeType.php
@@ -0,0 +1,107 @@
+<?php
+
+final class DiffusionCommitRevertsRevisionEdgeType extends PhabricatorEdgeType {
+
+ const EDGECONST = 60;
+
+ public function getInverseEdgeConstant() {
+ return DifferentialRevisionRevertedByCommitEdgeType::EDGECONST;
+ }
+
+ public function shouldWriteInverseTransactions() {
+ return true;
+ }
+
+ public function shouldPreventCycles() {
+ return true;
+ }
+
+ public function getTransactionAddString(
+ $actor,
+ $add_count,
+ $add_edges) {
+
+ return pht(
+ '%s added %s reverting commit(s): %s.',
+ $actor,
+ $add_count,
+ $add_edges);
+ }
+
+ public function getTransactionRemoveString(
+ $actor,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s removed %s reverting commit(s): %s.',
+ $actor,
+ $rem_count,
+ $rem_edges);
+ }
+
+ public function getTransactionEditString(
+ $actor,
+ $total_count,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s edited reverting commit(s), added %s: %s; removed %s: %s.',
+ $actor,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges);
+ }
+
+ public function getFeedAddString(
+ $actor,
+ $object,
+ $add_count,
+ $add_edges) {
+
+ return pht(
+ '%s added %s reverting commit(s) for %s: %s.',
+ $actor,
+ $add_count,
+ $object,
+ $add_edges);
+ }
+
+ public function getFeedRemoveString(
+ $actor,
+ $object,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s removed %s reverting commit(s) for %s: %s.',
+ $actor,
+ $rem_count,
+ $object,
+ $rem_edges);
+ }
+
+ public function getFeedEditString(
+ $actor,
+ $object,
+ $total_count,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s edited reverting commit(s) for %s, added %s: %s; removed %s: %s.',
+ $actor,
+ $object,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges);
+ }
+
+}
diff --git a/src/applications/diffusion/edge/DiffusionCommitRevertsTasksEdgeType.php b/src/applications/diffusion/edge/DiffusionCommitRevertsTasksEdgeType.php
new file mode 100644
--- /dev/null
+++ b/src/applications/diffusion/edge/DiffusionCommitRevertsTasksEdgeType.php
@@ -0,0 +1,107 @@
+<?php
+
+final class DiffusionCommitRevertsTasksEdgeType extends PhabricatorEdgeType {
+
+ const EDGECONST = 62;
+
+ public function getInverseEdgeConstant() {
+ return ManiphestTaskRevertedByCommitEdgeType::EDGECONST;
+ }
+
+ public function shouldWriteInverseTransactions() {
+ return true;
+ }
+
+ public function shouldPreventCycles() {
+ return true;
+ }
+
+ public function getTransactionAddString(
+ $actor,
+ $add_count,
+ $add_edges) {
+
+ return pht(
+ '%s added %s reverting commit(s): %s.',
+ $actor,
+ $add_count,
+ $add_edges);
+ }
+
+ public function getTransactionRemoveString(
+ $actor,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s removed %s reverting commit(s): %s.',
+ $actor,
+ $rem_count,
+ $rem_edges);
+ }
+
+ public function getTransactionEditString(
+ $actor,
+ $total_count,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s edited reverting commit(s), added %s: %s; removed %s: %s.',
+ $actor,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges);
+ }
+
+ public function getFeedAddString(
+ $actor,
+ $object,
+ $add_count,
+ $add_edges) {
+
+ return pht(
+ '%s added %s reverting commit(s) for %s: %s.',
+ $actor,
+ $add_count,
+ $object,
+ $add_edges);
+ }
+
+ public function getFeedRemoveString(
+ $actor,
+ $object,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s removed %s reverting commit(s) for %s: %s.',
+ $actor,
+ $rem_count,
+ $object,
+ $rem_edges);
+ }
+
+ public function getFeedEditString(
+ $actor,
+ $object,
+ $total_count,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s edited reverting commit(s) for %s, added %s: %s; removed %s: %s.',
+ $actor,
+ $object,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges);
+ }
+
+}
diff --git a/src/applications/maniphest/edge/ManiphestTaskRevertedByCommitEdgeType.php b/src/applications/maniphest/edge/ManiphestTaskRevertedByCommitEdgeType.php
new file mode 100644
--- /dev/null
+++ b/src/applications/maniphest/edge/ManiphestTaskRevertedByCommitEdgeType.php
@@ -0,0 +1,105 @@
+<?php
+
+final class ManiphestTaskRevertedByCommitEdgeType extends PhabricatorEdgeType {
+
+ const EDGECONST = 63;
+
+ public function shouldWriteInverseTransactions() {
+ return true;
+ }
+
+ public function getInverseEdgeConstant() {
+ return DiffusionCommitRevertsTasksEdgeType::EDGECONST;
+ }
+
+ public function getTransactionAddString(
+ $actor,
+ $add_count,
+ $add_edges) {
+
+ return pht(
+ '%s added %s reverting commit(s): %s.',
+ $actor,
+ $add_count,
+ $add_edges);
+ }
+
+ public function getTransactionRemoveString(
+ $actor,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s removed %s reverting commit(s): %s.',
+ $actor,
+ $rem_count,
+ $rem_edges);
+ }
+
+ public function getTransactionEditString(
+ $actor,
+ $total_count,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s edited %s reverting commit(s), added %s: %s; removed %s: %s.',
+ $actor,
+ $total_count,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges);
+ }
+
+ public function getFeedAddString(
+ $actor,
+ $object,
+ $add_count,
+ $add_edges) {
+
+ return pht(
+ '%s added %s reverting commit(s) to %s: %s.',
+ $actor,
+ $add_count,
+ $object,
+ $add_edges);
+ }
+
+ public function getFeedRemoveString(
+ $actor,
+ $object,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s removed %s reverting commit(s) from %s: %s.',
+ $actor,
+ $rem_count,
+ $object,
+ $rem_edges);
+ }
+
+ public function getFeedEditString(
+ $actor,
+ $object,
+ $total_count,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges) {
+
+ return pht(
+ '%s edited %s reverting commit(s) for %s, added %s: %s; removed %s: %s.',
+ $actor,
+ $total_count,
+ $object,
+ $add_count,
+ $add_edges,
+ $rem_count,
+ $rem_edges);
+ }
+
+}
diff --git a/src/applications/repository/worker/PhabricatorRepositoryCommitHeraldWorker.php b/src/applications/repository/worker/PhabricatorRepositoryCommitHeraldWorker.php
--- a/src/applications/repository/worker/PhabricatorRepositoryCommitHeraldWorker.php
+++ b/src/applications/repository/worker/PhabricatorRepositoryCommitHeraldWorker.php
@@ -81,7 +81,93 @@
$xactions[] = id(new PhabricatorAuditTransaction())
->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
->setMetadataValue('edge:type', $reverts_edge)
- ->setNewValue(array('+' => array_fuse($reverted_commit_phids)));
+ ->setNewValue(array('=' => array_fuse($reverted_commit_phids)));
+
+ $reverted_commit_data =
+ id(new PhabricatorRepositoryCommitData())->loadAllWhere(
+ 'commitID IN (%Ld)',
+ mpull($reverted_commits, 'getID', 'getID'));
+
+ $differential_app = 'PhabricatorDifferentialApplication';
+ if (PhabricatorApplication::isClassInstalled($differential_app)) {
+ $reverted_revision_ids = array();
+
+ foreach ($reverted_commit_data as $commit_data) {
+ $revision = $commit_data->getCommitDetail('differential.revisionID');
+
+ if ($revision) {
+ $reverted_revision_ids[] = $revision;
+ }
+ }
+
+ $revision_query = id(new DifferentialRevisionQuery())
+ ->setViewer(PhabricatorUser::getOmnipotentUser())
+ ->withIDs($reverted_revision_ids);
+ $reverted_revisions = $revision_query->execute();
+
+ foreach ($reverted_revisions as $revision) {
+ $edge_type = DifferentialRevisionRevertedByCommitEdgeType::EDGECONST;
+ $xaction = id(new DifferentialTransaction())
+ ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
+ ->setMetadataValue('edge:type', $edge_type)
+ ->setNewValue(array(
+ '+' => array($commit->getPHID() => $commit->getPHID()),
+ ));
+
+ $diff_editor = id(new DifferentialTransactionEditor())
+ ->setActor(PhabricatorUser::getOmnipotentUser())
+ ->setActingAsPHID($acting_as_phid)
+ ->setContentSource(PhabricatorContentSource::newForSource(
+ PhabricatorContentSource::SOURCE_DAEMON, array()))
+ ->setContinueOnNoEffect(true);
+
+ $diff_editor->applyTransactions($revision, array($xaction));
+ }
+ }
+
+ $maniphest_app = 'PhabricatorManiphestApplication';
+ if (PhabricatorApplication::isClassInstalled($maniphest_app)) {
+ $reverted_task_ids = array();
+
+ foreach ($reverted_commit_data as $commit_data) {
+ $monograms = ipull(
+ id(new ManiphestCustomFieldStatusParser())
+ ->parseCorpus($commit_data->getCommitMessage()),
+ 'monograms');
+ $monograms = array_mergev($monograms);
+
+ foreach ($monograms as $monogram) {
+ $reverted_task_ids[] = (int)trim($monogram, 'tT');
+ }
+ }
+
+ $task_query = id(new ManiphestTaskQuery())
+ ->setViewer(PhabricatorUser::getOmnipotentUser())
+ ->withIDs($reverted_task_ids);
+ $reverted_tasks = $task_query->execute();
+
+ foreach ($reverted_tasks as $task) {
+ $edge_type = ManiphestTaskRevertedByCommitEdgeType::EDGECONST;
+ $xaction = id(new ManiphestTransaction())
+ ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
+ ->setMetadataValue('edge:type', $edge_type)
+ ->setNewValue(array(
+ '+' => array($commit->getPHID() => $commit->getPHID()),
+ ));
+
+ $maniphest_editor = id(new ManiphestTransactionEditor())
+ ->setActor(PhabricatorUser::getOmnipotentUser())
+ ->setActingAsPHID($acting_as_phid)
+ ->setContentSource(PhabricatorContentSource::newForSource(
+ PhabricatorContentSource::SOURCE_DAEMON, array()))
+ ->setContinueOnNoEffect(true);
+
+ $maniphest_editor->applyTransactions($task, array($xaction));
+ }
+ }
+
+ // TODO: Maybe re-open Maniphest Task.
+
}
try {
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
@@ -169,10 +169,22 @@
'precommitRevisionStatus',
$revision->getStatus());
}
- $commit_drev = DiffusionCommitHasRevisionEdgeType::EDGECONST;
- id(new PhabricatorEdgeEditor())
- ->addEdge($commit->getPHID(), $commit_drev, $revision->getPHID())
- ->save();
+
+ $editor = id(new DifferentialTransactionEditor())
+ ->setActor($actor)
+ ->setActingAsPHID($acting_as_phid)
+ ->setContentSource(PhabricatorContentSource::newForSource(
+ PhabricatorContentSource::SOURCE_DAEMON, array()));
+
+ $edge_type = DifferentialRevisionHasCommitEdgeType::EDGECONST;
+ $xaction = id(new DifferentialTransaction())
+ ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
+ ->setMetadataValue('edge:type', $edge_type)
+ ->setNewValue(array(
+ '+' => array($commit->getPHID() => $commit->getPHID()),
+ ));
+
+ $editor->applyTransactions($revision, array($xaction));
queryfx(
$conn_w,
@@ -238,15 +250,12 @@
->setMetadataValue('isCommitUpdate', true);
$xactions[] = $commit_close_xaction;
- $content_source = PhabricatorContentSource::newForSource(
- PhabricatorContentSource::SOURCE_DAEMON,
- array());
-
$editor = id(new DifferentialTransactionEditor())
->setActor($actor)
->setActingAsPHID($acting_as_phid)
->setContinueOnMissingFields(true)
- ->setContentSource($content_source)
+ ->setContentSource(PhabricatorContentSource::newForSource(
+ PhabricatorContentSource::SOURCE_DAEMON, array()))
->setChangedPriorToCommitURI($changed_uri)
->setIsCloseByCommit(true);
@@ -504,12 +513,9 @@
$edge_xaction = id(new ManiphestTransaction())
->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
->setMetadataValue('edge:type', $edge_type)
- ->setNewValue(
- array(
- '+' => array(
- $commit->getPHID() => $commit->getPHID(),
- ),
- ));
+ ->setNewValue(array(
+ '+' => array($commit->getPHID() => $commit->getPHID()),
+ ));
$status = $task_statuses[$task_id];
if ($status) {
@@ -525,10 +531,6 @@
$xactions[] = $edge_xaction;
- $content_source = PhabricatorContentSource::newForSource(
- PhabricatorContentSource::SOURCE_DAEMON,
- array());
-
$editor = id(new ManiphestTransactionEditor())
->setActor($actor)
->setActingAsPHID($acting_as)
@@ -536,7 +538,8 @@
->setContinueOnMissingFields(true)
->setUnmentionablePHIDMap(
array($commit->getPHID() => $commit->getPHID()))
- ->setContentSource($content_source);
+ ->setContentSource(PhabricatorContentSource::newForSource(
+ PhabricatorContentSource::SOURCE_DAEMON, array()));
$editor->applyTransactions($task, $xactions);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Mar 10, 10:17 AM (1 w, 5 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7427495
Default Alt Text
D12634.diff (20 KB)
Attached To
Mode
D12634: Extend revert edges
Attached
Detach File
Event Timeline
Log In to Comment