Page MenuHomePhabricator

D21100.diff
No OneTemporary

D21100.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -39,7 +39,6 @@
'ArcanistArraySeparatorXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistArraySeparatorXHPASTLinterRuleTestCase.php',
'ArcanistArrayValueXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistArrayValueXHPASTLinterRule.php',
'ArcanistArrayValueXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistArrayValueXHPASTLinterRuleTestCase.php',
- 'ArcanistBackoutWorkflow' => 'workflow/ArcanistBackoutWorkflow.php',
'ArcanistBaseCommitParser' => 'parser/ArcanistBaseCommitParser.php',
'ArcanistBaseCommitParserTestCase' => 'parser/__tests__/ArcanistBaseCommitParserTestCase.php',
'ArcanistBaseXHPASTLinter' => 'lint/linter/ArcanistBaseXHPASTLinter.php',
@@ -91,7 +90,6 @@
'ArcanistClassNameLiteralXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistClassNameLiteralXHPASTLinterRule.php',
'ArcanistClassNameLiteralXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistClassNameLiteralXHPASTLinterRuleTestCase.php',
'ArcanistCloseRevisionWorkflow' => 'workflow/ArcanistCloseRevisionWorkflow.php',
- 'ArcanistCloseWorkflow' => 'workflow/ArcanistCloseWorkflow.php',
'ArcanistClosureLinter' => 'lint/linter/ArcanistClosureLinter.php',
'ArcanistClosureLinterTestCase' => 'lint/linter/__tests__/ArcanistClosureLinterTestCase.php',
'ArcanistCoffeeLintLinter' => 'lint/linter/ArcanistCoffeeLintLinter.php',
@@ -200,7 +198,6 @@
'ArcanistFilesystemAPI' => 'repository/api/ArcanistFilesystemAPI.php',
'ArcanistFilesystemConfigurationSource' => 'config/source/ArcanistFilesystemConfigurationSource.php',
'ArcanistFilesystemWorkingCopy' => 'workingcopy/ArcanistFilesystemWorkingCopy.php',
- 'ArcanistFlagWorkflow' => 'workflow/ArcanistFlagWorkflow.php',
'ArcanistFlake8Linter' => 'lint/linter/ArcanistFlake8Linter.php',
'ArcanistFlake8LinterTestCase' => 'lint/linter/__tests__/ArcanistFlake8LinterTestCase.php',
'ArcanistFormattedStringXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistFormattedStringXHPASTLinterRule.php',
@@ -371,7 +368,6 @@
'ArcanistPhpcsLinter' => 'lint/linter/ArcanistPhpcsLinter.php',
'ArcanistPhpcsLinterTestCase' => 'lint/linter/__tests__/ArcanistPhpcsLinterTestCase.php',
'ArcanistPhpunitTestResultParser' => 'unit/parser/ArcanistPhpunitTestResultParser.php',
- 'ArcanistPhrequentWorkflow' => 'workflow/ArcanistPhrequentWorkflow.php',
'ArcanistPhutilLibraryLinter' => 'lint/linter/ArcanistPhutilLibraryLinter.php',
'ArcanistPhutilWorkflow' => 'toolset/ArcanistPhutilWorkflow.php',
'ArcanistPhutilXHPASTLinterStandard' => 'lint/linter/standards/phutil/ArcanistPhutilXHPASTLinterStandard.php',
@@ -402,7 +398,6 @@
'ArcanistReusedIteratorReferenceXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistReusedIteratorReferenceXHPASTLinterRuleTestCase.php',
'ArcanistReusedIteratorXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistReusedIteratorXHPASTLinterRule.php',
'ArcanistReusedIteratorXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistReusedIteratorXHPASTLinterRuleTestCase.php',
- 'ArcanistRevertWorkflow' => 'workflow/ArcanistRevertWorkflow.php',
'ArcanistRevisionCommitMessageHardpointQuery' => 'ref/revision/ArcanistRevisionCommitMessageHardpointQuery.php',
'ArcanistRevisionRef' => 'ref/revision/ArcanistRevisionRef.php',
'ArcanistRevisionRefSource' => 'ref/ArcanistRevisionRefSource.php',
@@ -434,10 +429,8 @@
'ArcanistSlownessXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistSlownessXHPASTLinterRuleTestCase.php',
'ArcanistSpellingLinter' => 'lint/linter/ArcanistSpellingLinter.php',
'ArcanistSpellingLinterTestCase' => 'lint/linter/__tests__/ArcanistSpellingLinterTestCase.php',
- 'ArcanistStartWorkflow' => 'workflow/ArcanistStartWorkflow.php',
'ArcanistStaticThisXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistStaticThisXHPASTLinterRule.php',
'ArcanistStaticThisXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistStaticThisXHPASTLinterRuleTestCase.php',
- 'ArcanistStopWorkflow' => 'workflow/ArcanistStopWorkflow.php',
'ArcanistStringConfigOption' => 'config/option/ArcanistStringConfigOption.php',
'ArcanistSubversionAPI' => 'repository/api/ArcanistSubversionAPI.php',
'ArcanistSubversionWorkingCopy' => 'workingcopy/ArcanistSubversionWorkingCopy.php',
@@ -456,7 +449,6 @@
'ArcanistTextLinterTestCase' => 'lint/linter/__tests__/ArcanistTextLinterTestCase.php',
'ArcanistThisReassignmentXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistThisReassignmentXHPASTLinterRule.php',
'ArcanistThisReassignmentXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistThisReassignmentXHPASTLinterRuleTestCase.php',
- 'ArcanistTimeWorkflow' => 'workflow/ArcanistTimeWorkflow.php',
'ArcanistToStringExceptionXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistToStringExceptionXHPASTLinterRule.php',
'ArcanistToStringExceptionXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistToStringExceptionXHPASTLinterRuleTestCase.php',
'ArcanistTodoCommentXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistTodoCommentXHPASTLinterRule.php',
@@ -1024,7 +1016,6 @@
'ArcanistArraySeparatorXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
'ArcanistArrayValueXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistArrayValueXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
- 'ArcanistBackoutWorkflow' => 'ArcanistWorkflow',
'ArcanistBaseCommitParser' => 'Phobject',
'ArcanistBaseCommitParserTestCase' => 'PhutilTestCase',
'ArcanistBaseXHPASTLinter' => 'ArcanistFutureLinter',
@@ -1076,7 +1067,6 @@
'ArcanistClassNameLiteralXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistClassNameLiteralXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
'ArcanistCloseRevisionWorkflow' => 'ArcanistWorkflow',
- 'ArcanistCloseWorkflow' => 'ArcanistWorkflow',
'ArcanistClosureLinter' => 'ArcanistExternalLinter',
'ArcanistClosureLinterTestCase' => 'ArcanistExternalLinterTestCase',
'ArcanistCoffeeLintLinter' => 'ArcanistExternalLinter',
@@ -1190,7 +1180,6 @@
'ArcanistFilesystemAPI' => 'ArcanistRepositoryAPI',
'ArcanistFilesystemConfigurationSource' => 'ArcanistDictionaryConfigurationSource',
'ArcanistFilesystemWorkingCopy' => 'ArcanistWorkingCopy',
- 'ArcanistFlagWorkflow' => 'ArcanistWorkflow',
'ArcanistFlake8Linter' => 'ArcanistExternalLinter',
'ArcanistFlake8LinterTestCase' => 'ArcanistExternalLinterTestCase',
'ArcanistFormattedStringXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
@@ -1361,7 +1350,6 @@
'ArcanistPhpcsLinter' => 'ArcanistExternalLinter',
'ArcanistPhpcsLinterTestCase' => 'ArcanistExternalLinterTestCase',
'ArcanistPhpunitTestResultParser' => 'ArcanistTestResultParser',
- 'ArcanistPhrequentWorkflow' => 'ArcanistWorkflow',
'ArcanistPhutilLibraryLinter' => 'ArcanistLinter',
'ArcanistPhutilWorkflow' => 'PhutilArgumentWorkflow',
'ArcanistPhutilXHPASTLinterStandard' => 'ArcanistLinterStandard',
@@ -1392,7 +1380,6 @@
'ArcanistReusedIteratorReferenceXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
'ArcanistReusedIteratorXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistReusedIteratorXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
- 'ArcanistRevertWorkflow' => 'ArcanistWorkflow',
'ArcanistRevisionCommitMessageHardpointQuery' => 'ArcanistRuntimeHardpointQuery',
'ArcanistRevisionRef' => array(
'ArcanistRef',
@@ -1426,10 +1413,8 @@
'ArcanistSlownessXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
'ArcanistSpellingLinter' => 'ArcanistLinter',
'ArcanistSpellingLinterTestCase' => 'ArcanistLinterTestCase',
- 'ArcanistStartWorkflow' => 'ArcanistPhrequentWorkflow',
'ArcanistStaticThisXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistStaticThisXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
- 'ArcanistStopWorkflow' => 'ArcanistPhrequentWorkflow',
'ArcanistStringConfigOption' => 'ArcanistScalarConfigOption',
'ArcanistSubversionAPI' => 'ArcanistRepositoryAPI',
'ArcanistSubversionWorkingCopy' => 'ArcanistWorkingCopy',
@@ -1447,7 +1432,6 @@
'ArcanistTextLinterTestCase' => 'ArcanistLinterTestCase',
'ArcanistThisReassignmentXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistThisReassignmentXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
- 'ArcanistTimeWorkflow' => 'ArcanistPhrequentWorkflow',
'ArcanistToStringExceptionXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistToStringExceptionXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
'ArcanistTodoCommentXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
diff --git a/src/repository/api/ArcanistGitAPI.php b/src/repository/api/ArcanistGitAPI.php
--- a/src/repository/api/ArcanistGitAPI.php
+++ b/src/repository/api/ArcanistGitAPI.php
@@ -1278,19 +1278,6 @@
return trim($summary);
}
- public function backoutCommit($commit_hash) {
- $this->execxLocal('revert %s -n --no-edit', $commit_hash);
- $this->reloadWorkingCopy();
- if (!$this->getUncommittedStatus()) {
- throw new ArcanistUsageException(
- pht('%s has already been reverted.', $commit_hash));
- }
- }
-
- public function getBackoutMessage($commit_hash) {
- return pht('This reverts commit %s.', $commit_hash);
- }
-
public function isGitSubversionRepo() {
return Filesystem::pathExists($this->getPath('.git/svn'));
}
diff --git a/src/repository/api/ArcanistMercurialAPI.php b/src/repository/api/ArcanistMercurialAPI.php
--- a/src/repository/api/ArcanistMercurialAPI.php
+++ b/src/repository/api/ArcanistMercurialAPI.php
@@ -797,19 +797,6 @@
return trim($summary);
}
- public function backoutCommit($commit_hash) {
- $this->execxLocal('backout -r %s', $commit_hash);
- $this->reloadWorkingCopy();
- if (!$this->getUncommittedStatus()) {
- throw new ArcanistUsageException(
- pht('%s has already been reverted.', $commit_hash));
- }
- }
-
- public function getBackoutMessage($commit_hash) {
- return pht('Backed out changeset %s,', $commit_hash);
- }
-
public function resolveBaseCommitRule($rule, $source) {
list($type, $name) = explode(':', $rule, 2);
diff --git a/src/workflow/ArcanistBackoutWorkflow.php b/src/workflow/ArcanistBackoutWorkflow.php
deleted file mode 100644
--- a/src/workflow/ArcanistBackoutWorkflow.php
+++ /dev/null
@@ -1,193 +0,0 @@
-<?php
-
-/**
- * Runs git revert and assigns a high priority task to original author.
- */
-final class ArcanistBackoutWorkflow extends ArcanistWorkflow {
-
- private $console;
- private $conduit;
- private $revision;
-
- public function getWorkflowName() {
- return 'backout';
- }
-
- public function getCommandSynopses() {
- return phutil_console_format(<<<EOTEXT
- **backout**
-EOTEXT
- );
- }
-
- public function getCommandHelp() {
- return phutil_console_format(<<<EOTEXT
- Reverts/backouts on a previous commit. Supports: git, hg
- Command is used like this: arc backout <commithash> | <diff revision>
- Entering a differential revision will only work if there is only one commit
- associated with the revision. This requires your working copy is up to date
- and that the commit exists in the working copy.
-EOTEXT
- );
- }
-
- public function getArguments() {
- return array(
- '*' => 'input',
- );
- }
-
- public function requiresWorkingCopy() {
- return true;
- }
-
- public function requiresRepositoryAPI() {
- return true;
- }
-
- public function requiresAuthentication() {
- return true;
- }
-
- /**
- * Given a differential revision ID, fetches the commit ID.
- */
- private function getCommitIDFromRevisionID($revision_id) {
- $conduit = $this->getConduit();
- $revisions = $conduit->callMethodSynchronous(
- 'differential.query',
- array(
- 'ids' => array($revision_id),
- ));
- if (!$revisions) {
- throw new ArcanistUsageException(
- pht('The revision you provided does not exist!'));
- }
- $revision = $revisions[0];
- $commits = $revision['commits'];
- if (!$commits) {
- throw new ArcanistUsageException(
- pht('This revision has not been committed yet!'));
- } else if (count($commits) > 1) {
- throw new ArcanistUsageException(
- pht('The revision you provided has multiple commits!'));
- }
- $commit_phid = $commits[0];
- $commit = $conduit->callMethodSynchronous(
- 'phid.query',
- array(
- 'phids' => array($commit_phid),
- ));
- $commit_id = $commit[$commit_phid]['name'];
- return $commit_id;
- }
-
- /**
- * Fetches an array of commit info provided a Commit_id in the form of
- * rE123456 (not local commit hash).
- */
- private function getDiffusionCommit($commit_id) {
- $result = $this->getConduit()->callMethodSynchronous(
- 'diffusion.querycommits',
- array(
- 'names' => array($commit_id),
- ));
- $phid = idx($result['identifierMap'], $commit_id);
- // This commit was not found in Diffusion
- if (!$phid) {
- return null;
- }
- $commit = $result['data'][$phid];
- return $commit;
- }
-
- /**
- * Retrieves default template from differential and pre-fills info.
- */
- private function buildCommitMessage($commit_hash) {
- $conduit = $this->getConduit();
- $repository_api = $this->getRepositoryAPI();
-
- $summary = $repository_api->getBackoutMessage($commit_hash);
- $fields = array(
- 'summary' => $summary,
- 'testPlan' => 'revert-hammer',
- );
- $template = $conduit->callMethodSynchronous(
- 'differential.getcommitmessage',
- array(
- 'revision_id' => null,
- 'edit' => 'create',
- 'fields' => $fields,
- ));
- $template = $this->newInteractiveEditor($template)
- ->setName('new-commit')
- ->editInteractively();
-
- $template = ArcanistCommentRemover::removeComments($template);
-
- return $template;
- }
-
- public function getSupportedRevisionControlSystems() {
- return array('git', 'hg');
- }
-
- /**
- * Performs the backout/revert of a revision and creates a commit.
- */
- public function run() {
- $console = PhutilConsole::getConsole();
- $conduit = $this->getConduit();
- $repository_api = $this->getRepositoryAPI();
-
- $is_git_svn = $repository_api instanceof ArcanistGitAPI &&
- $repository_api->isGitSubversionRepo();
- $is_hg_svn = $repository_api instanceof ArcanistMercurialAPI &&
- $repository_api->isHgSubversionRepo();
- $revision_id = null;
-
- $console->writeOut(pht('Starting backout.')."\n");
- $input = $this->getArgument('input');
- if (!$input || count($input) != 1) {
- throw new ArcanistUsageException(
- pht('You must specify one commit to backout!'));
- }
-
- // Input looks like a Differential revision, so
- // we try to find the commit attached to it
- $matches = array();
- if (preg_match('/^D(\d+)$/i', $input[0], $matches)) {
- $revision_id = $matches[1];
- $commit_id = $this->getCommitIDFromRevisionID($revision_id);
- $commit = $this->getDiffusionCommit($commit_id);
- $commit_hash = $commit['identifier'];
- // Convert commit hash from SVN to Git/HG (for FB case)
- if ($is_git_svn || $is_hg_svn) {
- $commit_hash = $repository_api
- ->getHashFromFromSVNRevisionNumber($commit_hash);
- }
- } else {
- // Assume input is a commit hash
- $commit_hash = $input[0];
- }
- if (!$repository_api->hasLocalCommit($commit_hash)) {
- throw new ArcanistUsageException(
- pht('Invalid commit provided or does not exist in the working copy!'));
- }
-
- // Run 'backout'.
- $subject = $repository_api->getCommitSummary($commit_hash);
- $console->writeOut(
- pht('Backing out commit %s %s', $commit_hash, $subject)."\n");
-
- $repository_api->backoutCommit($commit_hash);
-
- // Create commit message and execute the commit
- $message = $this->buildCommitMessage($commit_hash);
- $repository_api->doCommit($message);
- $console->writeOut("%s\n",
- pht('Double-check the commit and push when ready.'));
- }
-
-}
diff --git a/src/workflow/ArcanistCloseWorkflow.php b/src/workflow/ArcanistCloseWorkflow.php
deleted file mode 100644
--- a/src/workflow/ArcanistCloseWorkflow.php
+++ /dev/null
@@ -1,159 +0,0 @@
-<?php
-
-/**
- * Close a task.
- */
-final class ArcanistCloseWorkflow extends ArcanistWorkflow {
-
- private $tasks;
- private $statusOptions;
- private $statusData;
-
- private function loadStatusData() {
- $this->statusData = $this->getConduit()->callMethodSynchronous(
- 'maniphest.querystatuses',
- array());
- return $this;
- }
-
- private function getStatusOptions() {
- if ($this->statusData === null) {
- throw new PhutilInvalidStateException('loadStatusData');
- }
- return idx($this->statusData, 'statusMap');
- }
- private function getDefaultClosedStatus() {
- if ($this->statusData === null) {
- throw new PhutilInvalidStateException('loadStatusData');
- }
- return idx($this->statusData, 'defaultClosedStatus');
- }
-
- public function getWorkflowName() {
- return 'close';
- }
-
- public function getCommandSynopses() {
- return phutil_console_format(<<<EOTEXT
- **close** __task_id__ [__options__]
-EOTEXT
- );
- }
-
- public function getCommandHelp() {
- return phutil_console_format(<<<EOTEXT
- Close a task or otherwise update its status.
-EOTEXT
- );
- }
-
- public function requiresConduit() {
- return true;
- }
-
- public function requiresRepositoryAPI() {
- return false;
- }
-
- public function requiresAuthentication() {
- return true;
- }
-
-
- public function getArguments() {
- return array(
- '*' => 'task_id',
- 'message' => array(
- 'short' => 'm',
- 'param' => 'comment',
- 'help' => pht('Provide a comment with your status change.'),
- ),
- 'status' => array(
- 'param' => 'status',
- 'short' => 's',
- 'help' => pht(
- 'Specify a new status. Valid status options can be '.
- 'seen with the `%s` argument.',
- 'list-statuses'),
- ),
- 'list-statuses' => array(
- 'help' => pht('Show available status options and exit.'),
- ),
- );
- }
-
- public function run() {
- $this->loadStatusData();
- $list_statuses = $this->getArgument('list-statuses');
- if ($list_statuses) {
- echo phutil_console_format(
- "%s\n",
- pht(
- "Valid status options are:\n\t%s",
- implode(', ', $this->getStatusOptions())));
- return 0;
- }
- $ids = $this->getArgument('task_id');
- $message = $this->getArgument('message');
- $status = strtolower($this->getArgument('status'));
-
- $status_options = $this->getStatusOptions();
- if (!isset($status) || $status == '') {
- $status = $this->getDefaultClosedStatus();
- }
-
- if (!isset($status_options[$status])) {
- $options = array_keys($status_options);
- $last = array_pop($options);
- echo pht(
- "Invalid status %s, valid options are %s, or %s.\n",
- $status,
- implode(', ', $options),
- $last);
-
- return;
- }
-
- foreach ($ids as $id) {
- if (!preg_match('/^T?\d+$/', $id)) {
- echo pht('Invalid Task ID: %s.', $id)."\n";
- return 1;
- }
- $id = ltrim($id, 'T');
- $result = $this->closeTask($id, $status, $message);
- $current_status = $status_options[$status];
- if ($result) {
- echo pht(
- "%s's status is now set to %s.\n",
- "T{$id}",
- $current_status);
- } else {
- echo pht(
- "%s is already set to %s.\n",
- "T{$id}",
- $current_status);
- }
- }
- return 0;
- }
-
- private function closeTask($task_id, $status, $comment = '') {
- $conduit = $this->getConduit();
- $info = $conduit->callMethodSynchronous(
- 'maniphest.info',
- array(
- 'task_id' => $task_id,
- ));
- if ($info['status'] == $status) {
- return false;
- }
- return $conduit->callMethodSynchronous(
- 'maniphest.update',
- array(
- 'id' => $task_id,
- 'status' => $status,
- 'comments' => $comment,
- ));
- }
-
-}
diff --git a/src/workflow/ArcanistFlagWorkflow.php b/src/workflow/ArcanistFlagWorkflow.php
deleted file mode 100644
--- a/src/workflow/ArcanistFlagWorkflow.php
+++ /dev/null
@@ -1,243 +0,0 @@
-<?php
-
-final class ArcanistFlagWorkflow extends ArcanistWorkflow {
-
- private static $colorMap = array(
- 0 => 'red', // Red
- 1 => 'yellow', // Orange
- 2 => 'yellow', // Yellow
- 3 => 'green', // Green
- 4 => 'blue', // Blue
- 5 => 'magenta', // Pink
- 6 => 'magenta', // Purple
- 7 => 'default', // Checkered
- );
-
- private static $colorSpec = array(
- 'red' => 0,
- 'r' => 0,
- 0 => 0,
- 'orange' => 1,
- 'o' => 1,
- 1 => 1,
- 'yellow' => 2,
- 'y' => 2,
- 2 => 2,
- 'green' => 3,
- 'g' => 3,
- 3 => 3,
- 'blue' => 4,
- 'b' => 4,
- 4 => 4,
- 'pink' => 5,
- 'p' => 5,
- 5 => 5,
- 'purple' => 6,
- 'v' => 6,
- 6 => 6,
- 'checkered' => 7,
- 'c' => 7,
- 7 => 7,
- );
-
- public function getWorkflowName() {
- return 'flag';
- }
-
- public function getCommandSynopses() {
- return phutil_console_format(<<<EOTEXT
- **flag** [__object__ ...]
- **flag** __object__ --clear
- **flag** __object__ [--edit] [--color __color__] [--note __note__]
-EOTEXT
- );
- }
-
- public function getCommandHelp() {
- return phutil_console_format(<<<EOTEXT
- In the first form, list objects you've flagged. You can provide the
- names of one or more objects (Maniphest tasks T#\##, Differential
- revisions D###, Diffusion references rXXX???, or PHIDs PHID-XXX-???)
- to print only flags for those objects.
-
- In the second form, clear an existing flag on one object.
-
- In the third form, create or update a flag on one object. Color
- defaults to blue and note to empty, but if you omit both you must
- pass --edit.
-EOTEXT
- );
- }
-
- public function getArguments() {
- return array(
- '*' => 'objects',
- 'clear' => array(
- 'help' => pht('Delete the flag on an object.'),
- ),
- 'edit' => array(
- 'help' => pht('Edit the flag on an object.'),
- ),
- 'color' => array(
- 'param' => 'color',
- 'help' => pht('Set the color of a flag.'),
- ),
- 'note' => array(
- 'param' => 'note',
- 'help' => pht('Set the note on a flag.'),
- ),
- );
- }
-
- public function requiresConduit() {
- return true;
- }
-
- public function requiresAuthentication() {
- return true;
- }
-
- private static function flagWasEdited($flag, $verb) {
- $color = idx(self::$colorMap, $flag['color'], 'cyan');
- $note = $flag['note'];
- if ($note) {
- // Make sure notes that are long or have line breaks in them or
- // whatever don't mess up the formatting.
- $note = implode(' ', preg_split('/\s+/', $note));
- $note = ' ('.
- id(new PhutilUTF8StringTruncator())
- ->setMaximumGlyphs(40)
- ->setTerminator('...')
- ->truncateString($note).
- ')';
- }
- echo phutil_console_format(
- "<fg:{$color}>%s</fg> flag%s $verb!\n",
- $flag['colorName'],
- $note);
- }
-
- public function run() {
- $conduit = $this->getConduit();
- $objects = $this->getArgument('objects', array());
- $phids = array();
-
- $clear = $this->getArgument('clear');
- $edit = $this->getArgument('edit');
- // I don't trust PHP to distinguish 0 (red) from null.
- $color = $this->getArgument('color', -1);
- $note = $this->getArgument('note');
- $editing = $edit || ($color != -1) || $note;
-
- if ($editing && $clear) {
- throw new ArcanistUsageException(
- pht("You can't both edit and clear a flag."));
- }
- if (($editing || $clear) && count($objects) != 1) {
- throw new ArcanistUsageException(pht('Specify exactly one object.'));
- }
-
- if (!empty($objects)) {
- // First off, convert the passed objects to PHIDs.
- $handles = $conduit->callMethodSynchronous(
- 'phid.lookup',
- array(
- 'names' => $objects,
- ));
- foreach ($objects as $object) {
- if (isset($handles[$object])) {
- $phids[$object] = $handles[$object]['phid'];
- } else {
- echo pht(
- "%s doesn't exist.\n",
- phutil_console_format('**%s**', $object));
- }
- }
- if (empty($phids)) {
- // flag.query treats an empty objectPHIDs parameter as "don't use this
- // constraint". However, if the user gives a list of objects but none
- // of them exist and have flags, we shouldn't dump the full list on
- // them after telling them that. Conveniently, we already told them,
- // so we can go quit now.
- return 0;
- }
- }
-
- if ($clear) {
- // All right, we're going to clear a flag. First clear it. Then tell the
- // user we cleared it. Step four: profit!
- $flag = $conduit->callMethodSynchronous(
- 'flag.delete',
- array(
- 'objectPHID' => head($phids),
- ));
- if (!$flag) {
- echo pht(
- "%s has no flag to clear.\n",
- phutil_console_format('**%s**', $object));
- } else {
- self::flagWasEdited($flag, 'deleted');
- }
- } else if ($editing) {
- // Let's set some flags. Just like Minesweeper, but less distracting.
- $flag_params = array(
- 'objectPHID' => head($phids),
- );
- if (isset(self::$colorSpec[$color])) {
- $flag_params['color'] = self::$colorSpec[strtolower($color)];
- }
- if ($note) {
- $flag_params['note'] = $note;
- }
- $flag = $conduit->callMethodSynchronous(
- 'flag.edit',
- $flag_params);
- self::flagWasEdited($flag, $flag['new'] ? 'created' : 'edited');
- } else {
- // Okay, list mode. Let's find the flags, which we didn't need to do
- // otherwise because Conduit does it for us.
- $flags = ipull(
- $this->getConduit()->callMethodSynchronous(
- 'flag.query',
- array(
- 'ownerPHIDs' => array($this->getUserPHID()),
- 'objectPHIDs' => array_values($phids),
- )),
- null,
- 'objectPHID');
- foreach ($phids as $object => $phid) {
- if (!isset($flags[$phid])) {
- echo pht(
- "%s has no flag.\n",
- phutil_console_format('**%s**', $object));
- }
- }
-
- if (empty($flags)) {
- // If the user passed no object names, then we should print the full
- // list, but it's empty, so tell the user they have no flags.
- // If the user passed object names, we already told them all their
- // objects are nonexistent or unflagged.
- if (empty($objects)) {
- echo pht('You have no flagged objects.')."\n";
- }
- } else {
- // Print ALL the flags. With fancy formatting. Because fancy formatting
- // is _cool_.
- $name_len = 1 + max(array_map('strlen', ipull($flags, 'colorName')));
- foreach ($flags as $flag) {
- $color = idx(self::$colorMap, $flag['color'], 'cyan');
- echo phutil_console_format(
- "[<fg:{$color}>%s</fg>] %s\n",
- str_pad($flag['colorName'], $name_len),
- $flag['handle']['fullname']);
- if ($flag['note']) {
- $note = phutil_console_wrap($flag['note'], $name_len + 3);
- echo rtrim($note)."\n";
- }
- }
- }
- }
- }
-
-}
diff --git a/src/workflow/ArcanistPhrequentWorkflow.php b/src/workflow/ArcanistPhrequentWorkflow.php
deleted file mode 100644
--- a/src/workflow/ArcanistPhrequentWorkflow.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-/**
- * Base workflow for Phrequent workflows.
- */
-abstract class ArcanistPhrequentWorkflow extends ArcanistWorkflow {
-
- protected function printCurrentTracking() {
- $conduit = $this->getConduit();
-
- $results = $conduit->callMethodSynchronous(
- 'phrequent.tracking',
- array());
- $results = $results['data'];
-
- if (count($results) === 0) {
- echo phutil_console_format(
- "%s\n",
- pht('Not currently tracking time against any object.'));
- return 0;
- }
-
- $phids_to_lookup = array();
- foreach ($results as $result) {
- $phids_to_lookup[] = $result['phid'];
- }
-
- $phid_query = $conduit->callMethodSynchronous(
- 'phid.query',
- array(
- 'phids' => $phids_to_lookup,
- ));
-
- $phid_map = array();
- foreach ($phids_to_lookup as $lookup) {
- if (array_key_exists($lookup, $phid_query)) {
- $phid_map[$lookup] = $phid_query[$lookup]['fullName'];
- } else {
- $phid_map[$lookup] = pht('Unknown Object');
- }
- }
-
- $table = id(new PhutilConsoleTable())
- ->addColumn('type', array('title' => pht('Status')))
- ->addColumn('time', array('title' => pht('Tracked'), 'align' => 'right'))
- ->addColumn('name', array('title' => pht('Name')))
- ->setBorders(false);
-
- $i = 0;
- foreach ($results as $result) {
- if ($i === 0) {
- $column_type = pht('In Progress');
- } else {
- $column_type = pht('Suspended');
- }
-
- $table->addRow(array(
- 'type' => '('.$column_type.')',
- 'time' => tsprintf($result['time']),
- 'name' => $phid_map[$result['phid']],
- ));
-
- $i++;
- }
-
- $table->draw();
- return 0;
- }
-
-}
diff --git a/src/workflow/ArcanistRevertWorkflow.php b/src/workflow/ArcanistRevertWorkflow.php
deleted file mode 100644
--- a/src/workflow/ArcanistRevertWorkflow.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-/**
- * Redirects to `arc backout` workflow.
- */
-final class ArcanistRevertWorkflow extends ArcanistWorkflow {
-
- public function getWorkflowName() {
- return 'revert';
- }
-
- public function getCommandSynopses() {
- return phutil_console_format(<<<EOTEXT
- **revert**
-EOTEXT
- );
- }
-
- public function getCommandHelp() {
- return phutil_console_format(<<<EOTEXT
- Please use arc backout instead
-EOTEXT
- );
- }
-
- public function getArguments() {
- return array(
- '*' => 'input',
- );
- }
-
- public function getSupportedRevisionControlSystems() {
- return array('git', 'hg');
- }
-
- public function run() {
- echo pht(
- 'Please use `%s` instead.',
- 'arc backout')."\n";
- return 1;
- }
-
-}
diff --git a/src/workflow/ArcanistStartWorkflow.php b/src/workflow/ArcanistStartWorkflow.php
deleted file mode 100644
--- a/src/workflow/ArcanistStartWorkflow.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-
-/**
- * Start time tracking on an object.
- */
-final class ArcanistStartWorkflow extends ArcanistPhrequentWorkflow {
-
- public function getWorkflowName() {
- return 'start';
- }
-
- public function getCommandSynopses() {
- return phutil_console_format(<<<EOTEXT
- **start** __object__
-EOTEXT
- );
- }
-
- public function getCommandHelp() {
- return phutil_console_format(<<<EOTEXT
- Start tracking work in Phrequent.
-EOTEXT
- );
- }
-
- public function requiresConduit() {
- return true;
- }
-
- public function requiresAuthentication() {
- return true;
- }
-
- public function getArguments() {
- return array(
- '*' => 'name',
- );
- }
-
- public function run() {
- $conduit = $this->getConduit();
-
- $started_phids = array();
- $short_name = $this->getArgument('name');
-
- foreach ($short_name as $object_name) {
- $object_lookup = $conduit->callMethodSynchronous(
- 'phid.lookup',
- array(
- 'names' => array($object_name),
- ));
-
- if (!array_key_exists($object_name, $object_lookup)) {
- echo phutil_console_format(
- "%s\n",
- pht("No such object '%s' found.", $object_name));
- return 1;
- }
-
- $object_phid = $object_lookup[$object_name]['phid'];
-
- $started_phids[] = $conduit->callMethodSynchronous(
- 'phrequent.push',
- array(
- 'objectPHID' => $object_phid,
- ));
- }
-
- $phid_query = $conduit->callMethodSynchronous(
- 'phid.query',
- array(
- 'phids' => $started_phids,
- ));
-
- echo phutil_console_format(
- "%s: %s\n\n",
- pht('Started'),
- implode(', ', ipull($phid_query, 'fullName')));
- $this->printCurrentTracking();
- }
-
-}
diff --git a/src/workflow/ArcanistStopWorkflow.php b/src/workflow/ArcanistStopWorkflow.php
deleted file mode 100644
--- a/src/workflow/ArcanistStopWorkflow.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-/**
- * Stop time tracking on an object.
- */
-final class ArcanistStopWorkflow extends ArcanistPhrequentWorkflow {
-
- public function getWorkflowName() {
- return 'stop';
- }
-
- public function getCommandSynopses() {
- return phutil_console_format(<<<EOTEXT
- **stop** [--note __note__] [__objects__]
-EOTEXT
- );
- }
-
- public function getCommandHelp() {
- return phutil_console_format(<<<EOTEXT
- Stop tracking work in Phrequent.
-EOTEXT
- );
- }
-
- public function requiresConduit() {
- return true;
- }
-
- public function requiresAuthentication() {
- return true;
- }
-
- public function getArguments() {
- return array(
- 'note' => array(
- 'param' => 'note',
- 'help' => pht('A note to attach to the tracked time.'),
- ),
- '*' => 'name',
- );
- }
-
- public function run() {
- $conduit = $this->getConduit();
- $names = $this->getArgument('name');
-
- $object_lookup = $conduit->callMethodSynchronous(
- 'phid.lookup',
- array(
- 'names' => $names,
- ));
-
- foreach ($names as $object_name) {
- if (!array_key_exists($object_name, $object_lookup)) {
- throw new ArcanistUsageException(
- pht("No such object '%s' found.", $object_name));
- return 1;
- }
- }
-
- if (count($names) === 0) {
- // Implicit stop; add an entry so the loop will call
- // `phrequent.pop` with a null `objectPHID`.
- $object_lookup[] = array('phid' => null);
- }
-
- $stopped_phids = array();
- foreach ($object_lookup as $ref) {
- $object_phid = $ref['phid'];
-
- $stopped_phid = $conduit->callMethodSynchronous(
- 'phrequent.pop',
- array(
- 'objectPHID' => $object_phid,
- 'note' => $this->getArgument('note'),
- ));
- if ($stopped_phid !== null) {
- $stopped_phids[] = $stopped_phid;
- }
- }
-
- if (count($stopped_phids) === 0) {
- if (count($names) === 0) {
- echo phutil_console_format(
- "%s\n",
- pht('Not currently tracking time against any object.'));
- } else {
- echo phutil_console_format(
- "%s\n",
- pht(
- 'Not currently tracking time against %s.',
- implode(', ', ipull($object_lookup, 'fullName'))));
- }
- return 1;
- }
-
- $phid_query = $conduit->callMethodSynchronous(
- 'phid.query',
- array(
- 'phids' => $stopped_phids,
- ));
-
- echo phutil_console_format(
- "%s %s\n\n",
- pht('Stopped:'),
- implode(', ', ipull($phid_query, 'fullName')));
- $this->printCurrentTracking();
- }
-
-}
diff --git a/src/workflow/ArcanistTimeWorkflow.php b/src/workflow/ArcanistTimeWorkflow.php
deleted file mode 100644
--- a/src/workflow/ArcanistTimeWorkflow.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-/**
- * Show time being tracked in Phrequent.
- */
-final class ArcanistTimeWorkflow extends ArcanistPhrequentWorkflow {
-
- public function getWorkflowName() {
- return 'time';
- }
-
- public function getCommandSynopses() {
- return phutil_console_format(<<<EOTEXT
- **time**
-EOTEXT
- );
- }
-
- public function getCommandHelp() {
- return phutil_console_format(<<<EOTEXT
- Show what you're currently tracking in Phrequent.
-EOTEXT
- );
- }
-
- public function requiresConduit() {
- return true;
- }
-
- public function requiresAuthentication() {
- return true;
- }
-
- public function run() {
- $this->printCurrentTracking();
- }
-
-}

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 24, 8:19 PM (6 h, 9 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6781440
Default Alt Text
D21100.diff (36 KB)

Event Timeline