1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2025-02-11 14:28:31 +01:00
phorge-arcanist/src/workflow/ArcanistVersionWorkflow.php
epriestley d9cb5b18fb Cheat our way through arc version on Windows for the moment
Summary: Fixes T8291. See PHI52. This is papering over the real issue (T8298) but it's a 10-second patch so just improve things slightly for now.

Test Plan: Ran `arc version` locally; patch confirmed on a Windows system by an affected user.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T8291

Differential Revision: https://secure.phabricator.com/D18518
2017-09-01 18:06:00 -07:00

71 lines
1.9 KiB
PHP

<?php
/**
* Display the current version of Arcanist.
*/
final class ArcanistVersionWorkflow extends ArcanistWorkflow {
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(
pht(
'Cannot display current version without having `%s` installed.',
'git'));
}
$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(
pht('%s is not a git working copy.', $lib));
}
// NOTE: Carefully execute these commands in a way that works on Windows
// until T8298 is properly fixed. See PHI52.
list($commit) = $repository->execxLocal('log -1 --format=%%H');
$commit = trim($commit);
list($timestamp) = $repository->execxLocal('log -1 --format=%%ct');
$timestamp = trim($timestamp);
$console->writeOut(
"%s %s (%s)\n",
$lib,
$commit,
date('j M Y', (int)$timestamp));
}
}
}