mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-11 16:16:14 +01:00
8f9b948447
Summary: Ref T13137. See that task for discussion. When we show a diff-of-diffs, we often render stubs for files which didn't change between the diffs. These stubs usually aren't a big deal, but for certain types of changes (like refactors) they can create a lot of clutter. Instead, hide these stubs and show a notice that we hid them. Test Plan: - Created a revision affecting 4 files. - Updated it with a diff that changed only 1 of the 4 files. - Added an inline comment to a different file. - Viewed the diff of diffs. - Before: 4 changesets with two "nothing changed" stubs. - After: 2 changesets with the stubs hidden. {F5621083} Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T13137 Differential Revision: https://secure.phabricator.com/D19453
96 lines
2.5 KiB
PHP
96 lines
2.5 KiB
PHP
<?php
|
|
|
|
final class PhabricatorDifferentialRebuildChangesetsWorkflow
|
|
extends PhabricatorDifferentialManagementWorkflow {
|
|
|
|
protected function didConstruct() {
|
|
$this
|
|
->setName('rebuild-changesets')
|
|
->setExamples('**rebuild-changesets** --revision __revision__')
|
|
->setSynopsis(pht('Rebuild changesets for a revision.'))
|
|
->setArguments(
|
|
array(
|
|
array(
|
|
'name' => 'revision',
|
|
'param' => 'revision',
|
|
'help' => pht('Revision to rebuild changesets for.'),
|
|
),
|
|
));
|
|
}
|
|
|
|
public function execute(PhutilArgumentParser $args) {
|
|
$viewer = $this->getViewer();
|
|
|
|
$revision_identifier = $args->getArg('revision');
|
|
if (!$revision_identifier) {
|
|
throw new PhutilArgumentUsageException(
|
|
pht('Specify a revision to rebuild changesets for with "--revision".'));
|
|
}
|
|
|
|
$revision = id(new PhabricatorObjectQuery())
|
|
->setViewer($viewer)
|
|
->withNames(array($revision_identifier))
|
|
->executeOne();
|
|
if ($revision) {
|
|
if (!($revision instanceof DifferentialRevision)) {
|
|
throw new PhutilArgumentUsageException(
|
|
pht(
|
|
'Object "%s" specified by "--revision" must be a Differential '.
|
|
'revision.'));
|
|
}
|
|
} else {
|
|
$revision = id(new DifferentialRevisionQuery())
|
|
->setViewer($viewer)
|
|
->withIDs(array($revision_identifier))
|
|
->executeOne();
|
|
}
|
|
|
|
if (!$revision) {
|
|
throw new PhutilArgumentUsageException(
|
|
pht(
|
|
'No revision "%s" exists.',
|
|
$revision_identifier));
|
|
}
|
|
|
|
$diffs = id(new DifferentialDiffQuery())
|
|
->setViewer($viewer)
|
|
->withRevisionIDs(array($revision->getID()))
|
|
->execute();
|
|
|
|
$changesets = id(new DifferentialChangesetQuery())
|
|
->setViewer($viewer)
|
|
->withDiffs($diffs)
|
|
->needHunks(true)
|
|
->execute();
|
|
|
|
$changeset_groups = mgroup($changesets, 'getDiffID');
|
|
|
|
foreach ($changeset_groups as $diff_id => $changesets) {
|
|
echo tsprintf(
|
|
"%s\n",
|
|
pht(
|
|
'Rebuilding %s changeset(s) for diff ID %d.',
|
|
phutil_count($changesets),
|
|
$diff_id));
|
|
|
|
foreach ($changesets as $changeset) {
|
|
echo tsprintf(
|
|
" %s\n",
|
|
$changeset->getFilename());
|
|
}
|
|
|
|
id(new DifferentialChangesetEngine())
|
|
->rebuildChangesets($changesets);
|
|
|
|
foreach ($changesets as $changeset) {
|
|
$changeset->save();
|
|
}
|
|
|
|
echo tsprintf(
|
|
"%s\n",
|
|
pht('Done.'));
|
|
}
|
|
}
|
|
|
|
|
|
}
|