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 @@ -174,6 +174,7 @@ 'ArcanistUploadWorkflow' => 'workflow/ArcanistUploadWorkflow.php', 'ArcanistUsageException' => 'exception/ArcanistUsageException.php', 'ArcanistUserAbortException' => 'exception/usage/ArcanistUserAbortException.php', + 'ArcanistVersionWorkflow' => 'workflow/ArcanistVersionWorkflow.php', 'ArcanistWhichWorkflow' => 'workflow/ArcanistWhichWorkflow.php', 'ArcanistWorkingCopyIdentity' => 'workingcopyidentity/ArcanistWorkingCopyIdentity.php', 'ArcanistXHPASTLintNamingHook' => 'lint/linter/xhpast/ArcanistXHPASTLintNamingHook.php', @@ -337,6 +338,7 @@ 'ArcanistUploadWorkflow' => 'ArcanistBaseWorkflow', 'ArcanistUsageException' => 'Exception', 'ArcanistUserAbortException' => 'ArcanistUsageException', + 'ArcanistVersionWorkflow' => 'ArcanistBaseWorkflow', 'ArcanistWhichWorkflow' => 'ArcanistBaseWorkflow', 'ArcanistXHPASTLintNamingHookTestCase' => 'ArcanistTestCase', 'ArcanistXHPASTLintTestSwitchHook' => 'ArcanistXHPASTLintSwitchHook', diff --git a/src/workflow/ArcanistVersionWorkflow.php b/src/workflow/ArcanistVersionWorkflow.php new file mode 100644 --- /dev/null +++ b/src/workflow/ArcanistVersionWorkflow.php @@ -0,0 +1,61 @@ +<?php + +/** + * Display the current version of Arcanist. + */ +final class ArcanistVersionWorkflow extends ArcanistBaseWorkflow { + + public function getWorkflowName() { + return 'version'; + } + + public function getCommandSynopses() { + return phutil_console_format(<<<EOTEXT + **version** [__options__] +EOTEXT + ); + } + + public function getCommandHelp() { + return phutil_console_format(pht(<<<EOTEXT + Supports: cli + Shows the current version of arcanist. +EOTEXT + )); + } + + public function run() { + $console = PhutilConsole::getConsole(); + + if (!Filesystem::binaryExists('git')) { + throw new ArcanistUsageException( + 'Cannot display current version without having `git` installed.'); + } + + $roots = array( + 'arcanist' => dirname(phutil_get_library_root('arcanist')), + 'libphutil' => dirname(phutil_get_library_root('phutil')), + ); + + foreach ($roots as $lib => $root) { + $working_copy = ArcanistWorkingCopyIdentity::newFromPath($root); + $configuration_manager = clone $this->getConfigurationManager(); + $configuration_manager->setWorkingCopyIdentity($working_copy); + $repository = ArcanistRepositoryAPI::newAPIFromConfigurationManager( + $configuration_manager); + + if (!Filesystem::pathExists($repository->getMetadataPath())) { + throw new ArcanistUsageException("{$lib} is not a git working copy."); + } + + list($stdout) = $repository->execxLocal('log -1 --format=%s', '%H %ct'); + list($commit, $timestamp) = explode(' ', $stdout); + + $console->writeOut("%s %s (%s)\n", + $lib, + $commit, + date('j M Y', (int)$timestamp)); + } + } + +}