mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-21 13:00:56 +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:
parent
311747bd5e
commit
dd42020ef3
5 changed files with 234 additions and 29 deletions
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.',
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue