1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-11-21 22:32: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');
$force_conduit = null;
$force_conduit_version = null;
$args = $argv;
$load = array();
$matches = null;
@ -54,6 +55,9 @@ foreach ($args as $key => $arg) {
} else if (preg_match('/^--conduit-uri=(.*)$/', $arg, $matches)) {
unset($args[$key]);
$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->parseArguments($args);
if ($force_conduit_version) {
$workflow->forceConduitVersion($force_conduit_version);
}
$need_working_copy = $workflow->requiresWorkingCopy();
$need_conduit = $workflow->requiresConduit();
$need_auth = $workflow->requiresAuthentication();

View file

@ -56,6 +56,7 @@ abstract class ArcanistBaseWorkflow {
private $conduitURI;
private $conduitCredentials;
private $conduitAuthenticated;
private $forcedConduitVersion;
private $userPHID;
private $userName;
@ -178,6 +179,14 @@ abstract class ArcanistBaseWorkflow {
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
@ -234,7 +243,7 @@ abstract class ArcanistBaseWorkflow {
'conduit.connect',
array(
'client' => 'arc',
'clientVersion' => 4,
'clientVersion' => $this->getConduitVersion(),
'clientDescription' => php_uname('n').':'.$description,
'user' => $user,
'certificate' => $certificate,

View file

@ -199,6 +199,11 @@ EOTEXT
Ignore configured Conduit URI and use an explicit one instead. Mostly
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
);

View file

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