Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/differential/management/PhabricatorDifferentialRebuildChangesetsWorkflow.php
12256 views
1
<?php
2
3
final class PhabricatorDifferentialRebuildChangesetsWorkflow
4
extends PhabricatorDifferentialManagementWorkflow {
5
6
protected function didConstruct() {
7
$this
8
->setName('rebuild-changesets')
9
->setExamples('**rebuild-changesets** --revision __revision__')
10
->setSynopsis(pht('Rebuild changesets for a revision.'))
11
->setArguments(
12
array(
13
array(
14
'name' => 'revision',
15
'param' => 'revision',
16
'help' => pht('Revision to rebuild changesets for.'),
17
),
18
));
19
}
20
21
public function execute(PhutilArgumentParser $args) {
22
$viewer = $this->getViewer();
23
24
$revision_identifier = $args->getArg('revision');
25
if (!$revision_identifier) {
26
throw new PhutilArgumentUsageException(
27
pht('Specify a revision to rebuild changesets for with "--revision".'));
28
}
29
30
$revision = id(new PhabricatorObjectQuery())
31
->setViewer($viewer)
32
->withNames(array($revision_identifier))
33
->executeOne();
34
if ($revision) {
35
if (!($revision instanceof DifferentialRevision)) {
36
throw new PhutilArgumentUsageException(
37
pht(
38
'Object "%s" specified by "--revision" must be a Differential '.
39
'revision.',
40
$revision_identifier));
41
}
42
} else {
43
$revision = id(new DifferentialRevisionQuery())
44
->setViewer($viewer)
45
->withIDs(array($revision_identifier))
46
->executeOne();
47
}
48
49
if (!$revision) {
50
throw new PhutilArgumentUsageException(
51
pht(
52
'No revision "%s" exists.',
53
$revision_identifier));
54
}
55
56
$diffs = id(new DifferentialDiffQuery())
57
->setViewer($viewer)
58
->withRevisionIDs(array($revision->getID()))
59
->execute();
60
61
$changesets = id(new DifferentialChangesetQuery())
62
->setViewer($viewer)
63
->withDiffs($diffs)
64
->needHunks(true)
65
->execute();
66
67
$changeset_groups = mgroup($changesets, 'getDiffID');
68
69
foreach ($changeset_groups as $diff_id => $changesets) {
70
echo tsprintf(
71
"%s\n",
72
pht(
73
'Rebuilding %s changeset(s) for diff ID %d.',
74
phutil_count($changesets),
75
$diff_id));
76
77
foreach ($changesets as $changeset) {
78
echo tsprintf(
79
" %s\n",
80
$changeset->getFilename());
81
}
82
83
id(new DifferentialChangesetEngine())
84
->setViewer($viewer)
85
->rebuildChangesets($changesets);
86
87
foreach ($changesets as $changeset) {
88
$changeset->save();
89
}
90
91
echo tsprintf(
92
"%s\n",
93
pht('Done.'));
94
}
95
}
96
97
98
}
99
100