Path: blob/master/src/applications/differential/management/PhabricatorDifferentialRebuildChangesetsWorkflow.php
12256 views
<?php12final class PhabricatorDifferentialRebuildChangesetsWorkflow3extends PhabricatorDifferentialManagementWorkflow {45protected function didConstruct() {6$this7->setName('rebuild-changesets')8->setExamples('**rebuild-changesets** --revision __revision__')9->setSynopsis(pht('Rebuild changesets for a revision.'))10->setArguments(11array(12array(13'name' => 'revision',14'param' => 'revision',15'help' => pht('Revision to rebuild changesets for.'),16),17));18}1920public function execute(PhutilArgumentParser $args) {21$viewer = $this->getViewer();2223$revision_identifier = $args->getArg('revision');24if (!$revision_identifier) {25throw new PhutilArgumentUsageException(26pht('Specify a revision to rebuild changesets for with "--revision".'));27}2829$revision = id(new PhabricatorObjectQuery())30->setViewer($viewer)31->withNames(array($revision_identifier))32->executeOne();33if ($revision) {34if (!($revision instanceof DifferentialRevision)) {35throw new PhutilArgumentUsageException(36pht(37'Object "%s" specified by "--revision" must be a Differential '.38'revision.',39$revision_identifier));40}41} else {42$revision = id(new DifferentialRevisionQuery())43->setViewer($viewer)44->withIDs(array($revision_identifier))45->executeOne();46}4748if (!$revision) {49throw new PhutilArgumentUsageException(50pht(51'No revision "%s" exists.',52$revision_identifier));53}5455$diffs = id(new DifferentialDiffQuery())56->setViewer($viewer)57->withRevisionIDs(array($revision->getID()))58->execute();5960$changesets = id(new DifferentialChangesetQuery())61->setViewer($viewer)62->withDiffs($diffs)63->needHunks(true)64->execute();6566$changeset_groups = mgroup($changesets, 'getDiffID');6768foreach ($changeset_groups as $diff_id => $changesets) {69echo tsprintf(70"%s\n",71pht(72'Rebuilding %s changeset(s) for diff ID %d.',73phutil_count($changesets),74$diff_id));7576foreach ($changesets as $changeset) {77echo tsprintf(78" %s\n",79$changeset->getFilename());80}8182id(new DifferentialChangesetEngine())83->setViewer($viewer)84->rebuildChangesets($changesets);8586foreach ($changesets as $changeset) {87$changeset->save();88}8990echo tsprintf(91"%s\n",92pht('Done.'));93}94}959697}9899100