1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-19 03:50:54 +01:00

Use PhabricatorAuditEditor to write revert edges

Summary: Use `PhabricatorAuditEditor` instead of `PhabricatorEdgeEditor` when writing reverts edges. This ensures that a transaction is created in addition to the edge.

Test Plan: Reverted a commit and pushed to remote. Saw a row created in `phabricator_audit.audit_transaction_comment`. Interestingly, I can't actually see the transaction at http://phabricator.local/r${CALLSIGN}${REVERTED_COMMIT_HASH}.

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: Korvin, epriestley

Differential Revision: https://secure.phabricator.com/D11212
This commit is contained in:
Joshua Spence 2015-01-06 07:30:38 +11:00
parent 311747bd5e
commit dd42020ef3
5 changed files with 234 additions and 29 deletions

View file

@ -13,4 +13,92 @@ final class DiffusionCommitRevertedByCommitEdgeType
return true; return true;
} }
public function getTransactionAddString(
$actor,
$add_count,
$add_edges) {
return pht(
'%s added %s reverted commit(s): %s.',
$actor,
$add_count,
$add_edges);
}
public function getTransactionRemoveString(
$actor,
$rem_count,
$rem_edges) {
return pht(
'%s removed %s reverted 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 reverted 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 reverted 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 reverted 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 reverted commit(s) for %s, added %s: %s; removed %s: %s.',
$actor,
$object,
$add_count,
$add_edges,
$rem_count,
$rem_edges);
}
} }

View file

@ -16,4 +16,92 @@ final class DiffusionCommitRevertsCommitEdgeType extends PhabricatorEdgeType {
return true; 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);
}
} }

View file

@ -59,12 +59,36 @@ final class PhabricatorRepositoryCommitHeraldWorker
'committerName' => $data->getCommitDetail('committer'), 'committerName' => $data->getCommitDetail('committer'),
'committerPHID' => $data->getCommitDetail('committerPHID'), 'committerPHID' => $data->getCommitDetail('committerPHID'),
)); ));
$reverts_refs = id(new DifferentialCustomFieldRevertsParser())
->parseCorpus($data->getCommitMessage());
$reverts = array_mergev(ipull($reverts_refs, 'monograms'));
if ($reverts) {
$reverted_commits = id(new DiffusionCommitQuery())
->setViewer(PhabricatorUser::getOmnipotentUser())
->withIdentifiers($reverts)
->execute();
$reverted_commit_phids = mpull($reverted_commits, 'getPHID', 'getPHID');
// NOTE: Skip any write attempts if a user cleverly implies a commit
// reverts itself.
unset($reverted_commit_phids[$commit->getPHID()]);
$reverts_edge = DiffusionCommitRevertsCommitEdgeType::EDGECONST;
$xactions[] = id(new PhabricatorAuditTransaction())
->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
->setMetadataValue('edge:type', $reverts_edge)
->setNewValue(array('+' => array_fuse($reverted_commit_phids)));
}
try { try {
$raw_patch = $this->loadRawPatchText($repository, $commit); $raw_patch = $this->loadRawPatchText($repository, $commit);
} catch (Exception $ex) { } catch (Exception $ex) {
$raw_patch = pht('Unable to generate patch: %s', $ex->getMessage()); $raw_patch = pht('Unable to generate patch: %s', $ex->getMessage());
} }
$editor->setRawPatch($raw_patch); $editor->setRawPatch($raw_patch);
return $editor->applyTransactions($commit, $xactions); return $editor->applyTransactions($commit, $xactions);
} }

View file

@ -102,35 +102,6 @@ abstract class PhabricatorRepositoryCommitMessageParserWorker
$conn_w = id(new DifferentialRevision())->establishConnection('w'); $conn_w = id(new DifferentialRevision())->establishConnection('w');
$reverts_refs = id(new DifferentialCustomFieldRevertsParser())
->parseCorpus($message);
$reverts = array_mergev(ipull($reverts_refs, 'monograms'));
if ($reverts) {
$reverted_commits = id(new DiffusionCommitQuery())
->setViewer($actor)
->withIdentifiers($reverts)
->execute();
$reverted_commit_phids = mpull($reverted_commits, 'getPHID', 'getPHID');
// NOTE: Skip any write attempts if a user cleverly implies a commit
// reverts itself.
unset($reverted_commit_phids[$commit->getPHID()]);
$editor = new PhabricatorEdgeEditor();
foreach ($reverted_commit_phids as $commit_phid) {
try {
$editor->addEdge(
$commit->getPHID(),
DiffusionCommitRevertsCommitEdgeType::EDGECONST,
$commit_phid);
} catch (PhabricatorEdgeCycleException $ex) {
continue;
}
}
$editor->save();
}
// NOTE: The `differential_commit` table has a unique ID on `commitPHID`, // NOTE: The `differential_commit` table has a unique ID on `commitPHID`,
// preventing more than one revision from being associated with a commit. // preventing more than one revision from being associated with a commit.
// Generally this is good and desirable, but with the advent of hash // Generally this is good and desirable, but with the advent of hash

View file

@ -600,6 +600,40 @@ abstract class PhabricatorBaseEnglishTranslation
'%s edited commit(s), added %s: %s; removed %s: %s.' => '%s edited commit(s), added %s: %s; removed %s: %s.' =>
'%s edited commits, added %3$s; removed %5$s.', '%s edited commits, added %3$s; removed %5$s.',
'%s added %s reverted commit(s): %s.' => array(
array(
'%s added a reverted commit: %3$s.',
'%s added reverted commits: %3$s.',
),
),
'%s removed %s reverted commit(s): %s.' => array(
array(
'%s removed a reverted commit: %3$s.',
'%s removed reverted commits: %3$s.',
),
),
'%s edited reverted commit(s), added %s: %s; removed %s: %s.' =>
'%s edited reverted commits, added %3$s; removed %5$s.',
'%s added %s reverting commit(s): %s.' => array(
array(
'%s added a reverting commit: %3$s.',
'%s added reverting commits: %3$s.',
),
),
'%s removed %s reverting commit(s): %s.' => array(
array(
'%s removed a reverting commit: %3$s.',
'%s removed reverting commits: %3$s.',
),
),
'%s edited reverting commit(s), added %s: %s; removed %s: %s.' =>
'%s edited reverting commits, added %3$s; removed %5$s.',
'%s changed project member(s), added %d: %s; removed %d: %s.' => '%s changed project member(s), added %d: %s; removed %d: %s.' =>
'%s changed project members, added %3$s; removed %5$s.', '%s changed project members, added %3$s; removed %5$s.',