1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-11-22 06:42:41 +01:00

Bump Conduit client version

Summary:
Several related changes:

  - Add a "--conduit-version" flag, so you can actually diff conduit version bumps. Otherwise, the server rejects you.
  - Make "arc upgrade" upgrade both libphutil and arcanist, not just arcanist.
  - Bump the version number to 5. See D2527.

Test Plan:
  - Ran "arc upgrade".
  - Ran "arc diff". Got told there was a version issue.
  - Ran "arc diff --conduit-version=4" to create this diff.

Reviewers: indiefan, nh, vrana, btrahan, jungejason, Makinde

Reviewed By: vrana

CC: aran

Differential Revision: https://secure.phabricator.com/D2528
This commit is contained in:
epriestley 2012-05-21 16:45:03 -07:00
parent 3e655e7d4c
commit ccdf9ae957
4 changed files with 56 additions and 28 deletions

View file

@ -42,6 +42,7 @@ $argv = $args->getUnconsumedArgumentVector();
$config_trace_mode = $args->getArg('trace'); $config_trace_mode = $args->getArg('trace');
$force_conduit = null; $force_conduit = null;
$force_conduit_version = null;
$args = $argv; $args = $argv;
$load = array(); $load = array();
$matches = null; $matches = null;
@ -54,6 +55,9 @@ foreach ($args as $key => $arg) {
} else if (preg_match('/^--conduit-uri=(.*)$/', $arg, $matches)) { } else if (preg_match('/^--conduit-uri=(.*)$/', $arg, $matches)) {
unset($args[$key]); unset($args[$key]);
$force_conduit = $matches[1]; $force_conduit = $matches[1];
} else if (preg_match('/^--conduit-version=(.*)$/', $arg, $matches)) {
unset($args[$key]);
$force_conduit_version = $matches[1];
} }
} }
@ -193,6 +197,10 @@ try {
$workflow->setWorkingDirectory($working_directory); $workflow->setWorkingDirectory($working_directory);
$workflow->parseArguments($args); $workflow->parseArguments($args);
if ($force_conduit_version) {
$workflow->forceConduitVersion($force_conduit_version);
}
$need_working_copy = $workflow->requiresWorkingCopy(); $need_working_copy = $workflow->requiresWorkingCopy();
$need_conduit = $workflow->requiresConduit(); $need_conduit = $workflow->requiresConduit();
$need_auth = $workflow->requiresAuthentication(); $need_auth = $workflow->requiresAuthentication();

View file

@ -56,6 +56,7 @@ abstract class ArcanistBaseWorkflow {
private $conduitURI; private $conduitURI;
private $conduitCredentials; private $conduitCredentials;
private $conduitAuthenticated; private $conduitAuthenticated;
private $forcedConduitVersion;
private $userPHID; private $userPHID;
private $userName; private $userName;
@ -178,6 +179,14 @@ abstract class ArcanistBaseWorkflow {
return $this; return $this;
} }
public function forceConduitVersion($version) {
$this->forcedConduitVersion = $version;
return $this;
}
public function getConduitVersion() {
return nonempty($this->forcedConduitVersion, 5);
}
/** /**
* Open and authenticate a conduit connection to a Phabricator server using * Open and authenticate a conduit connection to a Phabricator server using
@ -234,7 +243,7 @@ abstract class ArcanistBaseWorkflow {
'conduit.connect', 'conduit.connect',
array( array(
'client' => 'arc', 'client' => 'arc',
'clientVersion' => 4, 'clientVersion' => $this->getConduitVersion(),
'clientDescription' => php_uname('n').':'.$description, 'clientDescription' => php_uname('n').':'.$description,
'user' => $user, 'user' => $user,
'certificate' => $certificate, 'certificate' => $certificate,

View file

@ -199,6 +199,11 @@ EOTEXT
Ignore configured Conduit URI and use an explicit one instead. Mostly Ignore configured Conduit URI and use an explicit one instead. Mostly
useful for Arcanist development. useful for Arcanist development.
__--conduit-version=...__
Ignore software version and claim to be running some other version
instead. Mostly useful for Arcanist development. May cause bad things
to happen.
EOTEXT EOTEXT
); );

View file

@ -33,7 +33,7 @@ EOTEXT
public function getCommandHelp() { public function getCommandHelp() {
return phutil_console_format(<<<EOTEXT return phutil_console_format(<<<EOTEXT
Supports: cli Supports: cli
Upgrade arc to the latest version. Upgrade arcanist and libphutil to the latest versions.
EOTEXT EOTEXT
); );
} }
@ -43,38 +43,44 @@ EOTEXT
} }
public function run() { public function run() {
echo "Upgrading arc...\n"; $roots = array();
$root = dirname(phutil_get_library_root('arcanist')); $roots['libphutil'] = dirname(phutil_get_library_root('phutil'));
$roots['arcanist'] = dirname(phutil_get_library_root('arcanist'));
if (!Filesystem::pathExists($root.'/.git')) { foreach ($roots as $lib => $root) {
throw new ArcanistUsageException( echo "Upgrading {$lib}...\n";
"arc must be in its git working copy to be automatically upgraded. ".
"This copy of arc (in '{$root}') is not in a git working copy.");
}
$working_copy = ArcanistWorkingCopyIdentity::newFromPath($root); if (!Filesystem::pathExists($root.'/.git')) {
throw new ArcanistUsageException(
"{$lib} must be in its git working copy to be automatically ".
"upgraded. This copy of {$lib} (in '{$root}') is not in a git ".
"working copy.");
}
$repository_api = ArcanistRepositoryAPI::newAPIFromWorkingCopyIdentity( $working_copy = ArcanistWorkingCopyIdentity::newFromPath($root);
$working_copy);
$this->setRepositoryAPI($repository_api);
// Require no local changes. $repository_api = ArcanistRepositoryAPI::newAPIFromWorkingCopyIdentity(
$this->requireCleanWorkingCopy(); $working_copy);
$this->setRepositoryAPI($repository_api);
// Require arc be on master. // Require no local changes.
$branch_name = $repository_api->getBranchName(); $this->requireCleanWorkingCopy();
if ($branch_name != 'master') {
throw new ArcanistUsageException(
"arc must be on branch 'master' to be automatically upgraded. ".
"This copy of arc (in '{$root}') is on branch '{$branch_name}'.");
}
chdir($root); // Require the library be on master.
try { $branch_name = $repository_api->getBranchName();
phutil_passthru('git pull --rebase'); if ($branch_name != 'master') {
} catch (Exception $ex) { throw new ArcanistUsageException(
phutil_passthru('git rebase --abort'); "{$lib} must be on branch 'master' to be automatically upgraded. ".
throw $ex; "This copy of {$lib} (in '{$root}') is on branch '{$branch_name}'.");
}
chdir($root);
try {
phutil_passthru('git pull --rebase');
} catch (Exception $ex) {
phutil_passthru('git rebase --abort');
throw $ex;
}
} }
echo phutil_console_wrap( echo phutil_console_wrap(