mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-25 08:12:40 +01:00
Change double quotes to single quotes.
Summary: Ran `arc lint --apply-patches --everything` over rARC, mainly to change double quotes to single quotes where appropriate. These changes also validate that the `ArcanistXHPASTLinter::LINT_DOUBLE_QUOTE` rule is working as expected. Test Plan: Eyeballed //most// of the diff. Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley, #blessed_reviewers Subscribers: epriestley, Korvin, aurelijus Differential Revision: https://secure.phabricator.com/D9269
This commit is contained in:
parent
e34bdf6c74
commit
17820442da
78 changed files with 521 additions and 521 deletions
|
@ -195,8 +195,8 @@ try {
|
||||||
if ($need_working_copy || $want_working_copy) {
|
if ($need_working_copy || $want_working_copy) {
|
||||||
if ($need_working_copy && !$working_copy->getVCSType()) {
|
if ($need_working_copy && !$working_copy->getVCSType()) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"This command must be run in a Git, Mercurial or Subversion working ".
|
'This command must be run in a Git, Mercurial or Subversion working '.
|
||||||
"copy.");
|
'copy.');
|
||||||
}
|
}
|
||||||
$configuration_manager->setWorkingCopyIdentity($working_copy);
|
$configuration_manager->setWorkingCopyIdentity($working_copy);
|
||||||
}
|
}
|
||||||
|
@ -352,7 +352,7 @@ try {
|
||||||
echo phutil_console_format(
|
echo phutil_console_format(
|
||||||
"**Exception**\n%s\n%s\n",
|
"**Exception**\n%s\n%s\n",
|
||||||
$ex->getMessage(),
|
$ex->getMessage(),
|
||||||
"(Run with --trace for a full exception trace.)");
|
'(Run with --trace for a full exception trace.)');
|
||||||
}
|
}
|
||||||
|
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
|
@ -22,7 +22,7 @@ $args->parse(
|
||||||
|
|
||||||
$repo = $args->getArg('repository');
|
$repo = $args->getArg('repository');
|
||||||
if (count($repo) !== 1) {
|
if (count($repo) !== 1) {
|
||||||
throw new Exception("Specify exactly one working copy!");
|
throw new Exception('Specify exactly one working copy!');
|
||||||
}
|
}
|
||||||
$repo = head($repo);
|
$repo = head($repo);
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ $args->parse(
|
||||||
|
|
||||||
$repo = $args->getArg('repository');
|
$repo = $args->getArg('repository');
|
||||||
if (count($repo) !== 1) {
|
if (count($repo) !== 1) {
|
||||||
throw new Exception("Specify exactly one working copy!");
|
throw new Exception('Specify exactly one working copy!');
|
||||||
}
|
}
|
||||||
$repo = head($repo);
|
$repo = head($repo);
|
||||||
|
|
||||||
|
|
|
@ -152,7 +152,7 @@ final class PhutilLibraryMapBuilder {
|
||||||
$result['error']);
|
$result['error']);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
$this->log(".");
|
$this->log('.');
|
||||||
}
|
}
|
||||||
$this->log("\nDone.\n");
|
$this->log("\nDone.\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ $args->parse(
|
||||||
|
|
||||||
$root = $args->getArg('root');
|
$root = $args->getArg('root');
|
||||||
if (count($root) !== 1) {
|
if (count($root) !== 1) {
|
||||||
throw new Exception("Provide exactly one library root!");
|
throw new Exception('Provide exactly one library root!');
|
||||||
}
|
}
|
||||||
$root = Filesystem::resolvePath(head($root));
|
$root = Filesystem::resolvePath(head($root));
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ $args->parse(
|
||||||
|
|
||||||
$paths = $args->getArg('path');
|
$paths = $args->getArg('path');
|
||||||
if (count($paths) !== 1) {
|
if (count($paths) !== 1) {
|
||||||
throw new Exception("Specify exactly one path!");
|
throw new Exception('Specify exactly one path!');
|
||||||
}
|
}
|
||||||
$path = Filesystem::resolvePath(head($paths));
|
$path = Filesystem::resolvePath(head($paths));
|
||||||
|
|
||||||
|
|
|
@ -168,7 +168,7 @@ class ArcanistConfiguration {
|
||||||
private function raiseUnknownCommand($command, array $maybe = array()) {
|
private function raiseUnknownCommand($command, array $maybe = array()) {
|
||||||
$message = pht("Unknown command '%s'. Try 'arc help'.", $command);
|
$message = pht("Unknown command '%s'. Try 'arc help'.", $command);
|
||||||
if ($maybe) {
|
if ($maybe) {
|
||||||
$message .= "\n\n".pht("Did you mean:")."\n";
|
$message .= "\n\n".pht('Did you mean:')."\n";
|
||||||
sort($maybe);
|
sort($maybe);
|
||||||
foreach ($maybe as $other) {
|
foreach ($maybe as $other) {
|
||||||
$message .= " ".$other."\n";
|
$message .= " ".$other."\n";
|
||||||
|
|
|
@ -151,7 +151,7 @@ final class ArcanistConfigurationManager {
|
||||||
return $this->workingCopy->writeLocalArcConfig($config);
|
return $this->workingCopy->writeLocalArcConfig($config);
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new Exception(pht("No working copy to write config to!"));
|
throw new Exception(pht('No working copy to write config to!'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -235,7 +235,7 @@ final class ArcanistConfigurationManager {
|
||||||
public function setUserConfigurationFileLocation($custom_arcrc) {
|
public function setUserConfigurationFileLocation($custom_arcrc) {
|
||||||
if (!Filesystem::pathExists($custom_arcrc)) {
|
if (!Filesystem::pathExists($custom_arcrc)) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"Custom arcrc file was specified, but it was not found!");
|
'Custom arcrc file was specified, but it was not found!');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->customArcrcFilename = $custom_arcrc;
|
$this->customArcrcFilename = $custom_arcrc;
|
||||||
|
|
|
@ -142,7 +142,7 @@ final class ArcanistSettings {
|
||||||
'browser' => array(
|
'browser' => array(
|
||||||
'type' => 'string',
|
'type' => 'string',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Command to use to invoke a web browser.",
|
'Command to use to invoke a web browser.',
|
||||||
'example' => '"gnome-www-browser"',
|
'example' => '"gnome-www-browser"',
|
||||||
),
|
),
|
||||||
'events.listeners' => array(
|
'events.listeners' => array(
|
||||||
|
@ -154,13 +154,13 @@ final class ArcanistSettings {
|
||||||
'http.basicauth.user' => array(
|
'http.basicauth.user' => array(
|
||||||
'type' => 'string',
|
'type' => 'string',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Username to use for basic auth over http transports",
|
'Username to use for basic auth over http transports',
|
||||||
'example' => '"bob"',
|
'example' => '"bob"',
|
||||||
),
|
),
|
||||||
'http.basicauth.pass' => array(
|
'http.basicauth.pass' => array(
|
||||||
'type' => 'string',
|
'type' => 'string',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Password to use for basic auth over http transports",
|
'Password to use for basic auth over http transports',
|
||||||
'example' => '"bobhasasecret"',
|
'example' => '"bobhasasecret"',
|
||||||
),
|
),
|
||||||
'arc.autostash' => array(
|
'arc.autostash' => array(
|
||||||
|
|
|
@ -100,7 +100,7 @@ final class ArcanistDiffUtilsTestCase extends ArcanistTestCase {
|
||||||
|
|
||||||
$utf8_tests = array(
|
$utf8_tests = array(
|
||||||
array(
|
array(
|
||||||
"GrumpyCat",
|
'GrumpyCat',
|
||||||
"Grumpy\xE2\x98\x83at",
|
"Grumpy\xE2\x98\x83at",
|
||||||
'ssssssxss',
|
'ssssssxss',
|
||||||
),
|
),
|
||||||
|
@ -118,8 +118,8 @@ final class ArcanistDiffUtilsTestCase extends ArcanistTestCase {
|
||||||
|
|
||||||
public function testGenerateUTF8IntralineDiff() {
|
public function testGenerateUTF8IntralineDiff() {
|
||||||
// Both Strings Empty.
|
// Both Strings Empty.
|
||||||
$left = "";
|
$left = '';
|
||||||
$right = "";
|
$right = '';
|
||||||
$result = array(
|
$result = array(
|
||||||
array(array(0, 0)),
|
array(array(0, 0)),
|
||||||
array(array(0, 0))
|
array(array(0, 0))
|
||||||
|
@ -129,7 +129,7 @@ final class ArcanistDiffUtilsTestCase extends ArcanistTestCase {
|
||||||
ArcanistDiffUtils::generateIntralineDiff($left, $right));
|
ArcanistDiffUtils::generateIntralineDiff($left, $right));
|
||||||
|
|
||||||
// Left String Empty.
|
// Left String Empty.
|
||||||
$left = "";
|
$left = '';
|
||||||
$right = "Grumpy\xE2\x98\x83at";
|
$right = "Grumpy\xE2\x98\x83at";
|
||||||
$result = array(
|
$result = array(
|
||||||
array(array(0, 0)),
|
array(array(0, 0)),
|
||||||
|
@ -141,7 +141,7 @@ final class ArcanistDiffUtilsTestCase extends ArcanistTestCase {
|
||||||
|
|
||||||
// Right String Empty.
|
// Right String Empty.
|
||||||
$left = "Grumpy\xE2\x98\x83at";
|
$left = "Grumpy\xE2\x98\x83at";
|
||||||
$right = "";
|
$right = '';
|
||||||
$result = array(
|
$result = array(
|
||||||
array(array(0, 11)),
|
array(array(0, 11)),
|
||||||
array(array(0, 0))
|
array(array(0, 0))
|
||||||
|
@ -163,7 +163,7 @@ final class ArcanistDiffUtilsTestCase extends ArcanistTestCase {
|
||||||
|
|
||||||
// Both Strings are different.
|
// Both Strings are different.
|
||||||
$left = "Grumpy\xE2\x98\x83at";
|
$left = "Grumpy\xE2\x98\x83at";
|
||||||
$right = "Smiling Dog";
|
$right = 'Smiling Dog';
|
||||||
$result = array(
|
$result = array(
|
||||||
array(array(1, 11)),
|
array(array(1, 11)),
|
||||||
array(array(1, 11))
|
array(array(1, 11))
|
||||||
|
@ -173,7 +173,7 @@ final class ArcanistDiffUtilsTestCase extends ArcanistTestCase {
|
||||||
ArcanistDiffUtils::generateIntralineDiff($left, $right));
|
ArcanistDiffUtils::generateIntralineDiff($left, $right));
|
||||||
|
|
||||||
// String with one difference in the middle.
|
// String with one difference in the middle.
|
||||||
$left = "GrumpyCat";
|
$left = 'GrumpyCat';
|
||||||
$right = "Grumpy\xE2\x98\x83at";
|
$right = "Grumpy\xE2\x98\x83at";
|
||||||
$result = array(
|
$result = array(
|
||||||
array(array(0, 6), array(1, 1), array(0, 2)),
|
array(array(0, 6), array(1, 1), array(0, 2)),
|
||||||
|
@ -184,7 +184,7 @@ final class ArcanistDiffUtilsTestCase extends ArcanistTestCase {
|
||||||
ArcanistDiffUtils::generateIntralineDiff($left, $right));
|
ArcanistDiffUtils::generateIntralineDiff($left, $right));
|
||||||
|
|
||||||
// Differences in middle, not connected to each other.
|
// Differences in middle, not connected to each other.
|
||||||
$left = "GrumpyCat";
|
$left = 'GrumpyCat';
|
||||||
$right = "Grumpy\xE2\x98\x83a\xE2\x98\x83t";
|
$right = "Grumpy\xE2\x98\x83a\xE2\x98\x83t";
|
||||||
$result = array(
|
$result = array(
|
||||||
array(array(0, 6), array(1, 2), array(0, 1)),
|
array(array(0, 6), array(1, 2), array(0, 1)),
|
||||||
|
@ -229,7 +229,7 @@ final class ArcanistDiffUtilsTestCase extends ArcanistTestCase {
|
||||||
|
|
||||||
// This is a unicode combining character, "COMBINING DOUBLE TILDE".
|
// This is a unicode combining character, "COMBINING DOUBLE TILDE".
|
||||||
$cc = "\xCD\xA0";
|
$cc = "\xCD\xA0";
|
||||||
$left = "Senor";
|
$left = 'Senor';
|
||||||
$right = "Sen{$cc}or";
|
$right = "Sen{$cc}or";
|
||||||
$result = array(
|
$result = array(
|
||||||
array(array(0, 2), array(1, 1), array(0, 2)),
|
array(array(0, 2), array(1, 1), array(0, 2)),
|
||||||
|
|
|
@ -57,7 +57,7 @@ final class ArcanistHgClientChannel extends PhutilProtocolChannel {
|
||||||
*/
|
*/
|
||||||
protected function encodeMessage($argv) {
|
protected function encodeMessage($argv) {
|
||||||
if (!is_array($argv) || count($argv) !== 2) {
|
if (!is_array($argv) || count($argv) !== 2) {
|
||||||
throw new Exception("Message should be <channel, data>.");
|
throw new Exception('Message should be <channel, data>.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$channel = head($argv);
|
$channel = head($argv);
|
||||||
|
|
|
@ -181,7 +181,7 @@ final class ArcanistHgProxyServer {
|
||||||
));
|
));
|
||||||
|
|
||||||
if (!$hg->update()) {
|
if (!$hg->update()) {
|
||||||
throw new Exception("Server exited unexpectedly!");
|
throw new Exception('Server exited unexpectedly!');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Accept any new clients.
|
// Accept any new clients.
|
||||||
|
@ -353,7 +353,7 @@ final class ArcanistHgProxyServer {
|
||||||
|
|
||||||
$ok = stream_set_blocking($socket, 0);
|
$ok = stream_set_blocking($socket, 0);
|
||||||
if ($ok === false) {
|
if ($ok === false) {
|
||||||
throw new Exception("Unable to set socket nonblocking!");
|
throw new Exception('Unable to set socket nonblocking!');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $socket;
|
return $socket;
|
||||||
|
@ -461,7 +461,7 @@ final class ArcanistHgProxyServer {
|
||||||
|
|
||||||
$pid = pcntl_fork();
|
$pid = pcntl_fork();
|
||||||
if ($pid === -1) {
|
if ($pid === -1) {
|
||||||
throw new Exception("Unable to fork!");
|
throw new Exception('Unable to fork!');
|
||||||
} else if ($pid) {
|
} else if ($pid) {
|
||||||
// We're the parent; exit. First, drop our reference to the socket so
|
// We're the parent; exit. First, drop our reference to the socket so
|
||||||
// our __destruct() doesn't tear it down; the child will tear it down
|
// our __destruct() doesn't tear it down; the child will tear it down
|
||||||
|
|
|
@ -86,7 +86,7 @@ final class ArcanistHgServerChannel extends PhutilProtocolChannel {
|
||||||
*/
|
*/
|
||||||
protected function encodeMessage($argv) {
|
protected function encodeMessage($argv) {
|
||||||
if (!is_array($argv)) {
|
if (!is_array($argv)) {
|
||||||
throw new Exception("Message to Mercurial server should be an array.");
|
throw new Exception('Message to Mercurial server should be an array.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$command = head($argv);
|
$command = head($argv);
|
||||||
|
|
|
@ -48,7 +48,7 @@ final class ArcanistLintPatcher {
|
||||||
}
|
}
|
||||||
Filesystem::writeFile($lint, $data);
|
Filesystem::writeFile($lint, $data);
|
||||||
|
|
||||||
list($err) = exec_manual("mv -f %s %s", $lint, $path);
|
list($err) = exec_manual('mv -f %s %s', $lint, $path);
|
||||||
if ($err) {
|
if ($err) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"Unable to overwrite path `{$path}', patched version was left ".
|
"Unable to overwrite path `{$path}', patched version was left ".
|
||||||
|
|
|
@ -208,7 +208,7 @@ abstract class ArcanistLintEngine {
|
||||||
final public function run() {
|
final public function run() {
|
||||||
$linters = $this->buildLinters();
|
$linters = $this->buildLinters();
|
||||||
if (!$linters) {
|
if (!$linters) {
|
||||||
throw new ArcanistNoEffectException("No linters to run.");
|
throw new ArcanistNoEffectException('No linters to run.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$linters = msort($linters, 'getLinterPriority');
|
$linters = msort($linters, 'getLinterPriority');
|
||||||
|
@ -225,7 +225,7 @@ abstract class ArcanistLintEngine {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$have_paths) {
|
if (!$have_paths) {
|
||||||
throw new ArcanistNoEffectException("No paths are lintable.");
|
throw new ArcanistNoEffectException('No paths are lintable.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$versions = array($this->getCacheVersion());
|
$versions = array($this->getCacheVersion());
|
||||||
|
|
|
@ -60,7 +60,7 @@ final class ArcanistCSharpLinter extends ArcanistLinter {
|
||||||
|
|
||||||
public function setCustomSeverityMap(array $map) {
|
public function setCustomSeverityMap(array $map) {
|
||||||
foreach ($map as $code => $severity) {
|
foreach ($map as $code => $severity) {
|
||||||
if (substr($code, 0, 2) === "SA" && $severity == "disabled") {
|
if (substr($code, 0, 2) === 'SA' && $severity == 'disabled') {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"In order to keep StyleCop integration with IDEs and other tools ".
|
"In order to keep StyleCop integration with IDEs and other tools ".
|
||||||
"consistent with Arcanist results, you aren't permitted to ".
|
"consistent with Arcanist results, you aren't permitted to ".
|
||||||
|
@ -88,42 +88,42 @@ final class ArcanistCSharpLinter extends ArcanistLinter {
|
||||||
|
|
||||||
// Determine runtime engine (.NET or Mono).
|
// Determine runtime engine (.NET or Mono).
|
||||||
if (phutil_is_windows()) {
|
if (phutil_is_windows()) {
|
||||||
$this->runtimeEngine = "";
|
$this->runtimeEngine = '';
|
||||||
} else if (Filesystem::binaryExists("mono")) {
|
} else if (Filesystem::binaryExists('mono')) {
|
||||||
$this->runtimeEngine = "mono ";
|
$this->runtimeEngine = 'mono ';
|
||||||
} else {
|
} else {
|
||||||
throw new Exception("Unable to find Mono and you are not on Windows!");
|
throw new Exception('Unable to find Mono and you are not on Windows!');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine cslint path.
|
// Determine cslint path.
|
||||||
$cslint = $this->cslintHintPath;
|
$cslint = $this->cslintHintPath;
|
||||||
if ($cslint !== null && file_exists($cslint)) {
|
if ($cslint !== null && file_exists($cslint)) {
|
||||||
$this->cslintEngine = Filesystem::resolvePath($cslint);
|
$this->cslintEngine = Filesystem::resolvePath($cslint);
|
||||||
} else if (Filesystem::binaryExists("cslint.exe")) {
|
} else if (Filesystem::binaryExists('cslint.exe')) {
|
||||||
$this->cslintEngine = "cslint.exe";
|
$this->cslintEngine = 'cslint.exe';
|
||||||
} else {
|
} else {
|
||||||
throw new Exception("Unable to locate cslint.");
|
throw new Exception('Unable to locate cslint.');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine cslint version.
|
// Determine cslint version.
|
||||||
$ver_future = new ExecFuture(
|
$ver_future = new ExecFuture(
|
||||||
"%C -v",
|
'%C -v',
|
||||||
$this->runtimeEngine.$this->cslintEngine);
|
$this->runtimeEngine.$this->cslintEngine);
|
||||||
list($err, $stdout, $stderr) = $ver_future->resolve();
|
list($err, $stdout, $stderr) = $ver_future->resolve();
|
||||||
if ($err !== 0) {
|
if ($err !== 0) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"You are running an old version of cslint. Please ".
|
'You are running an old version of cslint. Please '.
|
||||||
"upgrade to version ".self::SUPPORTED_VERSION.".");
|
'upgrade to version '.self::SUPPORTED_VERSION.'.');
|
||||||
}
|
}
|
||||||
$ver = (int)$stdout;
|
$ver = (int)$stdout;
|
||||||
if ($ver < self::SUPPORTED_VERSION) {
|
if ($ver < self::SUPPORTED_VERSION) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"You are running an old version of cslint. Please ".
|
'You are running an old version of cslint. Please '.
|
||||||
"upgrade to version ".self::SUPPORTED_VERSION.".");
|
'upgrade to version '.self::SUPPORTED_VERSION.'.');
|
||||||
} elseif ($ver > self::SUPPORTED_VERSION) {
|
} else if ($ver > self::SUPPORTED_VERSION) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"Arcanist does not support this version of cslint (it is ".
|
'Arcanist does not support this version of cslint (it is '.
|
||||||
"newer). You can try upgrading Arcanist with `arc upgrade`.");
|
'newer). You can try upgrading Arcanist with `arc upgrade`.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->loaded = true;
|
$this->loaded = true;
|
||||||
|
@ -158,7 +158,7 @@ final class ArcanistCSharpLinter extends ArcanistLinter {
|
||||||
// settings JSON through base64-encoded to mitigate
|
// settings JSON through base64-encoded to mitigate
|
||||||
// this issue.
|
// this issue.
|
||||||
$futures[] = new ExecFuture(
|
$futures[] = new ExecFuture(
|
||||||
"%C --settings-base64=%s -r=. %Ls",
|
'%C --settings-base64=%s -r=. %Ls',
|
||||||
$this->runtimeEngine.$this->cslintEngine,
|
$this->runtimeEngine.$this->cslintEngine,
|
||||||
base64_encode(json_encode($this->discoveryMap)),
|
base64_encode(json_encode($this->discoveryMap)),
|
||||||
$current_paths);
|
$current_paths);
|
||||||
|
@ -173,7 +173,7 @@ final class ArcanistCSharpLinter extends ArcanistLinter {
|
||||||
// a future for those too.
|
// a future for those too.
|
||||||
if (count($current_paths) > 0) {
|
if (count($current_paths) > 0) {
|
||||||
$futures[] = new ExecFuture(
|
$futures[] = new ExecFuture(
|
||||||
"%C --settings-base64=%s -r=. %Ls",
|
'%C --settings-base64=%s -r=. %Ls',
|
||||||
$this->runtimeEngine.$this->cslintEngine,
|
$this->runtimeEngine.$this->cslintEngine,
|
||||||
base64_encode(json_encode($this->discoveryMap)),
|
base64_encode(json_encode($this->discoveryMap)),
|
||||||
$current_paths);
|
$current_paths);
|
||||||
|
|
|
@ -204,7 +204,7 @@ abstract class ArcanistExternalLinter extends ArcanistFutureLinter {
|
||||||
* @task bin
|
* @task bin
|
||||||
*/
|
*/
|
||||||
public function getDefaultInterpreter() {
|
public function getDefaultInterpreter() {
|
||||||
throw new Exception("Incomplete implementation!");
|
throw new Exception('Incomplete implementation!');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -128,10 +128,10 @@ final class ArcanistFlake8Linter extends ArcanistExternalLinter {
|
||||||
'Unrecognized lint message code "%s". Expected a valid flake8 '.
|
'Unrecognized lint message code "%s". Expected a valid flake8 '.
|
||||||
'lint code like "%s", or "%s", or "%s", or "%s".',
|
'lint code like "%s", or "%s", or "%s", or "%s".',
|
||||||
$code,
|
$code,
|
||||||
"E225",
|
'E225',
|
||||||
"W291",
|
'W291',
|
||||||
"F811",
|
'F811',
|
||||||
"C901"));
|
'C901'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $code;
|
return $code;
|
||||||
|
|
|
@ -221,7 +221,7 @@ abstract class ArcanistLinter {
|
||||||
if (isset($map[$code])) {
|
if (isset($map[$code])) {
|
||||||
return $map[$code];
|
return $map[$code];
|
||||||
}
|
}
|
||||||
return "Unknown lint message!";
|
return 'Unknown lint message!';
|
||||||
}
|
}
|
||||||
|
|
||||||
final protected function addLintMessage(ArcanistLintMessage $message) {
|
final protected function addLintMessage(ArcanistLintMessage $message) {
|
||||||
|
|
|
@ -125,8 +125,8 @@ final class ArcanistPEP8Linter extends ArcanistExternalLinter {
|
||||||
'Unrecognized lint message code "%s". Expected a valid PEP8 '.
|
'Unrecognized lint message code "%s". Expected a valid PEP8 '.
|
||||||
'lint code like "%s" or "%s".',
|
'lint code like "%s" or "%s".',
|
||||||
$code,
|
$code,
|
||||||
"E101",
|
'E101',
|
||||||
"W291"));
|
'W291'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $code;
|
return $code;
|
||||||
|
|
|
@ -98,13 +98,13 @@ final class ArcanistPyLintLinter extends ArcanistLinter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getPyLintPath() {
|
private function getPyLintPath() {
|
||||||
$pylint_bin = "pylint";
|
$pylint_bin = 'pylint';
|
||||||
|
|
||||||
// Use the PyLint prefix specified in the config file
|
// Use the PyLint prefix specified in the config file
|
||||||
$config = $this->getEngine()->getConfigurationManager();
|
$config = $this->getEngine()->getConfigurationManager();
|
||||||
$prefix = $config->getConfigFromAnySource('lint.pylint.prefix');
|
$prefix = $config->getConfigFromAnySource('lint.pylint.prefix');
|
||||||
if ($prefix !== null) {
|
if ($prefix !== null) {
|
||||||
$pylint_bin = $prefix."/bin/".$pylint_bin;
|
$pylint_bin = $prefix.'/bin/'.$pylint_bin;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Filesystem::pathExists($pylint_bin)) {
|
if (!Filesystem::pathExists($pylint_bin)) {
|
||||||
|
@ -156,7 +156,7 @@ final class ArcanistPyLintLinter extends ArcanistLinter {
|
||||||
}
|
}
|
||||||
|
|
||||||
$python_path[] = '';
|
$python_path[] = '';
|
||||||
return implode(":", $python_path);
|
return implode(':', $python_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getPyLintOptions() {
|
private function getPyLintOptions() {
|
||||||
|
@ -164,8 +164,8 @@ final class ArcanistPyLintLinter extends ArcanistLinter {
|
||||||
$options = array('-rn');
|
$options = array('-rn');
|
||||||
|
|
||||||
// Version 0.x.x include the pylint message ids in the output
|
// Version 0.x.x include the pylint message ids in the output
|
||||||
if (version_compare($this->getLinterVersion(), "1", 'lt')) {
|
if (version_compare($this->getLinterVersion(), '1', 'lt')) {
|
||||||
array_push($options, '-iy', "--output-format=text");
|
array_push($options, '-iy', '--output-format=text');
|
||||||
}
|
}
|
||||||
// Version 1.x.x set the output specifically to the 0.x.x format
|
// Version 1.x.x set the output specifically to the 0.x.x format
|
||||||
else {
|
else {
|
||||||
|
@ -192,7 +192,7 @@ final class ArcanistPyLintLinter extends ArcanistLinter {
|
||||||
$options = array_merge($options, $config_options);
|
$options = array_merge($options, $config_options);
|
||||||
}
|
}
|
||||||
|
|
||||||
return implode(" ", $options);
|
return implode(' ', $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLinterName() {
|
public function getLinterName() {
|
||||||
|
@ -216,7 +216,7 @@ final class ArcanistPyLintLinter extends ArcanistLinter {
|
||||||
// Assume a future version that at least is compatible with 1.x.x
|
// Assume a future version that at least is compatible with 1.x.x
|
||||||
if (count($lines) == 0 ||
|
if (count($lines) == 0 ||
|
||||||
!preg_match('/pylint\s((?:\d+\.?)+)/', $lines[0], $matches)) {
|
!preg_match('/pylint\s((?:\d+\.?)+)/', $lines[0], $matches)) {
|
||||||
return "999";
|
return '999';
|
||||||
}
|
}
|
||||||
|
|
||||||
return $matches[1];
|
return $matches[1];
|
||||||
|
@ -264,7 +264,7 @@ final class ArcanistPyLintLinter extends ArcanistLinter {
|
||||||
$message->setPath($path);
|
$message->setPath($path);
|
||||||
$message->setLine($matches[2]);
|
$message->setLine($matches[2]);
|
||||||
$message->setCode($matches[1]);
|
$message->setCode($matches[1]);
|
||||||
$message->setName($this->getLinterName()." ".$matches[1]);
|
$message->setName($this->getLinterName().' '.$matches[1]);
|
||||||
$message->setDescription($matches[3]);
|
$message->setDescription($matches[3]);
|
||||||
$message->setSeverity($this->getMessageCodeSeverity($matches[1]));
|
$message->setSeverity($this->getMessageCodeSeverity($matches[1]));
|
||||||
$this->addLintMessage($message);
|
$this->addLintMessage($message);
|
||||||
|
|
|
@ -75,7 +75,7 @@ final class ArcanistRubyLinter extends ArcanistExternalLinter {
|
||||||
foreach ($lines as $line) {
|
foreach ($lines as $line) {
|
||||||
$matches = null;
|
$matches = null;
|
||||||
|
|
||||||
if (!preg_match("/(.*?):(\d+): (.*?)$/", $line, $matches)) {
|
if (!preg_match('/(.*?):(\d+): (.*?)$/', $line, $matches)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -170,7 +170,7 @@ final class ArcanistTextLinter extends ArcanistLinter {
|
||||||
$this->raiseLintAtOffset(
|
$this->raiseLintAtOffset(
|
||||||
strlen($data),
|
strlen($data),
|
||||||
self::LINT_EOF_NEWLINE,
|
self::LINT_EOF_NEWLINE,
|
||||||
"Files must end in a newline.",
|
'Files must end in a newline.',
|
||||||
'',
|
'',
|
||||||
"\n");
|
"\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -302,12 +302,12 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter {
|
||||||
$this->raiseLintAtNode(
|
$this->raiseLintAtNode(
|
||||||
$strstr,
|
$strstr,
|
||||||
self::LINT_SLOWNESS,
|
self::LINT_SLOWNESS,
|
||||||
"Use strpos() for checking if the string contains something.");
|
'Use strpos() for checking if the string contains something.');
|
||||||
} else if ($name == 'stristr') {
|
} else if ($name == 'stristr') {
|
||||||
$this->raiseLintAtNode(
|
$this->raiseLintAtNode(
|
||||||
$strstr,
|
$strstr,
|
||||||
self::LINT_SLOWNESS,
|
self::LINT_SLOWNESS,
|
||||||
"Use stripos() for checking if the string contains something.");
|
'Use stripos() for checking if the string contains something.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -344,13 +344,13 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter {
|
||||||
$this->raiseLintAtNode(
|
$this->raiseLintAtNode(
|
||||||
$strpos,
|
$strpos,
|
||||||
self::LINT_SLOWNESS,
|
self::LINT_SLOWNESS,
|
||||||
"Use strncmp() for checking if the string starts with something.");
|
'Use strncmp() for checking if the string starts with something.');
|
||||||
} else if ($name == 'stripos') {
|
} else if ($name == 'stripos') {
|
||||||
$this->raiseLintAtNode(
|
$this->raiseLintAtNode(
|
||||||
$strpos,
|
$strpos,
|
||||||
self::LINT_SLOWNESS,
|
self::LINT_SLOWNESS,
|
||||||
"Use strncasecmp() for checking if the string starts with ".
|
'Use strncasecmp() for checking if the string starts with '.
|
||||||
"something.");
|
'something.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -480,7 +480,7 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter {
|
||||||
self::LINT_PHP_53_FEATURES,
|
self::LINT_PHP_53_FEATURES,
|
||||||
"This codebase targets PHP 5.3.0 on Windows, but `{$name}()` is not ".
|
"This codebase targets PHP 5.3.0 on Windows, but `{$name}()` is not ".
|
||||||
"available there".
|
"available there".
|
||||||
($windows ? " until PHP {$windows}" : "").".");
|
($windows ? " until PHP {$windows}" : '').".");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -510,9 +510,9 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter {
|
||||||
$this->raiseLintAtNode(
|
$this->raiseLintAtNode(
|
||||||
$index->getChildByIndex(1),
|
$index->getChildByIndex(1),
|
||||||
self::LINT_PHP_54_FEATURES,
|
self::LINT_PHP_54_FEATURES,
|
||||||
"The f()[...] syntax was not introduced until PHP 5.4, but this ".
|
'The f()[...] syntax was not introduced until PHP 5.4, but this '.
|
||||||
"codebase targets an earlier version of PHP. You can rewrite ".
|
'codebase targets an earlier version of PHP. You can rewrite '.
|
||||||
"this expression using idx().");
|
'this expression using idx().');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2044,7 +2044,7 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter {
|
||||||
$this->raiseLintAtNode(
|
$this->raiseLintAtNode(
|
||||||
$unary,
|
$unary,
|
||||||
self::LINT_EXIT_EXPRESSION,
|
self::LINT_EXIT_EXPRESSION,
|
||||||
"Use exit as a statement, not an expression.");
|
'Use exit as a statement, not an expression.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2208,8 +2208,8 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter {
|
||||||
$message = $this->raiseLintAtNode(
|
$message = $this->raiseLintAtNode(
|
||||||
$node,
|
$node,
|
||||||
self::LINT_DUPLICATE_KEYS_IN_ARRAY,
|
self::LINT_DUPLICATE_KEYS_IN_ARRAY,
|
||||||
"Duplicate key in array initializer. PHP will ignore all ".
|
'Duplicate key in array initializer. PHP will ignore all '.
|
||||||
"but the last entry.");
|
'but the last entry.');
|
||||||
|
|
||||||
$locations = array();
|
$locations = array();
|
||||||
foreach ($nodes_by_key[$key] as $node) {
|
foreach ($nodes_by_key[$key] as $node) {
|
||||||
|
|
|
@ -5,7 +5,7 @@ final class ArcanistClosureLinterTestCase
|
||||||
|
|
||||||
public function testClosureLinter() {
|
public function testClosureLinter() {
|
||||||
$linter = new ArcanistClosureLinter();
|
$linter = new ArcanistClosureLinter();
|
||||||
$linter->setFlags(array("--additional_extensions=lint-test"));
|
$linter->setFlags(array('--additional_extensions=lint-test'));
|
||||||
|
|
||||||
$this->executeTestsInDirectory(
|
$this->executeTestsInDirectory(
|
||||||
dirname(__FILE__).'/gjslint/',
|
dirname(__FILE__).'/gjslint/',
|
||||||
|
|
|
@ -43,7 +43,7 @@ final class ArcanistLintConsoleRenderer extends ArcanistLintRenderer {
|
||||||
foreach ($message->getOtherLocations() as $location) {
|
foreach ($message->getOtherLocations() as $location) {
|
||||||
$locations[] =
|
$locations[] =
|
||||||
idx($location, 'path', $path).
|
idx($location, 'path', $path).
|
||||||
(!empty($location['line']) ? ":{$location['line']}" : "");
|
(!empty($location['line']) ? ":{$location['line']}" : '');
|
||||||
}
|
}
|
||||||
$description .= "\nOther locations: ".implode(', ', $locations);
|
$description .= "\nOther locations: ".implode(', ', $locations);
|
||||||
}
|
}
|
||||||
|
@ -226,7 +226,7 @@ final class ArcanistLintConsoleRenderer extends ArcanistLintRenderer {
|
||||||
protected function renderLine($line, $data, $chevron = false, $diff = null) {
|
protected function renderLine($line, $data, $chevron = false, $diff = null) {
|
||||||
$chevron = $chevron ? '>>>' : '';
|
$chevron = $chevron ? '>>>' : '';
|
||||||
return sprintf(
|
return sprintf(
|
||||||
" %3s %1s %6s %s",
|
' %3s %1s %6s %s',
|
||||||
$chevron,
|
$chevron,
|
||||||
$diff,
|
$diff,
|
||||||
$line,
|
$line,
|
||||||
|
|
|
@ -30,6 +30,6 @@ final class ArcanistLintJSONRenderer extends ArcanistLintRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function renderOkayResult() {
|
public function renderOkayResult() {
|
||||||
return "";
|
return '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,6 @@ final class ArcanistLintLikeCompilerRenderer extends ArcanistLintRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function renderOkayResult() {
|
public function renderOkayResult() {
|
||||||
return "";
|
return '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ final class ArcanistLintSummaryRenderer extends ArcanistLintRenderer {
|
||||||
$text[] = "{$path}:{$line}:{$severity}: {$name}\n";
|
$text[] = "{$path}:{$line}:{$severity}: {$name}\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
return implode("", $text);
|
return implode('', $text);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function renderOkayResult() {
|
public function renderOkayResult() {
|
||||||
|
|
|
@ -121,10 +121,10 @@ final class ArcanistBaseCommitParser {
|
||||||
switch ($name) {
|
switch ($name) {
|
||||||
case 'verbose':
|
case 'verbose':
|
||||||
$this->verbose = true;
|
$this->verbose = true;
|
||||||
$this->log("Enabled verbose mode.");
|
$this->log('Enabled verbose mode.');
|
||||||
break;
|
break;
|
||||||
case 'prompt':
|
case 'prompt':
|
||||||
$reason = "it is what you typed when prompted.";
|
$reason = 'it is what you typed when prompted.';
|
||||||
$this->api->setBaseCommitExplanation($reason);
|
$this->api->setBaseCommitExplanation($reason);
|
||||||
return phutil_console_prompt('Against which commit?');
|
return phutil_console_prompt('Against which commit?');
|
||||||
case 'local':
|
case 'local':
|
||||||
|
@ -144,7 +144,7 @@ final class ArcanistBaseCommitParser {
|
||||||
case 'halt':
|
case 'halt':
|
||||||
// Dump the whole stack.
|
// Dump the whole stack.
|
||||||
$this->try = array();
|
$this->try = array();
|
||||||
$this->log("Halting all rule processing.");
|
$this->log('Halting all rule processing.');
|
||||||
return false;
|
return false;
|
||||||
case 'skip':
|
case 'skip':
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -379,7 +379,7 @@ final class ArcanistBundle {
|
||||||
|
|
||||||
if (!$decompose_okay) {
|
if (!$decompose_okay) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"Failed to decompose multicopy changeset in order to generate diff.");
|
'Failed to decompose multicopy changeset in order to generate diff.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -763,7 +763,7 @@ final class ArcanistBundle {
|
||||||
|
|
||||||
$content = array();
|
$content = array();
|
||||||
$content[] = "index {$old_sha1}..{$new_sha1}".$eol;
|
$content[] = "index {$old_sha1}..{$new_sha1}".$eol;
|
||||||
$content[] = "GIT binary patch".$eol;
|
$content[] = 'GIT binary patch'.$eol;
|
||||||
|
|
||||||
$content[] = "literal {$new_length}".$eol;
|
$content[] = "literal {$new_length}".$eol;
|
||||||
$content[] = $this->emitBinaryDiffBody($new_data).$eol;
|
$content[] = $this->emitBinaryDiffBody($new_data).$eol;
|
||||||
|
@ -779,9 +779,9 @@ final class ArcanistBundle {
|
||||||
|
|
||||||
if (!function_exists('gzcompress')) {
|
if (!function_exists('gzcompress')) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"This patch has binary data. The PHP zlib extension is required to ".
|
'This patch has binary data. The PHP zlib extension is required to '.
|
||||||
"apply patches with binary data to git. Install the PHP zlib ".
|
'apply patches with binary data to git. Install the PHP zlib '.
|
||||||
"extension to continue.");
|
'extension to continue.');
|
||||||
}
|
}
|
||||||
|
|
||||||
// See emit_binary_diff_body() in diff.c for git's implementation.
|
// See emit_binary_diff_body() in diff.c for git's implementation.
|
||||||
|
|
|
@ -349,7 +349,7 @@ final class ArcanistDiffParser {
|
||||||
$this->parseIndexHunk($change);
|
$this->parseIndexHunk($change);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$this->didFailParse("Unknown diff type.");
|
$this->didFailParse('Unknown diff type.');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} while ($this->getLine() !== null);
|
} while ($this->getLine() !== null);
|
||||||
|
@ -526,7 +526,7 @@ final class ArcanistDiffParser {
|
||||||
|
|
||||||
protected function setIsGit($git) {
|
protected function setIsGit($git) {
|
||||||
if ($this->isGit !== null && $this->isGit != $git) {
|
if ($this->isGit !== null && $this->isGit != $git) {
|
||||||
throw new Exception("Git status has changed!");
|
throw new Exception('Git status has changed!');
|
||||||
}
|
}
|
||||||
$this->isGit = $git;
|
$this->isGit = $git;
|
||||||
return $this;
|
return $this;
|
||||||
|
@ -817,7 +817,7 @@ final class ArcanistDiffParser {
|
||||||
$this->nextNonemptyLine();
|
$this->nextNonemptyLine();
|
||||||
return;
|
return;
|
||||||
} else if (!preg_match('/^[a-zA-Z]/', $line)) {
|
} else if (!preg_match('/^[a-zA-Z]/', $line)) {
|
||||||
$this->didFailParse("Expected base85 line length character (a-zA-Z).");
|
$this->didFailParse('Expected base85 line length character (a-zA-Z).');
|
||||||
}
|
}
|
||||||
} while (true);
|
} while (true);
|
||||||
}
|
}
|
||||||
|
@ -878,7 +878,7 @@ final class ArcanistDiffParser {
|
||||||
$line = $this->nextNonemptyLine();
|
$line = $this->nextNonemptyLine();
|
||||||
$ok = preg_match('/^Property changes on:/', $line);
|
$ok = preg_match('/^Property changes on:/', $line);
|
||||||
if (!$ok) {
|
if (!$ok) {
|
||||||
$this->didFailParse("Confused by empty line");
|
$this->didFailParse('Confused by empty line');
|
||||||
}
|
}
|
||||||
$line = $this->nextLine();
|
$line = $this->nextLine();
|
||||||
return $this->parsePropertyHunk($change);
|
return $this->parsePropertyHunk($change);
|
||||||
|
@ -966,7 +966,7 @@ final class ArcanistDiffParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($old_len || $new_len) {
|
if ($old_len || $new_len) {
|
||||||
$this->didFailParse("Found the wrong number of hunk lines.");
|
$this->didFailParse('Found the wrong number of hunk lines.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$corpus = implode('', $real);
|
$corpus = implode('', $real);
|
||||||
|
@ -1074,7 +1074,7 @@ final class ArcanistDiffParser {
|
||||||
|
|
||||||
protected function getLine() {
|
protected function getLine() {
|
||||||
if ($this->text === null) {
|
if ($this->text === null) {
|
||||||
throw new Exception("Not parsing!");
|
throw new Exception('Not parsing!');
|
||||||
}
|
}
|
||||||
if (isset($this->text[$this->line])) {
|
if (isset($this->text[$this->line])) {
|
||||||
return $this->text[$this->line];
|
return $this->text[$this->line];
|
||||||
|
@ -1168,7 +1168,7 @@ final class ArcanistDiffParser {
|
||||||
$context = '';
|
$context = '';
|
||||||
for ($ii = $min; $ii <= $max; $ii++) {
|
for ($ii = $min; $ii <= $max; $ii++) {
|
||||||
$context .= sprintf(
|
$context .= sprintf(
|
||||||
"%8.8s %6.6s %s",
|
'%8.8s %6.6s %s',
|
||||||
($ii == $this->line) ? '>>> ' : '',
|
($ii == $this->line) ? '>>> ' : '',
|
||||||
$ii + 1,
|
$ii + 1,
|
||||||
$this->text[$ii]);
|
$this->text[$ii]);
|
||||||
|
@ -1182,7 +1182,7 @@ final class ArcanistDiffParser {
|
||||||
$temp->setPreserveFile(true);
|
$temp->setPreserveFile(true);
|
||||||
|
|
||||||
Filesystem::writeFile($temp, $this->rawDiff);
|
Filesystem::writeFile($temp, $this->rawDiff);
|
||||||
$out[] = "Raw input file was written to: ".(string)$temp;
|
$out[] = 'Raw input file was written to: '.(string)$temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
$out[] = $context;
|
$out[] = $context;
|
||||||
|
@ -1392,7 +1392,7 @@ final class ArcanistDiffParser {
|
||||||
// 8. ("--")
|
// 8. ("--")
|
||||||
// 9. Patch footer.
|
// 9. Patch footer.
|
||||||
|
|
||||||
list($head, $tail) = preg_split("/^---$/m", $diff, 2);
|
list($head, $tail) = preg_split('/^---$/m', $diff, 2);
|
||||||
list($mail_headers, $mail_body) = explode("\n\n", $head, 2);
|
list($mail_headers, $mail_body) = explode("\n\n", $head, 2);
|
||||||
list($body, $foot) = preg_split('/^-- ?$/m', $tail, 2);
|
list($body, $foot) = preg_split('/^-- ?$/m', $tail, 2);
|
||||||
list($stat, $diff) = explode("\n\n", $body, 2);
|
list($stat, $diff) = explode("\n\n", $body, 2);
|
||||||
|
|
|
@ -148,7 +148,7 @@ final class ArcanistBundleTestCase extends ArcanistTestCase {
|
||||||
foreach ($raw_changes as $change) {
|
foreach ($raw_changes as $change) {
|
||||||
$this->assertTrue(
|
$this->assertTrue(
|
||||||
empty($changes[$change->getCurrentPath()]),
|
empty($changes[$change->getCurrentPath()]),
|
||||||
"Unique Path: ".$change->getCurrentPath());
|
'Unique Path: '.$change->getCurrentPath());
|
||||||
$changes[$change->getCurrentPath()] = $change;
|
$changes[$change->getCurrentPath()] = $change;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -567,7 +567,7 @@ final class ArcanistBundleTestCase extends ArcanistTestCase {
|
||||||
case '228d7be4840313ed805c25c15bba0f7b188af3e6':
|
case '228d7be4840313ed805c25c15bba0f7b188af3e6':
|
||||||
// "Add a text file."
|
// "Add a text file."
|
||||||
// This commit is never reached because we skip the 0th commit junk.
|
// This commit is never reached because we skip the 0th commit junk.
|
||||||
$this->assertTrue(true, "This is never reached.");
|
$this->assertTrue(true, 'This is never reached.');
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
|
|
|
@ -583,7 +583,7 @@ EOTEXT
|
||||||
$this->assertEqual(
|
$this->assertEqual(
|
||||||
ArcanistDiffChangeType::TYPE_MESSAGE,
|
ArcanistDiffChangeType::TYPE_MESSAGE,
|
||||||
$change->getType());
|
$change->getType());
|
||||||
$this->assertEqual("WIP", $change->getMetadata('message'));
|
$this->assertEqual('WIP', $change->getMetadata('message'));
|
||||||
|
|
||||||
$change = array_shift($changes);
|
$change = array_shift($changes);
|
||||||
$this->assertEqual(
|
$this->assertEqual(
|
||||||
|
@ -620,11 +620,11 @@ EOTEXT
|
||||||
|
|
||||||
public function testGitPathSplitting() {
|
public function testGitPathSplitting() {
|
||||||
static $tests = array(
|
static $tests = array(
|
||||||
"a/old.c b/new.c" => array('old.c', 'new.c'),
|
'a/old.c b/new.c' => array('old.c', 'new.c'),
|
||||||
"a/old.c b/new.c\n" => array('old.c', 'new.c'),
|
"a/old.c b/new.c\n" => array('old.c', 'new.c'),
|
||||||
"a/old.c b/new.c\r\n" => array('old.c', 'new.c'),
|
"a/old.c b/new.c\r\n" => array('old.c', 'new.c'),
|
||||||
"old.c new.c" => array('old.c', 'new.c'),
|
'old.c new.c' => array('old.c', 'new.c'),
|
||||||
"1/old.c 2/new.c" => array('old.c', 'new.c'),
|
'1/old.c 2/new.c' => array('old.c', 'new.c'),
|
||||||
'"a/\\"quotes1\\"" "b/\\"quotes2\\""' => array(
|
'"a/\\"quotes1\\"" "b/\\"quotes2\\""' => array(
|
||||||
'"quotes1"',
|
'"quotes1"',
|
||||||
'"quotes2"',
|
'"quotes2"',
|
||||||
|
@ -637,11 +637,11 @@ EOTEXT
|
||||||
"\xE2\x98\x831",
|
"\xE2\x98\x831",
|
||||||
"\xE2\x98\x832",
|
"\xE2\x98\x832",
|
||||||
),
|
),
|
||||||
"a/Core Data/old.c b/Core Data/new.c" => array(
|
'a/Core Data/old.c b/Core Data/new.c' => array(
|
||||||
'Core Data/old.c',
|
'Core Data/old.c',
|
||||||
'Core Data/new.c',
|
'Core Data/new.c',
|
||||||
),
|
),
|
||||||
"some file with spaces.c some file with spaces.c" => array(
|
'some file with spaces.c some file with spaces.c' => array(
|
||||||
'some file with spaces.c',
|
'some file with spaces.c',
|
||||||
'some file with spaces.c',
|
'some file with spaces.c',
|
||||||
),
|
),
|
||||||
|
@ -657,7 +657,7 @@ EOTEXT
|
||||||
|
|
||||||
|
|
||||||
static $ambiguous = array(
|
static $ambiguous = array(
|
||||||
"old file with spaces.c new file with spaces.c",
|
'old file with spaces.c new file with spaces.c',
|
||||||
);
|
);
|
||||||
|
|
||||||
foreach ($ambiguous as $input) {
|
foreach ($ambiguous as $input) {
|
||||||
|
|
|
@ -271,7 +271,7 @@ final class ArcanistDiffChange {
|
||||||
|
|
||||||
$summary = array();
|
$summary = array();
|
||||||
$summary[] = sprintf(
|
$summary[] = sprintf(
|
||||||
"%s %5.5s %s",
|
'%s %5.5s %s',
|
||||||
$char,
|
$char,
|
||||||
$attr,
|
$attr,
|
||||||
$this->getCurrentPath());
|
$this->getCurrentPath());
|
||||||
|
@ -289,14 +289,14 @@ final class ArcanistDiffChange {
|
||||||
|
|
||||||
public function getSymlinkTarget() {
|
public function getSymlinkTarget() {
|
||||||
if ($this->getFileType() != ArcanistDiffChangeType::FILE_SYMLINK) {
|
if ($this->getFileType() != ArcanistDiffChangeType::FILE_SYMLINK) {
|
||||||
throw new Exception("Not a symlink!");
|
throw new Exception('Not a symlink!');
|
||||||
}
|
}
|
||||||
$hunks = $this->getHunks();
|
$hunks = $this->getHunks();
|
||||||
$hunk = reset($hunks);
|
$hunk = reset($hunks);
|
||||||
$corpus = $hunk->getCorpus();
|
$corpus = $hunk->getCorpus();
|
||||||
$match = null;
|
$match = null;
|
||||||
if (!preg_match('/^\+(?:link )?(.*)$/m', $corpus, $match)) {
|
if (!preg_match('/^\+(?:link )?(.*)$/m', $corpus, $match)) {
|
||||||
throw new Exception("Failed to extract link target!");
|
throw new Exception('Failed to extract link target!');
|
||||||
}
|
}
|
||||||
return trim($match[1]);
|
return trim($match[1]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,7 +156,7 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
|
||||||
if ($symbolic_commit !== null) {
|
if ($symbolic_commit !== null) {
|
||||||
if ($symbolic_commit == ArcanistGitAPI::GIT_MAGIC_ROOT_COMMIT) {
|
if ($symbolic_commit == ArcanistGitAPI::GIT_MAGIC_ROOT_COMMIT) {
|
||||||
$this->setBaseCommitExplanation(
|
$this->setBaseCommitExplanation(
|
||||||
"you explicitly specified the empty tree.");
|
'you explicitly specified the empty tree.');
|
||||||
return $symbolic_commit;
|
return $symbolic_commit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,10 +187,10 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
|
||||||
|
|
||||||
if ($this->repositoryHasNoCommits) {
|
if ($this->repositoryHasNoCommits) {
|
||||||
$this->setBaseCommitExplanation(
|
$this->setBaseCommitExplanation(
|
||||||
"the repository has no commits.");
|
'the repository has no commits.');
|
||||||
} else {
|
} else {
|
||||||
$this->setBaseCommitExplanation(
|
$this->setBaseCommitExplanation(
|
||||||
"the repository has only one commit.");
|
'the repository has only one commit.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::GIT_MAGIC_ROOT_COMMIT;
|
return self::GIT_MAGIC_ROOT_COMMIT;
|
||||||
|
@ -265,7 +265,7 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
|
||||||
"(Technically: the merge-base of the selected revision and HEAD is ".
|
"(Technically: the merge-base of the selected revision and HEAD is ".
|
||||||
"used to determine the start of the commit range.)");
|
"used to determine the start of the commit range.)");
|
||||||
|
|
||||||
$prompt = "What default do you want to use? [origin/master]";
|
$prompt = 'What default do you want to use? [origin/master]';
|
||||||
$default = phutil_console_prompt($prompt);
|
$default = phutil_console_prompt($prompt);
|
||||||
|
|
||||||
if (!strlen(trim($default))) {
|
if (!strlen(trim($default))) {
|
||||||
|
@ -453,13 +453,13 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
|
||||||
|
|
||||||
// Convert svn revision number to git hash
|
// Convert svn revision number to git hash
|
||||||
public function getHashFromFromSVNRevisionNumber($revision_id) {
|
public function getHashFromFromSVNRevisionNumber($revision_id) {
|
||||||
return $this->executeSVNFindRev("r".$revision_id, "Git");
|
return $this->executeSVNFindRev('r'.$revision_id, 'Git');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Convert a git hash to svn revision number
|
// Convert a git hash to svn revision number
|
||||||
public function getSVNRevisionNumberFromHash($hash) {
|
public function getSVNRevisionNumberFromHash($hash) {
|
||||||
return $this->executeSVNFindRev($hash, "SVN");
|
return $this->executeSVNFindRev($hash, 'SVN');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -710,7 +710,7 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
|
||||||
$line,
|
$line,
|
||||||
$matches);
|
$matches);
|
||||||
if (!$ok) {
|
if (!$ok) {
|
||||||
throw new Exception("Failed to parse git ls-tree output!");
|
throw new Exception('Failed to parse git ls-tree output!');
|
||||||
}
|
}
|
||||||
$result[$matches[4]] = array(
|
$result[$matches[4]] = array(
|
||||||
'mode' => $matches[1],
|
'mode' => $matches[1],
|
||||||
|
@ -836,7 +836,7 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
|
||||||
public function performLocalBranchMerge($branch, $message) {
|
public function performLocalBranchMerge($branch, $message) {
|
||||||
if (!$branch) {
|
if (!$branch) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"Under git, you must specify the branch you want to merge.");
|
'Under git, you must specify the branch you want to merge.');
|
||||||
}
|
}
|
||||||
$err = phutil_passthru(
|
$err = phutil_passthru(
|
||||||
'(cd %s && git merge --no-ff -m %s %s)',
|
'(cd %s && git merge --no-ff -m %s %s)',
|
||||||
|
@ -845,7 +845,7 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
|
||||||
$branch);
|
$branch);
|
||||||
|
|
||||||
if ($err) {
|
if ($err) {
|
||||||
throw new ArcanistUsageException("Merge failed!");
|
throw new ArcanistUsageException('Merge failed!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -917,8 +917,8 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
|
||||||
|
|
||||||
foreach ($results as $key => $result) {
|
foreach ($results as $key => $result) {
|
||||||
$results[$key]['why'] =
|
$results[$key]['why'] =
|
||||||
"A git commit or tree hash in the commit range is already attached ".
|
'A git commit or tree hash in the commit range is already attached '.
|
||||||
"to the Differential revision.";
|
'to the Differential revision.';
|
||||||
}
|
}
|
||||||
|
|
||||||
return $results;
|
return $results;
|
||||||
|
@ -953,7 +953,7 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getBackoutMessage($commit_hash) {
|
public function getBackoutMessage($commit_hash) {
|
||||||
return "This reverts commit ".$commit_hash.".";
|
return 'This reverts commit '.$commit_hash.'.';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isGitSubversionRepo() {
|
public function isGitSubversionRepo() {
|
||||||
|
|
|
@ -133,8 +133,8 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->setBaseCommitExplanation("it is the greatest common ancestor of ".
|
$this->setBaseCommitExplanation('it is the greatest common ancestor of '.
|
||||||
"the working directory and the commit you specified explicitly.");
|
'the working directory and the commit you specified explicitly.');
|
||||||
return $commit;
|
return $commit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,8 +174,8 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI {
|
||||||
|
|
||||||
if (!$logs) {
|
if (!$logs) {
|
||||||
$this->setBaseCommitExplanation(
|
$this->setBaseCommitExplanation(
|
||||||
"you have no outgoing commits, so arc assumes you intend to submit ".
|
'you have no outgoing commits, so arc assumes you intend to submit '.
|
||||||
"uncommitted changes in the working copy.");
|
'uncommitted changes in the working copy.');
|
||||||
return $this->getWorkingCopyRevision();
|
return $this->getWorkingCopyRevision();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,11 +217,11 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI {
|
||||||
|
|
||||||
if ($against == 'null') {
|
if ($against == 'null') {
|
||||||
$this->setBaseCommitExplanation(
|
$this->setBaseCommitExplanation(
|
||||||
"this is a new repository (all changes are outgoing).");
|
'this is a new repository (all changes are outgoing).');
|
||||||
} else {
|
} else {
|
||||||
$this->setBaseCommitExplanation(
|
$this->setBaseCommitExplanation(
|
||||||
"it is the first commit reachable from the working copy state ".
|
'it is the first commit reachable from the working copy state '.
|
||||||
"which is not outgoing.");
|
'which is not outgoing.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $against;
|
return $against;
|
||||||
|
@ -231,7 +231,7 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI {
|
||||||
if ($this->localCommitInfo === null) {
|
if ($this->localCommitInfo === null) {
|
||||||
$base_commit = $this->getBaseCommit();
|
$base_commit = $this->getBaseCommit();
|
||||||
list($info) = $this->execxLocal(
|
list($info) = $this->execxLocal(
|
||||||
"log --template %s --rev %s --branch %s --",
|
'log --template %s --rev %s --branch %s --',
|
||||||
"{node}\1{rev}\1{author}\1".
|
"{node}\1{rev}\1{author}\1".
|
||||||
"{date|rfc822date}\1{branch}\1{tag}\1{parents}\1{desc}\2",
|
"{date|rfc822date}\1{branch}\1{tag}\1{parents}\1{desc}\2",
|
||||||
hgsprintf('(%s::. - %s)', $base_commit, $base_commit),
|
hgsprintf('(%s::. - %s)', $base_commit, $base_commit),
|
||||||
|
@ -522,13 +522,13 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI {
|
||||||
if ($err) {
|
if ($err) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return (strpos($stdout, "amend") !== false);
|
return (strpos($stdout, 'amend') !== false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function supportsRebase() {
|
public function supportsRebase() {
|
||||||
if ($this->supportsRebase === null) {
|
if ($this->supportsRebase === null) {
|
||||||
list ($err) = $this->execManualLocal("help rebase");
|
list ($err) = $this->execManualLocal('help rebase');
|
||||||
$this->supportsRebase = $err === 0;
|
$this->supportsRebase = $err === 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -537,7 +537,7 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI {
|
||||||
|
|
||||||
public function supportsPhases() {
|
public function supportsPhases() {
|
||||||
if ($this->supportsPhases === null) {
|
if ($this->supportsPhases === null) {
|
||||||
list ($err) = $this->execManualLocal("help phase");
|
list ($err) = $this->execManualLocal('help phase');
|
||||||
$this->supportsPhases = $err === 0;
|
$this->supportsPhases = $err === 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -616,7 +616,7 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($err) {
|
if ($err) {
|
||||||
throw new ArcanistUsageException("Merge failed!");
|
throw new ArcanistUsageException('Merge failed!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -628,7 +628,7 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI {
|
||||||
public function getCommitMessageLog() {
|
public function getCommitMessageLog() {
|
||||||
$base_commit = $this->getBaseCommit();
|
$base_commit = $this->getBaseCommit();
|
||||||
list($stdout) = $this->execxLocal(
|
list($stdout) = $this->execxLocal(
|
||||||
"log --template %s --rev %s --branch %s --",
|
'log --template %s --rev %s --branch %s --',
|
||||||
"{node}\1{desc}\2",
|
"{node}\1{desc}\2",
|
||||||
hgsprintf('(%s::. - %s)', $base_commit, $base_commit),
|
hgsprintf('(%s::. - %s)', $base_commit, $base_commit),
|
||||||
$this->getBranchName());
|
$this->getBranchName());
|
||||||
|
@ -698,8 +698,8 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI {
|
||||||
|
|
||||||
foreach ($results as $key => $hash) {
|
foreach ($results as $key => $hash) {
|
||||||
$results[$key]['why'] =
|
$results[$key]['why'] =
|
||||||
"A mercurial commit hash in the commit range is already attached ".
|
'A mercurial commit hash in the commit range is already attached '.
|
||||||
"to the Differential revision.";
|
'to the Differential revision.';
|
||||||
}
|
}
|
||||||
|
|
||||||
return $results;
|
return $results;
|
||||||
|
@ -796,7 +796,7 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getBackoutMessage($commit_hash) {
|
public function getBackoutMessage($commit_hash) {
|
||||||
return "Backed out changeset ".$commit_hash.".";
|
return 'Backed out changeset '.$commit_hash.'.';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function resolveBaseCommitRule($rule, $source) {
|
public function resolveBaseCommitRule($rule, $source) {
|
||||||
|
|
|
@ -64,7 +64,7 @@ abstract class ArcanistRepositoryAPI {
|
||||||
if (!$working_copy) {
|
if (!$working_copy) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
pht(
|
pht(
|
||||||
"Trying to create a RepositoryAPI without a working copy!"));
|
'Trying to create a RepositoryAPI without a working copy!'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$root = $working_copy->getProjectRoot();
|
$root = $working_copy->getProjectRoot();
|
||||||
|
@ -81,9 +81,9 @@ abstract class ArcanistRepositoryAPI {
|
||||||
default:
|
default:
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
pht(
|
pht(
|
||||||
"The current working directory is not part of a working copy for ".
|
'The current working directory is not part of a working copy for '.
|
||||||
"a supported version control system (Git, Subversion or ".
|
'a supported version control system (Git, Subversion or '.
|
||||||
"Mercurial)."));
|
'Mercurial).'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$api->configurationManager = $configuration_manager;
|
$api->configurationManager = $configuration_manager;
|
||||||
|
|
|
@ -631,7 +631,7 @@ EODIFF;
|
||||||
public function getFinalizedRevisionMessage() {
|
public function getFinalizedRevisionMessage() {
|
||||||
// In other VCSes we give push instructions here, but it never makes sense
|
// In other VCSes we give push instructions here, but it never makes sense
|
||||||
// in SVN.
|
// in SVN.
|
||||||
return "Done.";
|
return 'Done.';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadWorkingCopyDifferentialRevisions(
|
public function loadWorkingCopyDifferentialRevisions(
|
||||||
|
@ -660,7 +660,7 @@ EODIFF;
|
||||||
|
|
||||||
foreach ($results as $key => $result) {
|
foreach ($results as $key => $result) {
|
||||||
$results[$key]['why'] =
|
$results[$key]['why'] =
|
||||||
"Matching arcanist project name and working copy directory path.";
|
'Matching arcanist project name and working copy directory path.';
|
||||||
}
|
}
|
||||||
|
|
||||||
return $results;
|
return $results;
|
||||||
|
|
|
@ -32,18 +32,18 @@ final class ArcanistXUnitTestResultParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
$results = array();
|
$results = array();
|
||||||
$testcases = $xunit_dom->getElementsByTagName("testcase");
|
$testcases = $xunit_dom->getElementsByTagName('testcase');
|
||||||
foreach ($testcases as $testcase) {
|
foreach ($testcases as $testcase) {
|
||||||
$classname = $testcase->getAttribute("classname");
|
$classname = $testcase->getAttribute('classname');
|
||||||
$name = $testcase->getAttribute("name");
|
$name = $testcase->getAttribute('name');
|
||||||
$time = $testcase->getAttribute("time");
|
$time = $testcase->getAttribute('time');
|
||||||
|
|
||||||
$status = ArcanistUnitTestResult::RESULT_PASS;
|
$status = ArcanistUnitTestResult::RESULT_PASS;
|
||||||
$user_data = "";
|
$user_data = '';
|
||||||
|
|
||||||
// A skipped test is a test which was ignored using framework
|
// A skipped test is a test which was ignored using framework
|
||||||
// mechanizms (e.g. @skip decorator)
|
// mechanizms (e.g. @skip decorator)
|
||||||
$skipped = $testcase->getElementsByTagName("skipped");
|
$skipped = $testcase->getElementsByTagName('skipped');
|
||||||
if ($skipped->length > 0) {
|
if ($skipped->length > 0) {
|
||||||
$status = ArcanistUnitTestResult::RESULT_SKIP;
|
$status = ArcanistUnitTestResult::RESULT_SKIP;
|
||||||
$messages = array();
|
$messages = array();
|
||||||
|
@ -56,7 +56,7 @@ final class ArcanistXUnitTestResultParser {
|
||||||
|
|
||||||
// Failure is a test which the code has explicitly failed by using
|
// Failure is a test which the code has explicitly failed by using
|
||||||
// the mechanizms for that purpose. e.g., via an assertEquals
|
// the mechanizms for that purpose. e.g., via an assertEquals
|
||||||
$failures = $testcase->getElementsByTagName("failure");
|
$failures = $testcase->getElementsByTagName('failure');
|
||||||
if ($failures->length > 0) {
|
if ($failures->length > 0) {
|
||||||
$status = ArcanistUnitTestResult::RESULT_FAIL;
|
$status = ArcanistUnitTestResult::RESULT_FAIL;
|
||||||
$messages = array();
|
$messages = array();
|
||||||
|
@ -70,7 +70,7 @@ final class ArcanistXUnitTestResultParser {
|
||||||
// An errored test is one that had an unanticipated problem. e.g., an
|
// An errored test is one that had an unanticipated problem. e.g., an
|
||||||
// unchecked throwable, or a problem with an implementation of the
|
// unchecked throwable, or a problem with an implementation of the
|
||||||
// test.
|
// test.
|
||||||
$errors = $testcase->getElementsByTagName("error");
|
$errors = $testcase->getElementsByTagName('error');
|
||||||
if ($errors->length > 0) {
|
if ($errors->length > 0) {
|
||||||
$status = ArcanistUnitTestResult::RESULT_BROKEN;
|
$status = ArcanistUnitTestResult::RESULT_BROKEN;
|
||||||
$messages = array();
|
$messages = array();
|
||||||
|
@ -82,7 +82,7 @@ final class ArcanistXUnitTestResultParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = new ArcanistUnitTestResult();
|
$result = new ArcanistUnitTestResult();
|
||||||
$result->setName($classname.".".$name);
|
$result->setName($classname.'.'.$name);
|
||||||
$result->setResult($status);
|
$result->setResult($status);
|
||||||
$result->setDuration($time);
|
$result->setDuration($time);
|
||||||
$result->setUserData($user_data);
|
$result->setUserData($user_data);
|
||||||
|
|
|
@ -50,8 +50,8 @@ final class CSharpToolsTestEngine extends XUnitTestEngine {
|
||||||
$this->coverEngine = Filesystem::resolvePath($cscover);
|
$this->coverEngine = Filesystem::resolvePath($cscover);
|
||||||
} else {
|
} else {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"Unable to locate cscover coverage runner ".
|
'Unable to locate cscover coverage runner '.
|
||||||
"(have you built yet?)");
|
'(have you built yet?)');
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ final class CSharpToolsTestEngine extends XUnitTestEngine {
|
||||||
// FIXME: Can't use TempFile here as xUnit doesn't like
|
// FIXME: Can't use TempFile here as xUnit doesn't like
|
||||||
// UNIX-style full paths. It sees the leading / as the
|
// UNIX-style full paths. It sees the leading / as the
|
||||||
// start of an option flag, even when quoted.
|
// start of an option flag, even when quoted.
|
||||||
$xunit_temp = Filesystem::readRandomCharacters(10).".results.xml";
|
$xunit_temp = Filesystem::readRandomCharacters(10).'.results.xml';
|
||||||
if (file_exists($xunit_temp)) {
|
if (file_exists($xunit_temp)) {
|
||||||
unlink($xunit_temp);
|
unlink($xunit_temp);
|
||||||
}
|
}
|
||||||
|
@ -103,15 +103,15 @@ final class CSharpToolsTestEngine extends XUnitTestEngine {
|
||||||
$cover_temp->setPreserveFile(true);
|
$cover_temp->setPreserveFile(true);
|
||||||
$xunit_cmd = $this->runtimeEngine;
|
$xunit_cmd = $this->runtimeEngine;
|
||||||
$xunit_args = null;
|
$xunit_args = null;
|
||||||
if ($xunit_cmd === "") {
|
if ($xunit_cmd === '') {
|
||||||
$xunit_cmd = $this->testEngine;
|
$xunit_cmd = $this->testEngine;
|
||||||
$xunit_args = csprintf(
|
$xunit_args = csprintf(
|
||||||
"%s /xml %s",
|
'%s /xml %s',
|
||||||
$test_assembly,
|
$test_assembly,
|
||||||
$xunit_temp);
|
$xunit_temp);
|
||||||
} else {
|
} else {
|
||||||
$xunit_args = csprintf(
|
$xunit_args = csprintf(
|
||||||
"%s %s /xml %s",
|
'%s %s /xml %s',
|
||||||
$this->testEngine,
|
$this->testEngine,
|
||||||
$test_assembly,
|
$test_assembly,
|
||||||
$xunit_temp);
|
$xunit_temp);
|
||||||
|
@ -119,7 +119,7 @@ final class CSharpToolsTestEngine extends XUnitTestEngine {
|
||||||
$assembly_dir = dirname($test_assembly);
|
$assembly_dir = dirname($test_assembly);
|
||||||
$assemblies_to_instrument = array();
|
$assemblies_to_instrument = array();
|
||||||
foreach (Filesystem::listDirectory($assembly_dir) as $file) {
|
foreach (Filesystem::listDirectory($assembly_dir) as $file) {
|
||||||
if (substr($file, -4) == ".dll" || substr($file, -4) == ".exe") {
|
if (substr($file, -4) == '.dll' || substr($file, -4) == '.exe') {
|
||||||
if ($this->assemblyShouldBeInstrumented($file)) {
|
if ($this->assemblyShouldBeInstrumented($file)) {
|
||||||
$assemblies_to_instrument[] = $assembly_dir.DIRECTORY_SEPARATOR.$file;
|
$assemblies_to_instrument[] = $assembly_dir.DIRECTORY_SEPARATOR.$file;
|
||||||
}
|
}
|
||||||
|
@ -129,8 +129,8 @@ final class CSharpToolsTestEngine extends XUnitTestEngine {
|
||||||
return parent::buildTestFuture($test_assembly);
|
return parent::buildTestFuture($test_assembly);
|
||||||
}
|
}
|
||||||
$future = new ExecFuture(
|
$future = new ExecFuture(
|
||||||
"%C -o %s -c %s -a %s -w %s %Ls",
|
'%C -o %s -c %s -a %s -w %s %Ls',
|
||||||
trim($this->runtimeEngine." ".$this->coverEngine),
|
trim($this->runtimeEngine.' '.$this->coverEngine),
|
||||||
$cover_temp,
|
$cover_temp,
|
||||||
$xunit_cmd,
|
$xunit_cmd,
|
||||||
$xunit_args,
|
$xunit_args,
|
||||||
|
@ -200,9 +200,9 @@ final class CSharpToolsTestEngine extends XUnitTestEngine {
|
||||||
$results = array();
|
$results = array();
|
||||||
foreach ($tags as $tag) {
|
foreach ($tags as $tag) {
|
||||||
$results[] = array(
|
$results[] = array(
|
||||||
"file" => $tag->getAttribute("file"),
|
'file' => $tag->getAttribute('file'),
|
||||||
"start" => $tag->getAttribute("start"),
|
'start' => $tag->getAttribute('start'),
|
||||||
"end" => $tag->getAttribute("end"));
|
'end' => $tag->getAttribute('end'));
|
||||||
}
|
}
|
||||||
return $results;
|
return $results;
|
||||||
}
|
}
|
||||||
|
@ -229,12 +229,12 @@ final class CSharpToolsTestEngine extends XUnitTestEngine {
|
||||||
$executed = array();
|
$executed = array();
|
||||||
|
|
||||||
$instrumented = $this->processTags(
|
$instrumented = $this->processTags(
|
||||||
$coverage_dom->getElementsByTagName("instrumented"));
|
$coverage_dom->getElementsByTagName('instrumented'));
|
||||||
$executed = $this->processTags(
|
$executed = $this->processTags(
|
||||||
$coverage_dom->getElementsByTagName("executed"));
|
$coverage_dom->getElementsByTagName('executed'));
|
||||||
|
|
||||||
foreach ($instrumented as $instrument) {
|
foreach ($instrumented as $instrument) {
|
||||||
$absolute_file = $instrument["file"];
|
$absolute_file = $instrument['file'];
|
||||||
$relative_file = substr($absolute_file, strlen($this->projectRoot) + 1);
|
$relative_file = substr($absolute_file, strlen($this->projectRoot) + 1);
|
||||||
if (!in_array($relative_file, $files)) {
|
if (!in_array($relative_file, $files)) {
|
||||||
$files[] = $relative_file;
|
$files[] = $relative_file;
|
||||||
|
@ -254,24 +254,24 @@ final class CSharpToolsTestEngine extends XUnitTestEngine {
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($instrumented as $instrument) {
|
foreach ($instrumented as $instrument) {
|
||||||
if ($instrument["file"] !== $absolute_file) {
|
if ($instrument['file'] !== $absolute_file) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (
|
for (
|
||||||
$i = $instrument["start"];
|
$i = $instrument['start'];
|
||||||
$i <= $instrument["end"];
|
$i <= $instrument['end'];
|
||||||
$i++) {
|
$i++) {
|
||||||
$coverage[$i - 1] = 'U';
|
$coverage[$i - 1] = 'U';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($executed as $execute) {
|
foreach ($executed as $execute) {
|
||||||
if ($execute["file"] !== $absolute_file) {
|
if ($execute['file'] !== $absolute_file) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (
|
for (
|
||||||
$i = $execute["start"];
|
$i = $execute['start'];
|
||||||
$i <= $execute["end"];
|
$i <= $execute['end'];
|
||||||
$i++) {
|
$i++) {
|
||||||
$coverage[$i - 1] = 'C';
|
$coverage[$i - 1] = 'C';
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,13 +28,13 @@ final class GoTestResultParser extends ArcanistBaseTestResultParser {
|
||||||
|
|
||||||
$results = array();
|
$results = array();
|
||||||
// We'll get our full test case name at the end and add it back in
|
// We'll get our full test case name at the end and add it back in
|
||||||
$test_case_name = "";
|
$test_case_name = '';
|
||||||
|
|
||||||
// Temp store for test case results (in case we run multiple test cases)
|
// Temp store for test case results (in case we run multiple test cases)
|
||||||
$test_case_results = array();
|
$test_case_results = array();
|
||||||
foreach ($test_results as $i => $line) {
|
foreach ($test_results as $i => $line) {
|
||||||
|
|
||||||
if (strncmp($line, "--- PASS", 8) === 0) {
|
if (strncmp($line, '--- PASS', 8) === 0) {
|
||||||
// We have a passing test
|
// We have a passing test
|
||||||
$meta = array();
|
$meta = array();
|
||||||
preg_match(
|
preg_match(
|
||||||
|
@ -53,7 +53,7 @@ final class GoTestResultParser extends ArcanistBaseTestResultParser {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strncmp($line, "--- FAIL", 8) === 0) {
|
if (strncmp($line, '--- FAIL', 8) === 0) {
|
||||||
// We have a failing test
|
// We have a failing test
|
||||||
$reason = trim($test_results[$i + 1]);
|
$reason = trim($test_results[$i + 1]);
|
||||||
$meta = array();
|
$meta = array();
|
||||||
|
@ -73,21 +73,21 @@ final class GoTestResultParser extends ArcanistBaseTestResultParser {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strncmp($line, "ok", 2) === 0) {
|
if (strncmp($line, 'ok', 2) === 0) {
|
||||||
$meta = array();
|
$meta = array();
|
||||||
preg_match(
|
preg_match(
|
||||||
'/^ok[\s\t]+(?P<test_name>\w.*)[\s\t]+(?P<time>.*)s.*/',
|
'/^ok[\s\t]+(?P<test_name>\w.*)[\s\t]+(?P<time>.*)s.*/',
|
||||||
$line,
|
$line,
|
||||||
$meta);
|
$meta);
|
||||||
|
|
||||||
$test_case_name = str_replace("/", "::", $meta['test_name']);
|
$test_case_name = str_replace('/', '::', $meta['test_name']);
|
||||||
|
|
||||||
// Our test case passed
|
// Our test case passed
|
||||||
// check to make sure we were in verbose (-v) mode
|
// check to make sure we were in verbose (-v) mode
|
||||||
if (empty($test_case_results)) {
|
if (empty($test_case_results)) {
|
||||||
// We weren't in verbose mode
|
// We weren't in verbose mode
|
||||||
// create one successful result for the whole test case
|
// create one successful result for the whole test case
|
||||||
$test_name = "Go::TestCase::".$test_case_name;
|
$test_name = 'Go::TestCase::'.$test_case_name;
|
||||||
|
|
||||||
$result = new ArcanistUnitTestResult();
|
$result = new ArcanistUnitTestResult();
|
||||||
$result->setName($test_name);
|
$result->setName($test_name);
|
||||||
|
@ -113,7 +113,7 @@ final class GoTestResultParser extends ArcanistBaseTestResultParser {
|
||||||
$line,
|
$line,
|
||||||
$meta);
|
$meta);
|
||||||
|
|
||||||
$test_case_name = str_replace("/", "::", $meta['test_name']);
|
$test_case_name = str_replace('/', '::', $meta['test_name']);
|
||||||
|
|
||||||
$test_case_results = $this->fixNames(
|
$test_case_results = $this->fixNames(
|
||||||
$test_case_results,
|
$test_case_results,
|
||||||
|
@ -132,7 +132,7 @@ final class GoTestResultParser extends ArcanistBaseTestResultParser {
|
||||||
|
|
||||||
foreach ($test_case_results as &$result) {
|
foreach ($test_case_results as &$result) {
|
||||||
$test_name = $result->getName();
|
$test_name = $result->getName();
|
||||||
$result->setName("Go::Test::".$test_case_name."::".$test_name);
|
$result->setName('Go::Test::'.$test_case_name.'::'.$test_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $test_case_results;
|
return $test_case_results;
|
||||||
|
|
|
@ -18,7 +18,7 @@ final class NoseTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
$absolute_path = Filesystem::resolvePath($path);
|
$absolute_path = Filesystem::resolvePath($path);
|
||||||
|
|
||||||
if (is_dir($absolute_path)) {
|
if (is_dir($absolute_path)) {
|
||||||
$absolute_test_path = Filesystem::resolvePath("tests/".$path);
|
$absolute_test_path = Filesystem::resolvePath('tests/'.$path);
|
||||||
if (is_readable($absolute_test_path)) {
|
if (is_readable($absolute_test_path)) {
|
||||||
$affected_tests[] = $absolute_test_path;
|
$affected_tests[] = $absolute_test_path;
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ final class NoseTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
$directory = dirname($path);
|
$directory = dirname($path);
|
||||||
|
|
||||||
// assumes directory layout: tests/<package>/test_<module>.py
|
// assumes directory layout: tests/<package>/test_<module>.py
|
||||||
$relative_test_path = "tests/".$directory."/test_".$filename;
|
$relative_test_path = 'tests/'.$directory.'/test_'.$filename;
|
||||||
$absolute_test_path = Filesystem::resolvePath($relative_test_path);
|
$absolute_test_path = Filesystem::resolvePath($relative_test_path);
|
||||||
|
|
||||||
if (is_readable($absolute_test_path)) {
|
if (is_readable($absolute_test_path)) {
|
||||||
|
@ -87,16 +87,16 @@ final class NoseTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildTestFuture($path, $xunit_tmp, $cover_tmp) {
|
public function buildTestFuture($path, $xunit_tmp, $cover_tmp) {
|
||||||
$cmd_line = csprintf("nosetests --with-xunit --xunit-file=%s",
|
$cmd_line = csprintf('nosetests --with-xunit --xunit-file=%s',
|
||||||
$xunit_tmp);
|
$xunit_tmp);
|
||||||
|
|
||||||
if ($this->getEnableCoverage() !== false) {
|
if ($this->getEnableCoverage() !== false) {
|
||||||
$cmd_line .= csprintf(" --with-coverage --cover-xml " .
|
$cmd_line .= csprintf(' --with-coverage --cover-xml ' .
|
||||||
"--cover-xml-file=%s",
|
'--cover-xml-file=%s',
|
||||||
$cover_tmp);
|
$cover_tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ExecFuture("%C %s", $cmd_line, $path);
|
return new ExecFuture('%C %s', $cmd_line, $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function parseTestResults($source_path, $xunit_tmp, $cover_tmp) {
|
public function parseTestResults($source_path, $xunit_tmp, $cover_tmp) {
|
||||||
|
@ -119,10 +119,10 @@ final class NoseTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
$coverage_dom->loadXML(Filesystem::readFile($cover_file));
|
$coverage_dom->loadXML(Filesystem::readFile($cover_file));
|
||||||
|
|
||||||
$reports = array();
|
$reports = array();
|
||||||
$classes = $coverage_dom->getElementsByTagName("class");
|
$classes = $coverage_dom->getElementsByTagName('class');
|
||||||
|
|
||||||
foreach ($classes as $class) {
|
foreach ($classes as $class) {
|
||||||
$path = $class->getAttribute("filename");
|
$path = $class->getAttribute('filename');
|
||||||
$root = $this->getWorkingCopy()->getProjectRoot();
|
$root = $this->getWorkingCopy()->getProjectRoot();
|
||||||
|
|
||||||
if (!Filesystem::isDescendant($path, $root)) {
|
if (!Filesystem::isDescendant($path, $root)) {
|
||||||
|
@ -132,21 +132,21 @@ final class NoseTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
// get total line count in file
|
// get total line count in file
|
||||||
$line_count = count(phutil_split_lines(Filesystem::readFile($path)));
|
$line_count = count(phutil_split_lines(Filesystem::readFile($path)));
|
||||||
|
|
||||||
$coverage = "";
|
$coverage = '';
|
||||||
$start_line = 1;
|
$start_line = 1;
|
||||||
$lines = $class->getElementsByTagName("line");
|
$lines = $class->getElementsByTagName('line');
|
||||||
for ($ii = 0; $ii < $lines->length; $ii++) {
|
for ($ii = 0; $ii < $lines->length; $ii++) {
|
||||||
$line = $lines->item($ii);
|
$line = $lines->item($ii);
|
||||||
|
|
||||||
$next_line = intval($line->getAttribute("number"));
|
$next_line = intval($line->getAttribute('number'));
|
||||||
for ($start_line; $start_line < $next_line; $start_line++) {
|
for ($start_line; $start_line < $next_line; $start_line++) {
|
||||||
$coverage .= "N";
|
$coverage .= 'N';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (intval($line->getAttribute("hits")) == 0) {
|
if (intval($line->getAttribute('hits')) == 0) {
|
||||||
$coverage .= "U";
|
$coverage .= 'U';
|
||||||
} else if (intval($line->getAttribute("hits")) > 0) {
|
} else if (intval($line->getAttribute('hits')) > 0) {
|
||||||
$coverage .= "C";
|
$coverage .= 'C';
|
||||||
}
|
}
|
||||||
|
|
||||||
$start_line++;
|
$start_line++;
|
||||||
|
@ -154,7 +154,7 @@ final class NoseTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
|
|
||||||
if ($start_line < $line_count) {
|
if ($start_line < $line_count) {
|
||||||
foreach (range($start_line, $line_count) as $line_num) {
|
foreach (range($start_line, $line_count) as $line_num) {
|
||||||
$coverage .= "N";
|
$coverage .= 'N';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@ final class PhpunitTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
|
|
||||||
$config = $this->configFile ? csprintf('-c %s', $this->configFile) : null;
|
$config = $this->configFile ? csprintf('-c %s', $this->configFile) : null;
|
||||||
|
|
||||||
$stderr = "-d display_errors=stderr";
|
$stderr = '-d display_errors=stderr';
|
||||||
|
|
||||||
$futures[$test_path] = new ExecFuture('%C %C %C --log-json %s %C %s',
|
$futures[$test_path] = new ExecFuture('%C %C %C --log-json %s %C %s',
|
||||||
$this->phpunitBinary, $config, $stderr, $json_tmp, $clover, $test_path);
|
$this->phpunitBinary, $config, $stderr, $json_tmp, $clover, $test_path);
|
||||||
|
|
|
@ -19,7 +19,7 @@ final class PhutilUnitTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$run_tests) {
|
if (!$run_tests) {
|
||||||
throw new ArcanistNoEffectException("No tests to run.");
|
throw new ArcanistNoEffectException('No tests to run.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$enable_coverage = $this->getEnableCoverage();
|
$enable_coverage = $this->getEnableCoverage();
|
||||||
|
@ -27,8 +27,8 @@ final class PhutilUnitTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
if (!function_exists('xdebug_start_code_coverage')) {
|
if (!function_exists('xdebug_start_code_coverage')) {
|
||||||
if ($enable_coverage === true) {
|
if ($enable_coverage === true) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"You specified --coverage but xdebug is not available, so ".
|
'You specified --coverage but xdebug is not available, so '.
|
||||||
"coverage can not be enabled for PhutilUnitTestEngine.");
|
'coverage can not be enabled for PhutilUnitTestEngine.');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$enable_coverage = true;
|
$enable_coverage = true;
|
||||||
|
|
|
@ -64,29 +64,29 @@ final class PytestTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
|
|
||||||
$paths = $this->getPaths();
|
$paths = $this->getPaths();
|
||||||
$reports = array();
|
$reports = array();
|
||||||
$classes = $coverage_dom->getElementsByTagName("class");
|
$classes = $coverage_dom->getElementsByTagName('class');
|
||||||
|
|
||||||
foreach ($classes as $class) {
|
foreach ($classes as $class) {
|
||||||
// filename is actually python module path with ".py" at the end,
|
// filename is actually python module path with ".py" at the end,
|
||||||
// e.g.: tornado.web.py
|
// e.g.: tornado.web.py
|
||||||
$relative_path = explode(".", $class->getAttribute("filename"));
|
$relative_path = explode('.', $class->getAttribute('filename'));
|
||||||
array_pop($relative_path);
|
array_pop($relative_path);
|
||||||
$relative_path = implode("/", $relative_path);
|
$relative_path = implode('/', $relative_path);
|
||||||
|
|
||||||
// first we check if the path is a directory (a Python package), if it is
|
// first we check if the path is a directory (a Python package), if it is
|
||||||
// set relative and absolute paths to have __init__.py at the end.
|
// set relative and absolute paths to have __init__.py at the end.
|
||||||
$absolute_path = Filesystem::resolvePath($relative_path);
|
$absolute_path = Filesystem::resolvePath($relative_path);
|
||||||
if (is_dir($absolute_path)) {
|
if (is_dir($absolute_path)) {
|
||||||
$relative_path .= "/__init__.py";
|
$relative_path .= '/__init__.py';
|
||||||
$absolute_path .= "/__init__.py";
|
$absolute_path .= '/__init__.py';
|
||||||
}
|
}
|
||||||
|
|
||||||
// then we check if the path with ".py" at the end is file (a Python
|
// then we check if the path with ".py" at the end is file (a Python
|
||||||
// submodule), if it is - set relative and absolute paths to have
|
// submodule), if it is - set relative and absolute paths to have
|
||||||
// ".py" at the end.
|
// ".py" at the end.
|
||||||
if (is_file($absolute_path.".py")) {
|
if (is_file($absolute_path.'.py')) {
|
||||||
$relative_path .= ".py";
|
$relative_path .= '.py';
|
||||||
$absolute_path .= ".py";
|
$absolute_path .= '.py';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!file_exists($absolute_path)) {
|
if (!file_exists($absolute_path)) {
|
||||||
|
@ -100,22 +100,22 @@ final class PytestTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
// get total line count in file
|
// get total line count in file
|
||||||
$line_count = count(file($absolute_path));
|
$line_count = count(file($absolute_path));
|
||||||
|
|
||||||
$coverage = "";
|
$coverage = '';
|
||||||
$start_line = 1;
|
$start_line = 1;
|
||||||
$lines = $class->getElementsByTagName("line");
|
$lines = $class->getElementsByTagName('line');
|
||||||
for ($ii = 0; $ii < $lines->length; $ii++) {
|
for ($ii = 0; $ii < $lines->length; $ii++) {
|
||||||
$line = $lines->item($ii);
|
$line = $lines->item($ii);
|
||||||
|
|
||||||
$next_line = intval($line->getAttribute("number"));
|
$next_line = intval($line->getAttribute('number'));
|
||||||
for ($start_line; $start_line < $next_line; $start_line++) {
|
for ($start_line; $start_line < $next_line; $start_line++) {
|
||||||
$coverage .= "N";
|
$coverage .= 'N';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (intval($line->getAttribute("hits")) == 0) {
|
if (intval($line->getAttribute('hits')) == 0) {
|
||||||
$coverage .= "U";
|
$coverage .= 'U';
|
||||||
}
|
}
|
||||||
else if (intval($line->getAttribute("hits")) > 0) {
|
else if (intval($line->getAttribute('hits')) > 0) {
|
||||||
$coverage .= "C";
|
$coverage .= 'C';
|
||||||
}
|
}
|
||||||
|
|
||||||
$start_line++;
|
$start_line++;
|
||||||
|
@ -123,7 +123,7 @@ final class PytestTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
|
|
||||||
if ($start_line < $line_count) {
|
if ($start_line < $line_count) {
|
||||||
foreach (range($start_line, $line_count) as $line_num) {
|
foreach (range($start_line, $line_count) as $line_num) {
|
||||||
$coverage .= "N";
|
$coverage .= 'N';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,21 +38,21 @@ class XUnitTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
$this->projectRoot = $this->getWorkingCopy()->getProjectRoot();
|
$this->projectRoot = $this->getWorkingCopy()->getProjectRoot();
|
||||||
|
|
||||||
// Determine build engine.
|
// Determine build engine.
|
||||||
if (Filesystem::binaryExists("msbuild")) {
|
if (Filesystem::binaryExists('msbuild')) {
|
||||||
$this->buildEngine = "msbuild";
|
$this->buildEngine = 'msbuild';
|
||||||
} else if (Filesystem::binaryExists("xbuild")) {
|
} else if (Filesystem::binaryExists('xbuild')) {
|
||||||
$this->buildEngine = "xbuild";
|
$this->buildEngine = 'xbuild';
|
||||||
} else {
|
} else {
|
||||||
throw new Exception("Unable to find msbuild or xbuild in PATH!");
|
throw new Exception('Unable to find msbuild or xbuild in PATH!');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine runtime engine (.NET or Mono).
|
// Determine runtime engine (.NET or Mono).
|
||||||
if (phutil_is_windows()) {
|
if (phutil_is_windows()) {
|
||||||
$this->runtimeEngine = "";
|
$this->runtimeEngine = '';
|
||||||
} else if (Filesystem::binaryExists("mono")) {
|
} else if (Filesystem::binaryExists('mono')) {
|
||||||
$this->runtimeEngine = Filesystem::resolveBinary("mono");
|
$this->runtimeEngine = Filesystem::resolveBinary('mono');
|
||||||
} else {
|
} else {
|
||||||
throw new Exception("Unable to find Mono and you are not on Windows!");
|
throw new Exception('Unable to find Mono and you are not on Windows!');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the discovery rules.
|
// Read the discovery rules.
|
||||||
|
@ -61,8 +61,8 @@ class XUnitTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
'unit.csharp.discovery');
|
'unit.csharp.discovery');
|
||||||
if ($this->discoveryRules === null) {
|
if ($this->discoveryRules === null) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"You must configure discovery rules to map C# files ".
|
'You must configure discovery rules to map C# files '.
|
||||||
"back to test projects (`unit.csharp.discovery` in .arcconfig).");
|
'back to test projects (`unit.csharp.discovery` in .arcconfig).');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine xUnit test runner path.
|
// Determine xUnit test runner path.
|
||||||
|
@ -74,8 +74,8 @@ class XUnitTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
$xunit = $this->projectRoot.DIRECTORY_SEPARATOR.$this->xunitHintPath;
|
$xunit = $this->projectRoot.DIRECTORY_SEPARATOR.$this->xunitHintPath;
|
||||||
if (file_exists($xunit) && $this->xunitHintPath !== null) {
|
if (file_exists($xunit) && $this->xunitHintPath !== null) {
|
||||||
$this->testEngine = Filesystem::resolvePath($xunit);
|
$this->testEngine = Filesystem::resolvePath($xunit);
|
||||||
} else if (Filesystem::binaryExists("xunit.console.clr4.exe")) {
|
} else if (Filesystem::binaryExists('xunit.console.clr4.exe')) {
|
||||||
$this->testEngine = "xunit.console.clr4.exe";
|
$this->testEngine = 'xunit.console.clr4.exe';
|
||||||
} else {
|
} else {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"Unable to locate xUnit console runner. Configure ".
|
"Unable to locate xUnit console runner. Configure ".
|
||||||
|
@ -204,23 +204,23 @@ class XUnitTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
private function generateProjects() {
|
private function generateProjects() {
|
||||||
|
|
||||||
// No "Build" directory; so skip generation of projects.
|
// No "Build" directory; so skip generation of projects.
|
||||||
if (!is_dir(Filesystem::resolvePath($this->projectRoot."/Build"))) {
|
if (!is_dir(Filesystem::resolvePath($this->projectRoot.'/Build'))) {
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
// No "Protobuild.exe" file; so skip generation of projects.
|
// No "Protobuild.exe" file; so skip generation of projects.
|
||||||
if (!is_file(Filesystem::resolvePath(
|
if (!is_file(Filesystem::resolvePath(
|
||||||
$this->projectRoot."/Protobuild.exe"))) {
|
$this->projectRoot.'/Protobuild.exe'))) {
|
||||||
|
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Work out what platform the user is building for already.
|
// Work out what platform the user is building for already.
|
||||||
$platform = phutil_is_windows() ? "Windows" : "Linux";
|
$platform = phutil_is_windows() ? 'Windows' : 'Linux';
|
||||||
$files = Filesystem::listDirectory($this->projectRoot);
|
$files = Filesystem::listDirectory($this->projectRoot);
|
||||||
foreach ($files as $file) {
|
foreach ($files as $file) {
|
||||||
if (strtolower(substr($file, -4)) == ".sln") {
|
if (strtolower(substr($file, -4)) == '.sln') {
|
||||||
$parts = explode(".", $file);
|
$parts = explode('.', $file);
|
||||||
$platform = $parts[count($parts) - 2];
|
$platform = $parts[count($parts) - 2];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -228,7 +228,7 @@ class XUnitTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
|
|
||||||
$regenerate_start = microtime(true);
|
$regenerate_start = microtime(true);
|
||||||
$regenerate_future = new ExecFuture(
|
$regenerate_future = new ExecFuture(
|
||||||
"%C Protobuild.exe --resync %s",
|
'%C Protobuild.exe --resync %s',
|
||||||
$this->runtimeEngine,
|
$this->runtimeEngine,
|
||||||
$platform);
|
$platform);
|
||||||
$regenerate_future->setCWD(Filesystem::resolvePath(
|
$regenerate_future->setCWD(Filesystem::resolvePath(
|
||||||
|
@ -271,9 +271,9 @@ class XUnitTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
$results = array();
|
$results = array();
|
||||||
foreach ($test_assemblies as $test_assembly) {
|
foreach ($test_assemblies as $test_assembly) {
|
||||||
$build_future = new ExecFuture(
|
$build_future = new ExecFuture(
|
||||||
"%C %s",
|
'%C %s',
|
||||||
$this->buildEngine,
|
$this->buildEngine,
|
||||||
"/p:SkipTestsOnBuild=True");
|
'/p:SkipTestsOnBuild=True');
|
||||||
$build_future->setCWD(Filesystem::resolvePath(
|
$build_future->setCWD(Filesystem::resolvePath(
|
||||||
dirname($test_assembly['project'])));
|
dirname($test_assembly['project'])));
|
||||||
$build_futures[$test_assembly['project']] = $build_future;
|
$build_futures[$test_assembly['project']] = $build_future;
|
||||||
|
@ -281,7 +281,7 @@ class XUnitTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
$iterator = Futures($build_futures)->limit(1);
|
$iterator = Futures($build_futures)->limit(1);
|
||||||
foreach ($iterator as $test_assembly => $future) {
|
foreach ($iterator as $test_assembly => $future) {
|
||||||
$result = new ArcanistUnitTestResult();
|
$result = new ArcanistUnitTestResult();
|
||||||
$result->setName("(build) ".$test_assembly);
|
$result->setName('(build) '.$test_assembly);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$future->resolvex();
|
$future->resolvex();
|
||||||
|
@ -314,20 +314,20 @@ class XUnitTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
// FIXME: Can't use TempFile here as xUnit doesn't like
|
// FIXME: Can't use TempFile here as xUnit doesn't like
|
||||||
// UNIX-style full paths. It sees the leading / as the
|
// UNIX-style full paths. It sees the leading / as the
|
||||||
// start of an option flag, even when quoted.
|
// start of an option flag, even when quoted.
|
||||||
$xunit_temp = Filesystem::readRandomCharacters(10).".results.xml";
|
$xunit_temp = Filesystem::readRandomCharacters(10).'.results.xml';
|
||||||
if (file_exists($xunit_temp)) {
|
if (file_exists($xunit_temp)) {
|
||||||
unlink($xunit_temp);
|
unlink($xunit_temp);
|
||||||
}
|
}
|
||||||
$future = new ExecFuture(
|
$future = new ExecFuture(
|
||||||
"%C %s /xml %s",
|
'%C %s /xml %s',
|
||||||
trim($this->runtimeEngine." ".$this->testEngine),
|
trim($this->runtimeEngine.' '.$this->testEngine),
|
||||||
$test_assembly,
|
$test_assembly,
|
||||||
$xunit_temp);
|
$xunit_temp);
|
||||||
$folder = Filesystem::resolvePath($this->projectRoot);
|
$folder = Filesystem::resolvePath($this->projectRoot);
|
||||||
$future->setCWD($folder);
|
$future->setCWD($folder);
|
||||||
$combined = $folder."/".$xunit_temp;
|
$combined = $folder.'/'.$xunit_temp;
|
||||||
if (phutil_is_windows()) {
|
if (phutil_is_windows()) {
|
||||||
$combined = $folder."\\".$xunit_temp;
|
$combined = $folder.'\\'.$xunit_temp;
|
||||||
}
|
}
|
||||||
return array($future, $combined, null);
|
return array($future, $combined, null);
|
||||||
}
|
}
|
||||||
|
@ -408,32 +408,32 @@ class XUnitTestEngine extends ArcanistBaseUnitTestEngine {
|
||||||
$xunit_dom->loadXML(Filesystem::readFile($xunit_tmp));
|
$xunit_dom->loadXML(Filesystem::readFile($xunit_tmp));
|
||||||
|
|
||||||
$results = array();
|
$results = array();
|
||||||
$tests = $xunit_dom->getElementsByTagName("test");
|
$tests = $xunit_dom->getElementsByTagName('test');
|
||||||
foreach ($tests as $test) {
|
foreach ($tests as $test) {
|
||||||
$name = $test->getAttribute("name");
|
$name = $test->getAttribute('name');
|
||||||
$time = $test->getAttribute("time");
|
$time = $test->getAttribute('time');
|
||||||
$status = ArcanistUnitTestResult::RESULT_UNSOUND;
|
$status = ArcanistUnitTestResult::RESULT_UNSOUND;
|
||||||
switch ($test->getAttribute("result")) {
|
switch ($test->getAttribute('result')) {
|
||||||
case "Pass":
|
case 'Pass':
|
||||||
$status = ArcanistUnitTestResult::RESULT_PASS;
|
$status = ArcanistUnitTestResult::RESULT_PASS;
|
||||||
break;
|
break;
|
||||||
case "Fail":
|
case 'Fail':
|
||||||
$status = ArcanistUnitTestResult::RESULT_FAIL;
|
$status = ArcanistUnitTestResult::RESULT_FAIL;
|
||||||
break;
|
break;
|
||||||
case "Skip":
|
case 'Skip':
|
||||||
$status = ArcanistUnitTestResult::RESULT_SKIP;
|
$status = ArcanistUnitTestResult::RESULT_SKIP;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$userdata = "";
|
$userdata = '';
|
||||||
$reason = $test->getElementsByTagName("reason");
|
$reason = $test->getElementsByTagName('reason');
|
||||||
$failure = $test->getElementsByTagName("failure");
|
$failure = $test->getElementsByTagName('failure');
|
||||||
if ($reason->length > 0 || $failure->length > 0) {
|
if ($reason->length > 0 || $failure->length > 0) {
|
||||||
$node = ($reason->length > 0) ? $reason : $failure;
|
$node = ($reason->length > 0) ? $reason : $failure;
|
||||||
$message = $node->item(0)->getElementsByTagName("message");
|
$message = $node->item(0)->getElementsByTagName('message');
|
||||||
if ($message->length > 0) {
|
if ($message->length > 0) {
|
||||||
$userdata = $message->item(0)->nodeValue;
|
$userdata = $message->item(0)->nodeValue;
|
||||||
}
|
}
|
||||||
$stacktrace = $node->item(0)->getElementsByTagName("stack-trace");
|
$stacktrace = $node->item(0)->getElementsByTagName('stack-trace');
|
||||||
if ($stacktrace->length > 0) {
|
if ($stacktrace->length > 0) {
|
||||||
$userdata .= "\n".$stacktrace->item(0)->nodeValue;
|
$userdata .= "\n".$stacktrace->item(0)->nodeValue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ final class GoTestResultParserTestCase extends ArcanistTestCase {
|
||||||
|
|
||||||
$this->assertEqual(2, count($parsed_results));
|
$this->assertEqual(2, count($parsed_results));
|
||||||
$this->assertEqual(
|
$this->assertEqual(
|
||||||
"Go::Test::package::subpackage::TestFoo",
|
'Go::Test::package::subpackage::TestFoo',
|
||||||
$parsed_results[0]->getName());
|
$parsed_results[0]->getName());
|
||||||
foreach ($parsed_results as $result) {
|
foreach ($parsed_results as $result) {
|
||||||
$this->assertEqual(
|
$this->assertEqual(
|
||||||
|
@ -53,10 +53,10 @@ final class GoTestResultParserTestCase extends ArcanistTestCase {
|
||||||
|
|
||||||
$this->assertEqual(3, count($parsed_results));
|
$this->assertEqual(3, count($parsed_results));
|
||||||
$this->assertEqual(
|
$this->assertEqual(
|
||||||
"Go::Test::package::subpackage1::TestFoo1",
|
'Go::Test::package::subpackage1::TestFoo1',
|
||||||
$parsed_results[0]->getName());
|
$parsed_results[0]->getName());
|
||||||
$this->assertEqual(
|
$this->assertEqual(
|
||||||
"Go::Test::package::subpackage2::TestFoo2",
|
'Go::Test::package::subpackage2::TestFoo2',
|
||||||
$parsed_results[2]->getName());
|
$parsed_results[2]->getName());
|
||||||
foreach ($parsed_results as $result) {
|
foreach ($parsed_results as $result) {
|
||||||
$this->assertEqual(
|
$this->assertEqual(
|
||||||
|
@ -74,10 +74,10 @@ final class GoTestResultParserTestCase extends ArcanistTestCase {
|
||||||
|
|
||||||
$this->assertEqual(3, count($parsed_results));
|
$this->assertEqual(3, count($parsed_results));
|
||||||
$this->assertEqual(
|
$this->assertEqual(
|
||||||
"Go::Test::package::subpackage1::TestFoo1",
|
'Go::Test::package::subpackage1::TestFoo1',
|
||||||
$parsed_results[0]->getName());
|
$parsed_results[0]->getName());
|
||||||
$this->assertEqual(
|
$this->assertEqual(
|
||||||
"Go::Test::package::subpackage2::TestFoo2",
|
'Go::Test::package::subpackage2::TestFoo2',
|
||||||
$parsed_results[2]->getName());
|
$parsed_results[2]->getName());
|
||||||
$this->assertEqual(
|
$this->assertEqual(
|
||||||
ArcanistUnitTestResult::RESULT_PASS,
|
ArcanistUnitTestResult::RESULT_PASS,
|
||||||
|
@ -96,10 +96,10 @@ final class GoTestResultParserTestCase extends ArcanistTestCase {
|
||||||
|
|
||||||
$this->assertEqual(2, count($parsed_results));
|
$this->assertEqual(2, count($parsed_results));
|
||||||
$this->assertEqual(
|
$this->assertEqual(
|
||||||
"Go::TestCase::package::subpackage1",
|
'Go::TestCase::package::subpackage1',
|
||||||
$parsed_results[0]->getName());
|
$parsed_results[0]->getName());
|
||||||
$this->assertEqual(
|
$this->assertEqual(
|
||||||
"Go::TestCase::package::subpackage2",
|
'Go::TestCase::package::subpackage2',
|
||||||
$parsed_results[1]->getName());
|
$parsed_results[1]->getName());
|
||||||
foreach ($parsed_results as $result) {
|
foreach ($parsed_results as $result) {
|
||||||
$this->assertEqual(
|
$this->assertEqual(
|
||||||
|
|
|
@ -43,7 +43,7 @@ final class PhutilUnitTestEngineTestCase extends ArcanistTestCase {
|
||||||
public function __destruct() {
|
public function __destruct() {
|
||||||
if (self::$allTestsCounter !== 0) {
|
if (self::$allTestsCounter !== 0) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"didRunTests() was not called correctly after tests completed!");
|
'didRunTests() was not called correctly after tests completed!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ final class PhutilUnitTestEngineTestCase extends ArcanistTestCase {
|
||||||
|
|
||||||
protected function throwIfFalsey($input) {
|
protected function throwIfFalsey($input) {
|
||||||
if (!$input) {
|
if (!$input) {
|
||||||
throw new Exception("This is a negative test case!");
|
throw new Exception('This is a negative test case!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,13 +97,13 @@ abstract class ArcanistPhutilTestCase {
|
||||||
|
|
||||||
if ($message !== null) {
|
if ($message !== null) {
|
||||||
$output = pht(
|
$output = pht(
|
||||||
"Assertion failed, expected values to be equal (at %s:%d): %s",
|
'Assertion failed, expected values to be equal (at %s:%d): %s',
|
||||||
$file,
|
$file,
|
||||||
$line,
|
$line,
|
||||||
$message);
|
$message);
|
||||||
} else {
|
} else {
|
||||||
$output = pht(
|
$output = pht(
|
||||||
"Assertion failed, expected values to be equal (at %s:%d).",
|
'Assertion failed, expected values to be equal (at %s:%d).',
|
||||||
$file,
|
$file,
|
||||||
$line);
|
$line);
|
||||||
}
|
}
|
||||||
|
@ -216,7 +216,7 @@ abstract class ArcanistPhutilTestCase {
|
||||||
|
|
||||||
if (count($inputs) !== count($expect)) {
|
if (count($inputs) !== count($expect)) {
|
||||||
$this->assertFailure(
|
$this->assertFailure(
|
||||||
"Input and expectations must have the same number of values.");
|
'Input and expectations must have the same number of values.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$labels = array_keys($inputs);
|
$labels = array_keys($inputs);
|
||||||
|
@ -500,7 +500,7 @@ abstract class ArcanistPhutilTestCase {
|
||||||
throw head($exceptions);
|
throw head($exceptions);
|
||||||
} else {
|
} else {
|
||||||
throw new PhutilAggregateException(
|
throw new PhutilAggregateException(
|
||||||
"Multiple exceptions were raised during test execution.",
|
'Multiple exceptions were raised during test execution.',
|
||||||
$exceptions);
|
$exceptions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@ final class ArcanistUnitConsoleRenderer extends ArcanistUnitRenderer {
|
||||||
$star = "\xE2\x98\x85";
|
$star = "\xE2\x98\x85";
|
||||||
if (phutil_is_windows()) {
|
if (phutil_is_windows()) {
|
||||||
// Fall-back to normal asterisk for Windows consoles.
|
// Fall-back to normal asterisk for Windows consoles.
|
||||||
$star = "*";
|
$star = '*';
|
||||||
}
|
}
|
||||||
$acceptableness = array(
|
$acceptableness = array(
|
||||||
50 => "<fg:green>%s</fg><fg:yellow>{$star}</fg> ",
|
50 => "<fg:green>%s</fg><fg:yellow>{$star}</fg> ",
|
||||||
|
|
|
@ -73,15 +73,15 @@ EOTEXT
|
||||||
|
|
||||||
if ($this->isHistoryImmutable()) {
|
if ($this->isHistoryImmutable()) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"This project is marked as adhering to a conservative history ".
|
'This project is marked as adhering to a conservative history '.
|
||||||
"mutability doctrine (having an immutable local history), which ".
|
'mutability doctrine (having an immutable local history), which '.
|
||||||
"precludes amending commit messages.");
|
'precludes amending commit messages.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($repository_api->getUncommittedChanges()) {
|
if ($repository_api->getUncommittedChanges()) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"You have uncommitted changes in this branch. Stage and commit (or ".
|
'You have uncommitted changes in this branch. Stage and commit (or '.
|
||||||
"revert) them before proceeding.");
|
'revert) them before proceeding.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -62,12 +62,12 @@ EOTEXT
|
||||||
'The revision you provided does not exist!');
|
'The revision you provided does not exist!');
|
||||||
}
|
}
|
||||||
$revision = $revisions[0];
|
$revision = $revisions[0];
|
||||||
$commits = $revision["commits"];
|
$commits = $revision['commits'];
|
||||||
if (!$commits) {
|
if (!$commits) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
'This revision has not been committed yet!');
|
'This revision has not been committed yet!');
|
||||||
}
|
}
|
||||||
elseif (count($commits) > 1) {
|
else if (count($commits) > 1) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
'The revision you provided has multiple commits!');
|
'The revision you provided has multiple commits!');
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ EOTEXT
|
||||||
array(
|
array(
|
||||||
'phids' => array($commit_phid),
|
'phids' => array($commit_phid),
|
||||||
));
|
));
|
||||||
$commit_id = $commit[$commit_phid]["name"];
|
$commit_id = $commit[$commit_phid]['name'];
|
||||||
return $commit_id;
|
return $commit_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ EOTEXT
|
||||||
));
|
));
|
||||||
$commit = $result[$commit_id];
|
$commit = $result[$commit_id];
|
||||||
// This commit was not found in Diffusion
|
// This commit was not found in Diffusion
|
||||||
if (array_key_exists("error", $commit)) {
|
if (array_key_exists('error', $commit)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return $commit;
|
return $commit;
|
||||||
|
|
|
@ -139,7 +139,7 @@ abstract class ArcanistBaseWorkflow extends Phobject {
|
||||||
final public function setConduitURI($conduit_uri) {
|
final public function setConduitURI($conduit_uri) {
|
||||||
if ($this->conduit) {
|
if ($this->conduit) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"You can not change the Conduit URI after a conduit is already open.");
|
'You can not change the Conduit URI after a conduit is already open.');
|
||||||
}
|
}
|
||||||
$this->conduitURI = $conduit_uri;
|
$this->conduitURI = $conduit_uri;
|
||||||
return $this;
|
return $this;
|
||||||
|
@ -176,8 +176,8 @@ abstract class ArcanistBaseWorkflow extends Phobject {
|
||||||
|
|
||||||
if (!$this->conduitURI) {
|
if (!$this->conduitURI) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"You must specify a Conduit URI with setConduitURI() before you can ".
|
'You must specify a Conduit URI with setConduitURI() before you can '.
|
||||||
"establish a conduit.");
|
'establish a conduit.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->conduit = new ConduitClient($this->conduitURI);
|
$this->conduit = new ConduitClient($this->conduitURI);
|
||||||
|
@ -222,7 +222,7 @@ abstract class ArcanistBaseWorkflow extends Phobject {
|
||||||
final public function setConduitCredentials(array $credentials) {
|
final public function setConduitCredentials(array $credentials) {
|
||||||
if ($this->isConduitAuthenticated()) {
|
if ($this->isConduitAuthenticated()) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"You may not set new credentials after authenticating conduit.");
|
'You may not set new credentials after authenticating conduit.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->conduitCredentials = $credentials;
|
$this->conduitCredentials = $credentials;
|
||||||
|
@ -315,8 +315,8 @@ abstract class ArcanistBaseWorkflow extends Phobject {
|
||||||
try {
|
try {
|
||||||
if (!$credentials) {
|
if (!$credentials) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"Set conduit credentials with setConduitCredentials() before ".
|
'Set conduit credentials with setConduitCredentials() before '.
|
||||||
"authenticating conduit!");
|
'authenticating conduit!');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($credentials['user'])) {
|
if (empty($credentials['user'])) {
|
||||||
|
@ -349,10 +349,10 @@ abstract class ArcanistBaseWorkflow extends Phobject {
|
||||||
$message =
|
$message =
|
||||||
"\n".
|
"\n".
|
||||||
phutil_console_format(
|
phutil_console_format(
|
||||||
"YOU NEED TO __INSTALL A CERTIFICATE__ TO LOGIN TO PHABRICATOR").
|
'YOU NEED TO __INSTALL A CERTIFICATE__ TO LOGIN TO PHABRICATOR').
|
||||||
"\n\n".
|
"\n\n".
|
||||||
phutil_console_format(
|
phutil_console_format(
|
||||||
" To do this, run: **arc install-certificate**").
|
' To do this, run: **arc install-certificate**').
|
||||||
"\n\n".
|
"\n\n".
|
||||||
"The server '{$conduit_uri}' rejected your request:".
|
"The server '{$conduit_uri}' rejected your request:".
|
||||||
"\n".
|
"\n".
|
||||||
|
@ -368,7 +368,7 @@ abstract class ArcanistBaseWorkflow extends Phobject {
|
||||||
echo "In most cases, arc can be upgraded automatically.\n";
|
echo "In most cases, arc can be upgraded automatically.\n";
|
||||||
|
|
||||||
$ok = phutil_console_confirm(
|
$ok = phutil_console_confirm(
|
||||||
"Upgrade arc now?",
|
'Upgrade arc now?',
|
||||||
$default_no = false);
|
$default_no = false);
|
||||||
if (!$ok) {
|
if (!$ok) {
|
||||||
throw $ex;
|
throw $ex;
|
||||||
|
@ -897,7 +897,7 @@ abstract class ArcanistBaseWorkflow extends Phobject {
|
||||||
$this->stashed = true;
|
$this->stashed = true;
|
||||||
} else {
|
} else {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"Stage and commit (or revert) them before proceeding.");
|
'Stage and commit (or revert) them before proceeding.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -917,7 +917,7 @@ abstract class ArcanistBaseWorkflow extends Phobject {
|
||||||
$must_commit += array_flip($uncommitted);
|
$must_commit += array_flip($uncommitted);
|
||||||
} else {
|
} else {
|
||||||
throw new ArcanistUncommittedChangesException(
|
throw new ArcanistUncommittedChangesException(
|
||||||
"Commit (or revert) them before proceeding.");
|
'Commit (or revert) them before proceeding.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -926,7 +926,7 @@ abstract class ArcanistBaseWorkflow extends Phobject {
|
||||||
$commit = head($api->getLocalCommitInformation());
|
$commit = head($api->getLocalCommitInformation());
|
||||||
$api->amendCommit($commit['message']);
|
$api->amendCommit($commit['message']);
|
||||||
} else if ($api->supportsLocalCommits()) {
|
} else if ($api->supportsLocalCommits()) {
|
||||||
$commit_message = phutil_console_prompt("Enter commit message:");
|
$commit_message = phutil_console_prompt('Enter commit message:');
|
||||||
if ($commit_message == '') {
|
if ($commit_message == '') {
|
||||||
$commit_message = self::AUTO_COMMIT_TITLE;
|
$commit_message = self::AUTO_COMMIT_TITLE;
|
||||||
}
|
}
|
||||||
|
@ -1116,7 +1116,7 @@ abstract class ArcanistBaseWorkflow extends Phobject {
|
||||||
$parser = $this->newDiffParser();
|
$parser = $this->newDiffParser();
|
||||||
$changes = $parser->parseDiff($diff);
|
$changes = $parser->parseDiff($diff);
|
||||||
if (count($changes) != 1) {
|
if (count($changes) != 1) {
|
||||||
throw new Exception("Expected exactly one change.");
|
throw new Exception('Expected exactly one change.');
|
||||||
}
|
}
|
||||||
$this->changeCache[$path] = reset($changes);
|
$this->changeCache[$path] = reset($changes);
|
||||||
}
|
}
|
||||||
|
@ -1128,7 +1128,7 @@ abstract class ArcanistBaseWorkflow extends Phobject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new Exception("Missing VCS support.");
|
throw new Exception('Missing VCS support.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($this->changeCache[$path])) {
|
if (empty($this->changeCache[$path])) {
|
||||||
|
@ -1516,13 +1516,13 @@ abstract class ArcanistBaseWorkflow extends Phobject {
|
||||||
$api = $this->getRepositoryAPI();
|
$api = $this->getRepositoryAPI();
|
||||||
if (!$api->supportsCommitRanges()) {
|
if (!$api->supportsCommitRanges()) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"This version control system does not support commit ranges.");
|
'This version control system does not support commit ranges.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count($argv) > 1) {
|
if (count($argv) > 1) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"Specify exactly one base commit. The end of the commit range is ".
|
'Specify exactly one base commit. The end of the commit range is '.
|
||||||
"always the working copy state.");
|
'always the working copy state.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$api->setBaseCommit(head($argv));
|
$api->setBaseCommit(head($argv));
|
||||||
|
|
|
@ -58,7 +58,7 @@ EOTEXT
|
||||||
$method = $this->getArgument('method', array());
|
$method = $this->getArgument('method', array());
|
||||||
if (count($method) !== 1) {
|
if (count($method) !== 1) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"Provide exactly one Conduit method name.");
|
'Provide exactly one Conduit method name.');
|
||||||
}
|
}
|
||||||
$method = reset($method);
|
$method = reset($method);
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ EOTEXT
|
||||||
$params = json_decode($params, true);
|
$params = json_decode($params, true);
|
||||||
if (!is_array($params)) {
|
if (!is_array($params)) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"Provide method parameters on stdin as a JSON blob.");
|
'Provide method parameters on stdin as a JSON blob.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$error = null;
|
$error = null;
|
||||||
|
|
|
@ -70,11 +70,11 @@ EOTEXT
|
||||||
$revision_list = $this->getArgument('revision', array());
|
$revision_list = $this->getArgument('revision', array());
|
||||||
if (!$revision_list) {
|
if (!$revision_list) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"close-revision requires a revision number.");
|
'close-revision requires a revision number.');
|
||||||
}
|
}
|
||||||
if (count($revision_list) != 1) {
|
if (count($revision_list) != 1) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"close-revision requires exactly one revision.");
|
'close-revision requires exactly one revision.');
|
||||||
}
|
}
|
||||||
$revision_id = reset($revision_list);
|
$revision_id = reset($revision_list);
|
||||||
$revision_id = $this->normalizeRevisionID($revision_id);
|
$revision_id = $this->normalizeRevisionID($revision_id);
|
||||||
|
|
|
@ -109,7 +109,7 @@ EOTEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($ids as $id) {
|
foreach ($ids as $id) {
|
||||||
if (!preg_match("/^T?\d+$/", $id)) {
|
if (!preg_match('/^T?\d+$/', $id)) {
|
||||||
echo "Invalid Task ID: {$id}.\n";
|
echo "Invalid Task ID: {$id}.\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -125,7 +125,7 @@ EOTEXT
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function closeTask($task_id, $status, $comment = "") {
|
private function closeTask($task_id, $status, $comment = '') {
|
||||||
$conduit = $this->getConduit();
|
$conduit = $this->getConduit();
|
||||||
$info = $conduit->callMethodSynchronous(
|
$info = $conduit->callMethodSynchronous(
|
||||||
'maniphest.info',
|
'maniphest.info',
|
||||||
|
|
|
@ -52,14 +52,14 @@ EOTEXT
|
||||||
return array(
|
return array(
|
||||||
'show' => array(
|
'show' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Show the command which would be issued, but do not actually ".
|
'Show the command which would be issued, but do not actually '.
|
||||||
"commit anything."
|
'commit anything.'
|
||||||
),
|
),
|
||||||
'revision' => array(
|
'revision' => array(
|
||||||
'param' => 'revision_id',
|
'param' => 'revision_id',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Commit a specific revision. If you do not specify a revision, ".
|
'Commit a specific revision. If you do not specify a revision, '.
|
||||||
"arc will look for committable revisions.",
|
'arc will look for committable revisions.',
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -246,7 +246,7 @@ EOTEXT
|
||||||
$prefix = pht(
|
$prefix = pht(
|
||||||
'Revision includes changes to path(s) that do not exist:',
|
'Revision includes changes to path(s) that do not exist:',
|
||||||
count($do_not_exist));
|
count($do_not_exist));
|
||||||
$prompt = "Commit this revision anyway?";
|
$prompt = 'Commit this revision anyway?';
|
||||||
$this->promptFileWarning($prefix, $prompt, $do_not_exist);
|
$this->promptFileWarning($prefix, $prompt, $do_not_exist);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,7 +255,7 @@ EOTEXT
|
||||||
|
|
||||||
if (empty($files)) {
|
if (empty($files)) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"There is nothing left to commit. None of the modified paths exist.");
|
'There is nothing left to commit. None of the modified paths exist.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $files;
|
return $files;
|
||||||
|
|
|
@ -39,7 +39,7 @@ EOTEXT
|
||||||
'hg',
|
'hg',
|
||||||
),
|
),
|
||||||
'nosupport' => array(
|
'nosupport' => array(
|
||||||
'svn' => "cover does not currently support --rev in svn.",
|
'svn' => 'cover does not currently support --rev in svn.',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'*' => 'paths',
|
'*' => 'paths',
|
||||||
|
|
|
@ -86,8 +86,8 @@ EOTEXT
|
||||||
'short' => 'm',
|
'short' => 'm',
|
||||||
'param' => 'message',
|
'param' => 'message',
|
||||||
'help' =>
|
'help' =>
|
||||||
"When updating a revision, use the specified message instead of ".
|
'When updating a revision, use the specified message instead of '.
|
||||||
"prompting.",
|
'prompting.',
|
||||||
),
|
),
|
||||||
'message-file' => array(
|
'message-file' => array(
|
||||||
'short' => 'F',
|
'short' => 'F',
|
||||||
|
@ -119,14 +119,14 @@ EOTEXT
|
||||||
'svn' => 'Edit revisions via the web interface when using SVN.',
|
'svn' => 'Edit revisions via the web interface when using SVN.',
|
||||||
),
|
),
|
||||||
'help' =>
|
'help' =>
|
||||||
"When updating a revision under git, edit revision information ".
|
'When updating a revision under git, edit revision information '.
|
||||||
"before updating.",
|
'before updating.',
|
||||||
),
|
),
|
||||||
'raw' => array(
|
'raw' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Read diff from stdin, not from the working copy. This disables ".
|
'Read diff from stdin, not from the working copy. This disables '.
|
||||||
"many Arcanist/Phabricator features which depend on having access ".
|
'many Arcanist/Phabricator features which depend on having access '.
|
||||||
"to the working copy.",
|
'to the working copy.',
|
||||||
'conflicts' => array(
|
'conflicts' => array(
|
||||||
'less-context' => null,
|
'less-context' => null,
|
||||||
'apply-patches' => '--raw disables lint.',
|
'apply-patches' => '--raw disables lint.',
|
||||||
|
@ -144,9 +144,9 @@ EOTEXT
|
||||||
'raw-command' => array(
|
'raw-command' => array(
|
||||||
'param' => 'command',
|
'param' => 'command',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Generate diff by executing a specified command, not from the ".
|
'Generate diff by executing a specified command, not from the '.
|
||||||
"working copy. This disables many Arcanist/Phabricator features ".
|
'working copy. This disables many Arcanist/Phabricator features '.
|
||||||
"which depend on having access to the working copy.",
|
'which depend on having access to the working copy.',
|
||||||
'conflicts' => array(
|
'conflicts' => array(
|
||||||
'less-context' => null,
|
'less-context' => null,
|
||||||
'apply-patches' => '--raw-command disables lint.',
|
'apply-patches' => '--raw-command disables lint.',
|
||||||
|
@ -156,7 +156,7 @@ EOTEXT
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'create' => array(
|
'create' => array(
|
||||||
'help' => "Always create a new revision.",
|
'help' => 'Always create a new revision.',
|
||||||
'conflicts' => array(
|
'conflicts' => array(
|
||||||
'edit' => '--create can not be used with --edit.',
|
'edit' => '--create can not be used with --edit.',
|
||||||
'only' => '--create can not be used with --only.',
|
'only' => '--create can not be used with --only.',
|
||||||
|
@ -166,15 +166,15 @@ EOTEXT
|
||||||
),
|
),
|
||||||
'update' => array(
|
'update' => array(
|
||||||
'param' => 'revision_id',
|
'param' => 'revision_id',
|
||||||
'help' => "Always update a specific revision.",
|
'help' => 'Always update a specific revision.',
|
||||||
),
|
),
|
||||||
'nounit' => array(
|
'nounit' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Do not run unit tests.",
|
'Do not run unit tests.',
|
||||||
),
|
),
|
||||||
'nolint' => array(
|
'nolint' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Do not run lint.",
|
'Do not run lint.',
|
||||||
'conflicts' => array(
|
'conflicts' => array(
|
||||||
'lintall' => '--nolint suppresses lint.',
|
'lintall' => '--nolint suppresses lint.',
|
||||||
'advice' => '--nolint suppresses lint.',
|
'advice' => '--nolint suppresses lint.',
|
||||||
|
@ -184,8 +184,8 @@ EOTEXT
|
||||||
),
|
),
|
||||||
'only' => array(
|
'only' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Only generate a diff, without running lint, unit tests, or other ".
|
'Only generate a diff, without running lint, unit tests, or other '.
|
||||||
"auxiliary steps. See also --preview.",
|
'auxiliary steps. See also --preview.',
|
||||||
'conflicts' => array(
|
'conflicts' => array(
|
||||||
'preview' => null,
|
'preview' => null,
|
||||||
'message' => '--only does not affect revisions.',
|
'message' => '--only does not affect revisions.',
|
||||||
|
@ -198,9 +198,9 @@ EOTEXT
|
||||||
),
|
),
|
||||||
'preview' => array(
|
'preview' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Instead of creating or updating a revision, only create a diff, ".
|
'Instead of creating or updating a revision, only create a diff, '.
|
||||||
"which you may later attach to a revision. This still runs lint ".
|
'which you may later attach to a revision. This still runs lint '.
|
||||||
"unit tests. See also --only.",
|
'unit tests. See also --only.',
|
||||||
'conflicts' => array(
|
'conflicts' => array(
|
||||||
'only' => null,
|
'only' => null,
|
||||||
'edit' => '--preview does affect revisions.',
|
'edit' => '--preview does affect revisions.',
|
||||||
|
@ -209,7 +209,7 @@ EOTEXT
|
||||||
),
|
),
|
||||||
'plan-changes' => array(
|
'plan-changes' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Create or update a revision without requesting a code review.",
|
'Create or update a revision without requesting a code review.',
|
||||||
'conflicts' => array(
|
'conflicts' => array(
|
||||||
'only' => '--only does not affect revisions.',
|
'only' => '--only does not affect revisions.',
|
||||||
'preview' => '--preview does not affect revisions.',
|
'preview' => '--preview does not affect revisions.',
|
||||||
|
@ -218,11 +218,11 @@ EOTEXT
|
||||||
'encoding' => array(
|
'encoding' => array(
|
||||||
'param' => 'encoding',
|
'param' => 'encoding',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Attempt to convert non UTF-8 hunks into specified encoding.",
|
'Attempt to convert non UTF-8 hunks into specified encoding.',
|
||||||
),
|
),
|
||||||
'allow-untracked' => array(
|
'allow-untracked' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Skip checks for untracked files in the working copy.",
|
'Skip checks for untracked files in the working copy.',
|
||||||
),
|
),
|
||||||
'excuse' => array(
|
'excuse' => array(
|
||||||
'param' => 'excuse',
|
'param' => 'excuse',
|
||||||
|
@ -239,15 +239,15 @@ EOTEXT
|
||||||
),
|
),
|
||||||
'lintall' => array(
|
'lintall' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Raise all lint warnings, not just those on lines you changed.",
|
'Raise all lint warnings, not just those on lines you changed.',
|
||||||
'passthru' => array(
|
'passthru' => array(
|
||||||
'lint' => true,
|
'lint' => true,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'advice' => array(
|
'advice' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Require excuse for lint advice in addition to lint warnings and ".
|
'Require excuse for lint advice in addition to lint warnings and '.
|
||||||
"errors.",
|
'errors.',
|
||||||
),
|
),
|
||||||
'only-new' => array(
|
'only-new' => array(
|
||||||
'param' => 'bool',
|
'param' => 'bool',
|
||||||
|
@ -374,7 +374,7 @@ EOTEXT
|
||||||
),
|
),
|
||||||
'cache' => array(
|
'cache' => array(
|
||||||
'param' => 'bool',
|
'param' => 'bool',
|
||||||
'help' => "0 to disable lint cache, 1 to enable (default).",
|
'help' => '0 to disable lint cache, 1 to enable (default).',
|
||||||
'passthru' => array(
|
'passthru' => array(
|
||||||
'lint' => true,
|
'lint' => true,
|
||||||
),
|
),
|
||||||
|
@ -504,7 +504,7 @@ EOTEXT
|
||||||
$changes = $this->generateChanges();
|
$changes = $this->generateChanges();
|
||||||
if (!$changes) {
|
if (!$changes) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"There are no changes to generate a diff from!");
|
'There are no changes to generate a diff from!');
|
||||||
}
|
}
|
||||||
|
|
||||||
$diff_spec = array(
|
$diff_spec = array(
|
||||||
|
@ -584,8 +584,8 @@ EOTEXT
|
||||||
echo "Updating commit message...\n";
|
echo "Updating commit message...\n";
|
||||||
$repository_api->amendCommit($revised_message);
|
$repository_api->amendCommit($revised_message);
|
||||||
} else {
|
} else {
|
||||||
echo "Commit message was not amended. Amending commit message is ".
|
echo 'Commit message was not amended. Amending commit message is '.
|
||||||
"only supported in git and hg (version 2.2 or newer)";
|
'only supported in git and hg (version 2.2 or newer)';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -837,7 +837,7 @@ EOTEXT
|
||||||
"Modified 'svn:externals' files:".
|
"Modified 'svn:externals' files:".
|
||||||
"\n\n".
|
"\n\n".
|
||||||
phutil_console_wrap(implode("\n", $warn_externals), 8));
|
phutil_console_wrap(implode("\n", $warn_externals), 8));
|
||||||
$prompt = "Generate a diff (with just local changes) anyway?";
|
$prompt = 'Generate a diff (with just local changes) anyway?';
|
||||||
if (!phutil_console_confirm($prompt)) {
|
if (!phutil_console_confirm($prompt)) {
|
||||||
throw new ArcanistUserAbortException();
|
throw new ArcanistUserAbortException();
|
||||||
} else {
|
} else {
|
||||||
|
@ -871,7 +871,7 @@ EOTEXT
|
||||||
} else if ($this->getArgument('raw-command')) {
|
} else if ($this->getArgument('raw-command')) {
|
||||||
list($raw_diff) = execx('%C', $this->getArgument('raw-command'));
|
list($raw_diff) = execx('%C', $this->getArgument('raw-command'));
|
||||||
} else {
|
} else {
|
||||||
throw new Exception("Unknown raw diff source.");
|
throw new Exception('Unknown raw diff source.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$changes = $parser->parseDiff($raw_diff);
|
$changes = $parser->parseDiff($raw_diff);
|
||||||
|
@ -940,25 +940,25 @@ EOTEXT
|
||||||
$diff = $repository_api->getFullGitDiff();
|
$diff = $repository_api->getFullGitDiff();
|
||||||
if (!strlen($diff)) {
|
if (!strlen($diff)) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"No changes found. (Did you specify the wrong commit range?)");
|
'No changes found. (Did you specify the wrong commit range?)');
|
||||||
}
|
}
|
||||||
$changes = $parser->parseDiff($diff);
|
$changes = $parser->parseDiff($diff);
|
||||||
} else if ($repository_api instanceof ArcanistMercurialAPI) {
|
} else if ($repository_api instanceof ArcanistMercurialAPI) {
|
||||||
$diff = $repository_api->getFullMercurialDiff();
|
$diff = $repository_api->getFullMercurialDiff();
|
||||||
if (!strlen($diff)) {
|
if (!strlen($diff)) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"No changes found. (Did you specify the wrong commit range?)");
|
'No changes found. (Did you specify the wrong commit range?)');
|
||||||
}
|
}
|
||||||
$changes = $parser->parseDiff($diff);
|
$changes = $parser->parseDiff($diff);
|
||||||
} else {
|
} else {
|
||||||
throw new Exception("Repository API is not supported.");
|
throw new Exception('Repository API is not supported.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count($changes) > 250) {
|
if (count($changes) > 250) {
|
||||||
$count = number_format(count($changes));
|
$count = number_format(count($changes));
|
||||||
$link =
|
$link =
|
||||||
"http://www.phabricator.com/docs/phabricator/article/".
|
'http://www.phabricator.com/docs/phabricator/article/'.
|
||||||
"Differential_User_Guide_Large_Changes.html";
|
'Differential_User_Guide_Large_Changes.html';
|
||||||
$message =
|
$message =
|
||||||
"This diff has a very large number of changes ({$count}). ".
|
"This diff has a very large number of changes ({$count}). ".
|
||||||
"Differential works best for changes which will receive detailed ".
|
"Differential works best for changes which will receive detailed ".
|
||||||
|
@ -967,7 +967,7 @@ EOTEXT
|
||||||
"checkins. Continue anyway?";
|
"checkins. Continue anyway?";
|
||||||
if (!phutil_console_confirm($message)) {
|
if (!phutil_console_confirm($message)) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"Aborted generation of gigantic diff.");
|
'Aborted generation of gigantic diff.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1003,7 +1003,7 @@ EOTEXT
|
||||||
$change->convertToBinaryChange($repository_api);
|
$change->convertToBinaryChange($repository_api);
|
||||||
} else {
|
} else {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"Aborted generation of gigantic diff.");
|
'Aborted generation of gigantic diff.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1061,10 +1061,10 @@ EOTEXT
|
||||||
if ($utf8_problems) {
|
if ($utf8_problems) {
|
||||||
$utf8_warning =
|
$utf8_warning =
|
||||||
pht(
|
pht(
|
||||||
"This diff includes file(s) which are not valid UTF-8 (they contain ".
|
'This diff includes file(s) which are not valid UTF-8 (they contain '.
|
||||||
"invalid byte sequences). You can either stop this workflow and ".
|
'invalid byte sequences). You can either stop this workflow and '.
|
||||||
"fix these files, or continue. If you continue, these files will ".
|
'fix these files, or continue. If you continue, these files will '.
|
||||||
"be marked as binary.",
|
'be marked as binary.',
|
||||||
count($utf8_problems))."\n\n".
|
count($utf8_problems))."\n\n".
|
||||||
"You can learn more about how Phabricator handles character encodings ".
|
"You can learn more about how Phabricator handles character encodings ".
|
||||||
"(and how to configure encoding settings and detect and correct ".
|
"(and how to configure encoding settings and detect and correct ".
|
||||||
|
@ -1083,7 +1083,7 @@ EOTEXT
|
||||||
echo $file_list;
|
echo $file_list;
|
||||||
|
|
||||||
if (!phutil_console_confirm($confirm, $default_no = false)) {
|
if (!phutil_console_confirm($confirm, $default_no = false)) {
|
||||||
throw new ArcanistUsageException("Aborted workflow to fix UTF-8.");
|
throw new ArcanistUsageException('Aborted workflow to fix UTF-8.');
|
||||||
} else {
|
} else {
|
||||||
foreach ($utf8_problems as $change) {
|
foreach ($utf8_problems as $change) {
|
||||||
$change->convertToBinaryChange($repository_api);
|
$change->convertToBinaryChange($repository_api);
|
||||||
|
@ -1245,7 +1245,7 @@ EOTEXT
|
||||||
$lint_workflow->getUnresolvedMessages()) {
|
$lint_workflow->getUnresolvedMessages()) {
|
||||||
$this->getErrorExcuse(
|
$this->getErrorExcuse(
|
||||||
'lint',
|
'lint',
|
||||||
"Lint issued unresolved advice.",
|
'Lint issued unresolved advice.',
|
||||||
'lint-excuses');
|
'lint-excuses');
|
||||||
} else {
|
} else {
|
||||||
$this->console->writeOut(
|
$this->console->writeOut(
|
||||||
|
@ -1255,7 +1255,7 @@ EOTEXT
|
||||||
case ArcanistLintWorkflow::RESULT_WARNINGS:
|
case ArcanistLintWorkflow::RESULT_WARNINGS:
|
||||||
$this->getErrorExcuse(
|
$this->getErrorExcuse(
|
||||||
'lint',
|
'lint',
|
||||||
"Lint issued unresolved warnings.",
|
'Lint issued unresolved warnings.',
|
||||||
'lint-excuses');
|
'lint-excuses');
|
||||||
break;
|
break;
|
||||||
case ArcanistLintWorkflow::RESULT_ERRORS:
|
case ArcanistLintWorkflow::RESULT_ERRORS:
|
||||||
|
@ -1263,7 +1263,7 @@ EOTEXT
|
||||||
"<bg:red>** LINT ERRORS **</bg> Lint raised errors!\n");
|
"<bg:red>** LINT ERRORS **</bg> Lint raised errors!\n");
|
||||||
$this->getErrorExcuse(
|
$this->getErrorExcuse(
|
||||||
'lint',
|
'lint',
|
||||||
"Lint issued unresolved errors!",
|
'Lint issued unresolved errors!',
|
||||||
'lint-excuses');
|
'lint-excuses');
|
||||||
break;
|
break;
|
||||||
case ArcanistLintWorkflow::RESULT_POSTPONED:
|
case ArcanistLintWorkflow::RESULT_POSTPONED:
|
||||||
|
@ -1325,8 +1325,8 @@ EOTEXT
|
||||||
"but all failing tests are unsound.\n");
|
"but all failing tests are unsound.\n");
|
||||||
} else {
|
} else {
|
||||||
$continue = $this->console->confirm(
|
$continue = $this->console->confirm(
|
||||||
"Unit test results included failures, but all failing tests ".
|
'Unit test results included failures, but all failing tests '.
|
||||||
"are known to be unsound. Ignore unsound test failures?");
|
'are known to be unsound. Ignore unsound test failures?');
|
||||||
if (!$continue) {
|
if (!$continue) {
|
||||||
throw new ArcanistUserAbortException();
|
throw new ArcanistUserAbortException();
|
||||||
}
|
}
|
||||||
|
@ -1337,7 +1337,7 @@ EOTEXT
|
||||||
"<bg:red>** UNIT ERRORS **</bg> Unit testing raised errors!\n");
|
"<bg:red>** UNIT ERRORS **</bg> Unit testing raised errors!\n");
|
||||||
$this->getErrorExcuse(
|
$this->getErrorExcuse(
|
||||||
'unit',
|
'unit',
|
||||||
"Unit test results include failures!",
|
'Unit test results include failures!',
|
||||||
'unit-excuses');
|
'unit-excuses');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1387,18 +1387,18 @@ EOTEXT
|
||||||
if ($this->getArgument('excuse')) {
|
if ($this->getArgument('excuse')) {
|
||||||
$this->console->sendMessage(array(
|
$this->console->sendMessage(array(
|
||||||
'type' => $type,
|
'type' => $type,
|
||||||
'confirm' => $prompt." Ignore them?",
|
'confirm' => $prompt.' Ignore them?',
|
||||||
));
|
));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$history = $this->getRepositoryAPI()->getScratchFilePath($history);
|
$history = $this->getRepositoryAPI()->getScratchFilePath($history);
|
||||||
|
|
||||||
$prompt .= " Provide explanation to continue or press Enter to abort.";
|
$prompt .= ' Provide explanation to continue or press Enter to abort.';
|
||||||
$this->console->writeOut("\n\n%s", phutil_console_wrap($prompt));
|
$this->console->writeOut("\n\n%s", phutil_console_wrap($prompt));
|
||||||
$this->console->sendMessage(array(
|
$this->console->sendMessage(array(
|
||||||
'type' => $type,
|
'type' => $type,
|
||||||
'prompt' => "Explanation:",
|
'prompt' => 'Explanation:',
|
||||||
'history' => $history,
|
'history' => $history,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -1542,7 +1542,7 @@ EOTEXT
|
||||||
"You can use this message, or discard it.";
|
"You can use this message, or discard it.";
|
||||||
|
|
||||||
$use = phutil_console_confirm(
|
$use = phutil_console_confirm(
|
||||||
"Do you want to use this message?",
|
'Do you want to use this message?',
|
||||||
$default_no = false);
|
$default_no = false);
|
||||||
if ($use) {
|
if ($use) {
|
||||||
$template = $saved;
|
$template = $saved;
|
||||||
|
@ -1592,9 +1592,9 @@ EOTEXT
|
||||||
}
|
}
|
||||||
$included = array_merge(
|
$included = array_merge(
|
||||||
array(
|
array(
|
||||||
"",
|
'',
|
||||||
"Included commits{$in_branch}:",
|
"Included commits{$in_branch}:",
|
||||||
"",
|
'',
|
||||||
),
|
),
|
||||||
$included);
|
$included);
|
||||||
}
|
}
|
||||||
|
@ -1635,7 +1635,7 @@ EOTEXT
|
||||||
$first = false;
|
$first = false;
|
||||||
|
|
||||||
if ($template_is_default && ($new_template == $template)) {
|
if ($template_is_default && ($new_template == $template)) {
|
||||||
throw new ArcanistUsageException("Template not edited.");
|
throw new ArcanistUsageException('Template not edited.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$template = ArcanistCommentRemover::removeComments($new_template);
|
$template = ArcanistCommentRemover::removeComments($new_template);
|
||||||
|
@ -1678,9 +1678,9 @@ EOTEXT
|
||||||
$issues[] = ' - '.$error;
|
$issues[] = ' - '.$error;
|
||||||
}
|
}
|
||||||
echo "\n";
|
echo "\n";
|
||||||
echo "You must resolve these errors to continue.";
|
echo 'You must resolve these errors to continue.';
|
||||||
$again = phutil_console_confirm(
|
$again = phutil_console_confirm(
|
||||||
"Do you want to edit the message?",
|
'Do you want to edit the message?',
|
||||||
$default_no = false);
|
$default_no = false);
|
||||||
if ($again) {
|
if ($again) {
|
||||||
// Keep going.
|
// Keep going.
|
||||||
|
@ -1773,7 +1773,7 @@ EOTEXT
|
||||||
|
|
||||||
$reviewers = $message->getFieldValue('reviewerPHIDs');
|
$reviewers = $message->getFieldValue('reviewerPHIDs');
|
||||||
if (!$reviewers) {
|
if (!$reviewers) {
|
||||||
$confirm = "You have not specified any reviewers. Continue anyway?";
|
$confirm = 'You have not specified any reviewers. Continue anyway?';
|
||||||
if (!phutil_console_confirm($confirm)) {
|
if (!phutil_console_confirm($confirm)) {
|
||||||
throw new ArcanistUsageException('Specify reviewers and retry.');
|
throw new ArcanistUsageException('Specify reviewers and retry.');
|
||||||
}
|
}
|
||||||
|
@ -2510,7 +2510,7 @@ EOTEXT
|
||||||
$change->setMetadata("{$type}:file:mime-type", $mime);
|
$change->setMetadata("{$type}:file:mime-type", $mime);
|
||||||
}
|
}
|
||||||
|
|
||||||
echo pht("Uploading %d files...", count($need_upload))."\n";
|
echo pht('Uploading %d files...', count($need_upload))."\n";
|
||||||
|
|
||||||
// Now we're ready to upload the actual file data. If possible, we'll just
|
// Now we're ready to upload the actual file data. If possible, we'll just
|
||||||
// transmit a hash of the file instead of the actual file data. If the data
|
// transmit a hash of the file instead of the actual file data. If the data
|
||||||
|
@ -2584,7 +2584,7 @@ EOTEXT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
echo pht("Upload complete.")."\n";
|
echo pht('Upload complete.')."\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getFileMimeType($data) {
|
private function getFileMimeType($data) {
|
||||||
|
|
|
@ -52,15 +52,15 @@ EOTEXT
|
||||||
protected function didParseArguments() {
|
protected function didParseArguments() {
|
||||||
$argv = $this->getArgument('argv');
|
$argv = $this->getArgument('argv');
|
||||||
if (!$argv) {
|
if (!$argv) {
|
||||||
throw new ArcanistUsageException("Specify a file to download.");
|
throw new ArcanistUsageException('Specify a file to download.');
|
||||||
}
|
}
|
||||||
if (count($argv) > 1) {
|
if (count($argv) > 1) {
|
||||||
throw new ArcanistUsageException("Specify exactly one file to download.");
|
throw new ArcanistUsageException('Specify exactly one file to download.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$file = reset($argv);
|
$file = reset($argv);
|
||||||
if (!preg_match('/^F?\d+$/', $file)) {
|
if (!preg_match('/^F?\d+$/', $file)) {
|
||||||
throw new ArcanistUsageException("Specify file by ID, e.g. F123.");
|
throw new ArcanistUsageException('Specify file by ID, e.g. F123.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->id = (int)ltrim($file, 'F');
|
$this->id = (int)ltrim($file, 'F');
|
||||||
|
|
|
@ -66,19 +66,19 @@ EOTEXT
|
||||||
'encoding' => array(
|
'encoding' => array(
|
||||||
'param' => 'encoding',
|
'param' => 'encoding',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Attempt to convert non UTF-8 patch into specified encoding.",
|
'Attempt to convert non UTF-8 patch into specified encoding.',
|
||||||
),
|
),
|
||||||
'revision' => array(
|
'revision' => array(
|
||||||
'param' => 'revision_id',
|
'param' => 'revision_id',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Instead of exporting changes from the working copy, export them ".
|
'Instead of exporting changes from the working copy, export them '.
|
||||||
"from a Differential revision."
|
'from a Differential revision.'
|
||||||
),
|
),
|
||||||
'diff' => array(
|
'diff' => array(
|
||||||
'param' => 'diff_id',
|
'param' => 'diff_id',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Instead of exporting changes from the working copy, export them ".
|
'Instead of exporting changes from the working copy, export them '.
|
||||||
"from a Differential diff."
|
'from a Differential diff.'
|
||||||
),
|
),
|
||||||
'*' => 'paths',
|
'*' => 'paths',
|
||||||
);
|
);
|
||||||
|
|
|
@ -82,7 +82,7 @@ EOTEXT
|
||||||
$names = $this->getArgument('branch');
|
$names = $this->getArgument('branch');
|
||||||
if ($names) {
|
if ($names) {
|
||||||
if (count($names) > 2) {
|
if (count($names) > 2) {
|
||||||
throw new ArcanistUsageException("Specify only one branch.");
|
throw new ArcanistUsageException('Specify only one branch.');
|
||||||
}
|
}
|
||||||
return $this->checkoutBranch($names);
|
return $this->checkoutBranch($names);
|
||||||
}
|
}
|
||||||
|
@ -186,7 +186,7 @@ EOTEXT
|
||||||
foreach ($branches as $branch) {
|
foreach ($branches as $branch) {
|
||||||
if ($repository_api instanceof ArcanistMercurialAPI) {
|
if ($repository_api instanceof ArcanistMercurialAPI) {
|
||||||
$futures[$branch['name']] = $repository_api->execFutureLocal(
|
$futures[$branch['name']] = $repository_api->execFutureLocal(
|
||||||
"log -l 1 --template %s -r %s",
|
'log -l 1 --template %s -r %s',
|
||||||
"{node}\1{date|hgdate}\1{p1node}\1{desc|firstline}\1{desc}",
|
"{node}\1{date|hgdate}\1{p1node}\1{desc|firstline}\1{desc}",
|
||||||
hgsprintf('%s', $branch['name']));
|
hgsprintf('%s', $branch['name']));
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ EOTEXT
|
||||||
throw new ArcanistUsageException("You can't both edit and clear a flag.");
|
throw new ArcanistUsageException("You can't both edit and clear a flag.");
|
||||||
}
|
}
|
||||||
if (($editing || $clear) && count($objects) != 1) {
|
if (($editing || $clear) && count($objects) != 1) {
|
||||||
throw new ArcanistUsageException("Specify exactly one object.");
|
throw new ArcanistUsageException('Specify exactly one object.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($objects)) {
|
if (!empty($objects)) {
|
||||||
|
@ -155,7 +155,7 @@ EOTEXT
|
||||||
} else {
|
} else {
|
||||||
self::flagWasEdited($flag, 'deleted');
|
self::flagWasEdited($flag, 'deleted');
|
||||||
}
|
}
|
||||||
} elseif ($editing) {
|
} else if ($editing) {
|
||||||
// Let's set some flags. Just like Minesweeper, but less distracting.
|
// Let's set some flags. Just like Minesweeper, but less distracting.
|
||||||
$flag_params = array(
|
$flag_params = array(
|
||||||
'objectPHID' => head($phids),
|
'objectPHID' => head($phids),
|
||||||
|
|
|
@ -47,8 +47,8 @@ EOTEXT
|
||||||
$working_copy = $this->getWorkingCopy();
|
$working_copy = $this->getWorkingCopy();
|
||||||
if (!$working_copy->getProjectID()) {
|
if (!$working_copy->getProjectID()) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"You have installed a git pre-receive hook in a remote without an ".
|
'You have installed a git pre-receive hook in a remote without an '.
|
||||||
".arcconfig.");
|
'.arcconfig.');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Git repositories have special rules in pre-receive hooks. We need to
|
// Git repositories have special rules in pre-receive hooks. We need to
|
||||||
|
|
|
@ -86,37 +86,37 @@ EOTEXT
|
||||||
if (isset($spec['param'])) {
|
if (isset($spec['param'])) {
|
||||||
if (isset($spec['short'])) {
|
if (isset($spec['short'])) {
|
||||||
$optref[] = phutil_console_format(
|
$optref[] = phutil_console_format(
|
||||||
" __--%s__ __%s__, __-%s__ __%s__",
|
' __--%s__ __%s__, __-%s__ __%s__',
|
||||||
$argument,
|
$argument,
|
||||||
$spec['param'],
|
$spec['param'],
|
||||||
$spec['short'],
|
$spec['short'],
|
||||||
$spec['param']);
|
$spec['param']);
|
||||||
} else {
|
} else {
|
||||||
$optref[] = phutil_console_format(
|
$optref[] = phutil_console_format(
|
||||||
" __--%s__ __%s__",
|
' __--%s__ __%s__',
|
||||||
$argument,
|
$argument,
|
||||||
$spec['param']);
|
$spec['param']);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (isset($spec['short'])) {
|
if (isset($spec['short'])) {
|
||||||
$optref[] = phutil_console_format(
|
$optref[] = phutil_console_format(
|
||||||
" __--%s__, __-%s__",
|
' __--%s__, __-%s__',
|
||||||
$argument,
|
$argument,
|
||||||
$spec['short']);
|
$spec['short']);
|
||||||
} else {
|
} else {
|
||||||
$optref[] = phutil_console_format(
|
$optref[] = phutil_console_format(
|
||||||
" __--%s__",
|
' __--%s__',
|
||||||
$argument);
|
$argument);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($config_arguments[$argument])) {
|
if (isset($config_arguments[$argument])) {
|
||||||
$optref[] = " (This is a custom option for this ".
|
$optref[] = ' (This is a custom option for this '.
|
||||||
"project.)";
|
'project.)';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($spec['supports'])) {
|
if (isset($spec['supports'])) {
|
||||||
$optref[] = " Supports: ".
|
$optref[] = ' Supports: '.
|
||||||
implode(', ', $spec['supports']);
|
implode(', ', $spec['supports']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,12 +28,12 @@ EOTEXT
|
||||||
'revision' => array(
|
'revision' => array(
|
||||||
'param' => 'revision_id',
|
'param' => 'revision_id',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Display inline comments for a specific revision. If you do not ".
|
'Display inline comments for a specific revision. If you do not '.
|
||||||
"specify a revision, arc will look in the commit message at HEAD.",
|
'specify a revision, arc will look in the commit message at HEAD.',
|
||||||
),
|
),
|
||||||
'root' => array(
|
'root' => array(
|
||||||
'param' => 'directory',
|
'param' => 'directory',
|
||||||
'help' => "Specify a string printed in front of each path.",
|
'help' => 'Specify a string printed in front of each path.',
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ EOTEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$revision_id) {
|
if (!$revision_id) {
|
||||||
throw new ArcanistUsageException("No revisions found.");
|
throw new ArcanistUsageException('No revisions found.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$comments = array_mergev(
|
$comments = array_mergev(
|
||||||
|
|
|
@ -65,7 +65,7 @@ EOTEXT
|
||||||
$conduit->callMethodSynchronous('conduit.ping', array());
|
$conduit->callMethodSynchronous('conduit.ping', array());
|
||||||
} catch (Exception $ex) {
|
} catch (Exception $ex) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"Failed to connect to server: ".$ex->getMessage());
|
'Failed to connect to server: '.$ex->getMessage());
|
||||||
}
|
}
|
||||||
echo "Connection OK!\n";
|
echo "Connection OK!\n";
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ EOTEXT
|
||||||
echo "\n";
|
echo "\n";
|
||||||
echo " {$token_uri}\n";
|
echo " {$token_uri}\n";
|
||||||
echo "\n";
|
echo "\n";
|
||||||
echo "Then paste the token on that page below.";
|
echo 'Then paste the token on that page below.';
|
||||||
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
@ -118,15 +118,15 @@ EOTEXT
|
||||||
private function determineConduitURI() {
|
private function determineConduitURI() {
|
||||||
$uri = $this->getArgument('uri');
|
$uri = $this->getArgument('uri');
|
||||||
if (count($uri) > 1) {
|
if (count($uri) > 1) {
|
||||||
throw new ArcanistUsageException("Specify at most one URI.");
|
throw new ArcanistUsageException('Specify at most one URI.');
|
||||||
} else if (count($uri) == 1) {
|
} else if (count($uri) == 1) {
|
||||||
$uri = reset($uri);
|
$uri = reset($uri);
|
||||||
} else {
|
} else {
|
||||||
$conduit_uri = $this->getConduitURI();
|
$conduit_uri = $this->getConduitURI();
|
||||||
if (!$conduit_uri) {
|
if (!$conduit_uri) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"Specify an explicit URI or run this command from within a project ".
|
'Specify an explicit URI or run this command from within a project '.
|
||||||
"which is configured with a .arcconfig.");
|
'which is configured with a .arcconfig.');
|
||||||
}
|
}
|
||||||
$uri = $conduit_uri;
|
$uri = $conduit_uri;
|
||||||
}
|
}
|
||||||
|
|
|
@ -318,16 +318,16 @@ EOTEXT
|
||||||
if ($this->useSquash) {
|
if ($this->useSquash) {
|
||||||
if (!$repository_api->supportsRebase()) {
|
if (!$repository_api->supportsRebase()) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
pht("You must enable the rebase extension to use the --squash ".
|
pht('You must enable the rebase extension to use the --squash '.
|
||||||
"strategy."));
|
'strategy.'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->branchType != $this->ontoType) {
|
if ($this->branchType != $this->ontoType) {
|
||||||
throw new ArcanistUsageException(pht(
|
throw new ArcanistUsageException(pht(
|
||||||
"Source %s is a %s but destination %s is a %s. When landing a ".
|
'Source %s is a %s but destination %s is a %s. When landing a '.
|
||||||
"%s, the destination must also be a %s. Use --onto to specify a %s, ".
|
'%s, the destination must also be a %s. Use --onto to specify a %s, '.
|
||||||
"or set arc.land.onto.default in .arcconfig.",
|
'or set arc.land.onto.default in .arcconfig.',
|
||||||
$this->branch,
|
$this->branch,
|
||||||
$this->branchType,
|
$this->branchType,
|
||||||
$this->onto,
|
$this->onto,
|
||||||
|
@ -361,7 +361,7 @@ EOTEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
echo phutil_console_format(
|
echo phutil_console_format(
|
||||||
pht("Switched to %s **%s**. Identifying and merging...",
|
pht('Switched to %s **%s**. Identifying and merging...',
|
||||||
$this->branchType,
|
$this->branchType,
|
||||||
$this->branch).
|
$this->branch).
|
||||||
"\n");
|
"\n");
|
||||||
|
@ -396,7 +396,7 @@ EOTEXT
|
||||||
if (!trim($out)) {
|
if (!trim($out)) {
|
||||||
$this->restoreBranch();
|
$this->restoreBranch();
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
pht("No commits to land from %s.", $this->branch));
|
pht('No commits to land from %s.', $this->branch));
|
||||||
}
|
}
|
||||||
|
|
||||||
echo pht("The following commit(s) will be landed:\n\n%s", $out), "\n";
|
echo pht("The following commit(s) will be landed:\n\n%s", $out), "\n";
|
||||||
|
@ -506,7 +506,7 @@ EOTEXT
|
||||||
if (!empty($open_dep_revs)) {
|
if (!empty($open_dep_revs)) {
|
||||||
$open_revs = array();
|
$open_revs = array();
|
||||||
foreach ($open_dep_revs as $id => $title) {
|
foreach ($open_dep_revs as $id => $title) {
|
||||||
$open_revs[] = " - D".$id.": ".$title;
|
$open_revs[] = ' - D'.$id.': '.$title;
|
||||||
}
|
}
|
||||||
$open_revs = implode("\n", $open_revs);
|
$open_revs = implode("\n", $open_revs);
|
||||||
|
|
||||||
|
@ -514,7 +514,7 @@ EOTEXT
|
||||||
"D{$rev_id}: {$rev_title}",
|
"D{$rev_id}: {$rev_title}",
|
||||||
$open_revs);
|
$open_revs);
|
||||||
|
|
||||||
$ok = phutil_console_confirm(pht("Continue anyway?"));
|
$ok = phutil_console_confirm(pht('Continue anyway?'));
|
||||||
if (!$ok) {
|
if (!$ok) {
|
||||||
throw new ArcanistUserAbortException();
|
throw new ArcanistUserAbortException();
|
||||||
}
|
}
|
||||||
|
@ -570,7 +570,7 @@ EOTEXT
|
||||||
|
|
||||||
} else if ($this->isHg) {
|
} else if ($this->isHg) {
|
||||||
echo phutil_console_format(pht(
|
echo phutil_console_format(pht(
|
||||||
"Updating **%s**...",
|
'Updating **%s**...',
|
||||||
$this->onto) . "\n");
|
$this->onto) . "\n");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -616,7 +616,7 @@ EOTEXT
|
||||||
// Pull succeeded. Now make sure master is not on an outgoing change
|
// Pull succeeded. Now make sure master is not on an outgoing change
|
||||||
if ($repository_api->supportsPhases()) {
|
if ($repository_api->supportsPhases()) {
|
||||||
list($out) = $repository_api->execxLocal(
|
list($out) = $repository_api->execxLocal(
|
||||||
'log -r %s --template %s', $this->onto, "{phase}");
|
'log -r %s --template %s', $this->onto, '{phase}');
|
||||||
if ($out != 'public') {
|
if ($out != 'public') {
|
||||||
$local_ahead_of_remote = true;
|
$local_ahead_of_remote = true;
|
||||||
}
|
}
|
||||||
|
@ -655,7 +655,7 @@ EOTEXT
|
||||||
if ($this->isGit) {
|
if ($this->isGit) {
|
||||||
if ($this->shouldUpdateWithRebase) {
|
if ($this->shouldUpdateWithRebase) {
|
||||||
echo phutil_console_format(pht(
|
echo phutil_console_format(pht(
|
||||||
"Rebasing **%s** onto **%s**",
|
'Rebasing **%s** onto **%s**',
|
||||||
$this->branch,
|
$this->branch,
|
||||||
$this->onto)."\n");
|
$this->onto)."\n");
|
||||||
$err = phutil_passthru('git rebase %s', $this->onto);
|
$err = phutil_passthru('git rebase %s', $this->onto);
|
||||||
|
@ -669,7 +669,7 @@ EOTEXT
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
echo phutil_console_format(pht(
|
echo phutil_console_format(pht(
|
||||||
"Merging **%s** into **%s**",
|
'Merging **%s** into **%s**',
|
||||||
$this->branch,
|
$this->branch,
|
||||||
$this->onto)."\n");
|
$this->onto)."\n");
|
||||||
$err = phutil_passthru(
|
$err = phutil_passthru(
|
||||||
|
@ -687,7 +687,7 @@ EOTEXT
|
||||||
} else if ($this->isHg) {
|
} else if ($this->isHg) {
|
||||||
$onto_tip = $repository_api->getCanonicalRevisionName($this->onto);
|
$onto_tip = $repository_api->getCanonicalRevisionName($this->onto);
|
||||||
$common_ancestor = $repository_api->getCanonicalRevisionName(
|
$common_ancestor = $repository_api->getCanonicalRevisionName(
|
||||||
hgsprintf("ancestor(%s, %s)",
|
hgsprintf('ancestor(%s, %s)',
|
||||||
$this->onto,
|
$this->onto,
|
||||||
$this->branch));
|
$this->branch));
|
||||||
|
|
||||||
|
@ -745,13 +745,13 @@ EOTEXT
|
||||||
// function). So we're guaranteed to have onto as an ancestor of branch
|
// function). So we're guaranteed to have onto as an ancestor of branch
|
||||||
// when we use first((onto::branch)-onto) below.
|
// when we use first((onto::branch)-onto) below.
|
||||||
$branch_root = $repository_api->getCanonicalRevisionName(
|
$branch_root = $repository_api->getCanonicalRevisionName(
|
||||||
hgsprintf("first((%s::%s)-%s)",
|
hgsprintf('first((%s::%s)-%s)',
|
||||||
$this->onto,
|
$this->onto,
|
||||||
$this->branch,
|
$this->branch,
|
||||||
$this->onto));
|
$this->onto));
|
||||||
|
|
||||||
$branch_range = hgsprintf(
|
$branch_range = hgsprintf(
|
||||||
"(%s::%s)",
|
'(%s::%s)',
|
||||||
$branch_root,
|
$branch_root,
|
||||||
$this->branch);
|
$this->branch);
|
||||||
|
|
||||||
|
@ -793,8 +793,8 @@ EOTEXT
|
||||||
|
|
||||||
// check if the branch had children
|
// check if the branch had children
|
||||||
list($output) = $repository_api->execxLocal(
|
list($output) = $repository_api->execxLocal(
|
||||||
"log -r %s --template %s",
|
'log -r %s --template %s',
|
||||||
hgsprintf("children(%s)", $this->branch),
|
hgsprintf('children(%s)', $this->branch),
|
||||||
'{node}\n');
|
'{node}\n');
|
||||||
|
|
||||||
$child_branch_roots = phutil_split_lines($output, false);
|
$child_branch_roots = phutil_split_lines($output, false);
|
||||||
|
@ -849,7 +849,7 @@ EOTEXT
|
||||||
$this->branch,
|
$this->branch,
|
||||||
$branch_range);
|
$branch_range);
|
||||||
list($alt_branches) = $repository_api->execxLocal(
|
list($alt_branches) = $repository_api->execxLocal(
|
||||||
"log --template %s -r %s",
|
'log --template %s -r %s',
|
||||||
'{node}\n',
|
'{node}\n',
|
||||||
$alt_branch_revset);
|
$alt_branch_revset);
|
||||||
|
|
||||||
|
@ -890,7 +890,7 @@ EOTEXT
|
||||||
throw new ArcanistUserAbortException();
|
throw new ArcanistUserAbortException();
|
||||||
} else {
|
} else {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
pht("Invalid choice. Aborting arc land."));
|
pht('Invalid choice. Aborting arc land.'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -923,7 +923,7 @@ EOTEXT
|
||||||
// The user should never reach this line, since --merge is
|
// The user should never reach this line, since --merge is
|
||||||
// forbidden at the command line argument level.
|
// forbidden at the command line argument level.
|
||||||
throw new ArcanistUsageException(pht(
|
throw new ArcanistUsageException(pht(
|
||||||
"--merge is not currently supported for hg repos."));
|
'--merge is not currently supported for hg repos.'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -961,7 +961,7 @@ EOTEXT
|
||||||
|
|
||||||
if ($this->getArgument('hold')) {
|
if ($this->getArgument('hold')) {
|
||||||
echo phutil_console_format(pht(
|
echo phutil_console_format(pht(
|
||||||
"Holding change in **%s**: it has NOT been pushed yet.",
|
'Holding change in **%s**: it has NOT been pushed yet.',
|
||||||
$this->onto). "\n");
|
$this->onto). "\n");
|
||||||
} else {
|
} else {
|
||||||
echo pht('Pushing change...'), "\n\n";
|
echo pht('Pushing change...'), "\n\n";
|
||||||
|
@ -970,13 +970,13 @@ EOTEXT
|
||||||
|
|
||||||
if ($this->isGitSvn) {
|
if ($this->isGitSvn) {
|
||||||
$err = phutil_passthru('git svn dcommit');
|
$err = phutil_passthru('git svn dcommit');
|
||||||
$cmd = "git svn dcommit";
|
$cmd = 'git svn dcommit';
|
||||||
} else if ($this->isGit) {
|
} else if ($this->isGit) {
|
||||||
$err = phutil_passthru(
|
$err = phutil_passthru(
|
||||||
'git push %s %s',
|
'git push %s %s',
|
||||||
$this->remote,
|
$this->remote,
|
||||||
$this->onto);
|
$this->onto);
|
||||||
$cmd = "git push";
|
$cmd = 'git push';
|
||||||
} else if ($this->isHgSvn) {
|
} else if ($this->isHgSvn) {
|
||||||
// hg-svn doesn't support 'push -r', so we do a normal push
|
// hg-svn doesn't support 'push -r', so we do a normal push
|
||||||
// which hg-svn modifies to only push the current branch and
|
// which hg-svn modifies to only push the current branch and
|
||||||
|
@ -984,13 +984,13 @@ EOTEXT
|
||||||
$err = $repository_api->execPassthru(
|
$err = $repository_api->execPassthru(
|
||||||
'push %s',
|
'push %s',
|
||||||
$this->remote);
|
$this->remote);
|
||||||
$cmd = "hg push";
|
$cmd = 'hg push';
|
||||||
} else if ($this->isHg) {
|
} else if ($this->isHg) {
|
||||||
$err = $repository_api->execPassthru(
|
$err = $repository_api->execPassthru(
|
||||||
'push -r %s %s',
|
'push -r %s %s',
|
||||||
$this->onto,
|
$this->onto,
|
||||||
$this->remote);
|
$this->remote);
|
||||||
$cmd = "hg push";
|
$cmd = 'hg push';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($err) {
|
if ($err) {
|
||||||
|
@ -1070,12 +1070,12 @@ EOTEXT
|
||||||
$this->branch);
|
$this->branch);
|
||||||
} else if ($this->isHg) {
|
} else if ($this->isHg) {
|
||||||
$common_ancestor = $repository_api->getCanonicalRevisionName(
|
$common_ancestor = $repository_api->getCanonicalRevisionName(
|
||||||
hgsprintf("ancestor(%s,%s)",
|
hgsprintf('ancestor(%s,%s)',
|
||||||
$this->onto,
|
$this->onto,
|
||||||
$this->branch));
|
$this->branch));
|
||||||
|
|
||||||
$branch_root = $repository_api->getCanonicalRevisionName(
|
$branch_root = $repository_api->getCanonicalRevisionName(
|
||||||
hgsprintf("first((%s::%s)-%s)",
|
hgsprintf('first((%s::%s)-%s)',
|
||||||
$common_ancestor,
|
$common_ancestor,
|
||||||
$this->branch,
|
$this->branch,
|
||||||
$common_ancestor));
|
$common_ancestor));
|
||||||
|
@ -1148,9 +1148,9 @@ EOTEXT
|
||||||
private function getBranchType($branch) {
|
private function getBranchType($branch) {
|
||||||
$repository_api = $this->getRepositoryAPI();
|
$repository_api = $this->getRepositoryAPI();
|
||||||
if ($this->isHg && $repository_api->isBookmark($branch)) {
|
if ($this->isHg && $repository_api->isBookmark($branch)) {
|
||||||
return "bookmark";
|
return 'bookmark';
|
||||||
}
|
}
|
||||||
return "branch";
|
return 'branch';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -37,34 +37,34 @@ EOTEXT
|
||||||
return array(
|
return array(
|
||||||
'all' => array(
|
'all' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Drop the module cache before liberating. This will completely ".
|
'Drop the module cache before liberating. This will completely '.
|
||||||
"reanalyze the entire library. Thorough, but slow!",
|
'reanalyze the entire library. Thorough, but slow!',
|
||||||
),
|
),
|
||||||
'force-update' => array(
|
'force-update' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Force the library map to be updated, even in the presence of ".
|
'Force the library map to be updated, even in the presence of '.
|
||||||
"lint errors.",
|
'lint errors.',
|
||||||
),
|
),
|
||||||
'library-name' => array(
|
'library-name' => array(
|
||||||
'param' => 'name',
|
'param' => 'name',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Use a flag for library name rather than awaiting user input.",
|
'Use a flag for library name rather than awaiting user input.',
|
||||||
),
|
),
|
||||||
'remap' => array(
|
'remap' => array(
|
||||||
'hide' => true,
|
'hide' => true,
|
||||||
'help' =>
|
'help' =>
|
||||||
"Internal. Run the remap step of liberation. You do not need to ".
|
'Internal. Run the remap step of liberation. You do not need to '.
|
||||||
"run this unless you are debugging the workflow.",
|
'run this unless you are debugging the workflow.',
|
||||||
),
|
),
|
||||||
'verify' => array(
|
'verify' => array(
|
||||||
'hide' => true,
|
'hide' => true,
|
||||||
'help' =>
|
'help' =>
|
||||||
"Internal. Run the verify step of liberation. You do not need to ".
|
'Internal. Run the verify step of liberation. You do not need to '.
|
||||||
"run this unless you are debugging the workflow.",
|
'run this unless you are debugging the workflow.',
|
||||||
),
|
),
|
||||||
'upgrade' => array(
|
'upgrade' => array(
|
||||||
'hide' => true,
|
'hide' => true,
|
||||||
'help' => "Experimental. Upgrade library to v2.",
|
'help' => 'Experimental. Upgrade library to v2.',
|
||||||
),
|
),
|
||||||
'*' => 'argv',
|
'*' => 'argv',
|
||||||
);
|
);
|
||||||
|
@ -98,8 +98,8 @@ EOTEXT
|
||||||
if ($init) {
|
if ($init) {
|
||||||
if (count($init) > 1) {
|
if (count($init) > 1) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"Specified directory contains more than one libphutil library. Use ".
|
'Specified directory contains more than one libphutil library. Use '.
|
||||||
"a more specific path.");
|
'a more specific path.');
|
||||||
}
|
}
|
||||||
$path = Filesystem::resolvePath(dirname(reset($init)), $path);
|
$path = Filesystem::resolvePath(dirname(reset($init)), $path);
|
||||||
} else {
|
} else {
|
||||||
|
@ -186,14 +186,14 @@ EOTEXT
|
||||||
if (Filesystem::pathExists($path)) {
|
if (Filesystem::pathExists($path)) {
|
||||||
if (!is_dir($path)) {
|
if (!is_dir($path)) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"Provide a directory to create or update a libphutil library in.");
|
'Provide a directory to create or update a libphutil library in.');
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "The directory '{$path}' does not exist.";
|
echo "The directory '{$path}' does not exist.";
|
||||||
if (!phutil_console_confirm('Do you want to create it?')) {
|
if (!phutil_console_confirm('Do you want to create it?')) {
|
||||||
throw new ArcanistUsageException("Cancelled.");
|
throw new ArcanistUsageException('Cancelled.');
|
||||||
}
|
}
|
||||||
|
|
||||||
execx('mkdir -p %s', $path);
|
execx('mkdir -p %s', $path);
|
||||||
|
@ -208,7 +208,7 @@ EOTEXT
|
||||||
echo "Creating new libphutil library in '{$path}'.\n";
|
echo "Creating new libphutil library in '{$path}'.\n";
|
||||||
|
|
||||||
do {
|
do {
|
||||||
$name = $this->getArgument("library-name");
|
$name = $this->getArgument('library-name');
|
||||||
if ($name === null) {
|
if ($name === null) {
|
||||||
echo "Choose a name for the new library.\n";
|
echo "Choose a name for the new library.\n";
|
||||||
$name = phutil_console_prompt('What do you want to name this library?');
|
$name = phutil_console_prompt('What do you want to name this library?');
|
||||||
|
|
|
@ -63,31 +63,31 @@ EOTEXT
|
||||||
return array(
|
return array(
|
||||||
'lintall' => array(
|
'lintall' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Show all lint warnings, not just those on changed lines. When " .
|
'Show all lint warnings, not just those on changed lines. When ' .
|
||||||
"paths are specified, this is the default behavior.",
|
'paths are specified, this is the default behavior.',
|
||||||
'conflicts' => array(
|
'conflicts' => array(
|
||||||
'only-changed' => true,
|
'only-changed' => true,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'only-changed' => array(
|
'only-changed' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Show lint warnings just on changed lines. When no paths are " .
|
'Show lint warnings just on changed lines. When no paths are ' .
|
||||||
"specified, this is the default. This differs from only-new " .
|
'specified, this is the default. This differs from only-new ' .
|
||||||
"in cases where line modifications introduce lint on other " .
|
'in cases where line modifications introduce lint on other ' .
|
||||||
"unmodified lines.",
|
'unmodified lines.',
|
||||||
'conflicts' => array(
|
'conflicts' => array(
|
||||||
'lintall' => true,
|
'lintall' => true,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'rev' => array(
|
'rev' => array(
|
||||||
'param' => 'revision',
|
'param' => 'revision',
|
||||||
'help' => "Lint changes since a specific revision.",
|
'help' => 'Lint changes since a specific revision.',
|
||||||
'supports' => array(
|
'supports' => array(
|
||||||
'git',
|
'git',
|
||||||
'hg',
|
'hg',
|
||||||
),
|
),
|
||||||
'nosupport' => array(
|
'nosupport' => array(
|
||||||
'svn' => "Lint does not currently support --rev in SVN.",
|
'svn' => 'Lint does not currently support --rev in SVN.',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'output' => array(
|
'output' => array(
|
||||||
|
@ -107,7 +107,7 @@ EOTEXT
|
||||||
'engine' => array(
|
'engine' => array(
|
||||||
'param' => 'classname',
|
'param' => 'classname',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Override configured lint engine for this project."
|
'Override configured lint engine for this project.'
|
||||||
),
|
),
|
||||||
'apply-patches' => array(
|
'apply-patches' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
|
@ -193,8 +193,8 @@ EOTEXT
|
||||||
$everything = $this->getArgument('everything');
|
$everything = $this->getArgument('everything');
|
||||||
if ($everything && $paths) {
|
if ($everything && $paths) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"You can not specify paths with --everything. The --everything ".
|
'You can not specify paths with --everything. The --everything '.
|
||||||
"flag lints every file.");
|
'flag lints every file.');
|
||||||
}
|
}
|
||||||
if ($use_cache === null) {
|
if ($use_cache === null) {
|
||||||
$use_cache = (bool)$configuration_manager->getConfigFromAnySource(
|
$use_cache = (bool)$configuration_manager->getConfigFromAnySource(
|
||||||
|
@ -203,7 +203,7 @@ EOTEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($rev && $paths) {
|
if ($rev && $paths) {
|
||||||
throw new ArcanistUsageException("Specify either --rev or paths.");
|
throw new ArcanistUsageException('Specify either --rev or paths.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -503,12 +503,12 @@ EOTEXT
|
||||||
// TODO: Improve the behavior here, make it more like
|
// TODO: Improve the behavior here, make it more like
|
||||||
// difference_render().
|
// difference_render().
|
||||||
list(, $stdout, $stderr) =
|
list(, $stdout, $stderr) =
|
||||||
exec_manual("diff -u %s %s", $old_file, $new_file);
|
exec_manual('diff -u %s %s', $old_file, $new_file);
|
||||||
$console->writeOut('%s', $stdout);
|
$console->writeOut('%s', $stdout);
|
||||||
$console->writeErr('%s', $stderr);
|
$console->writeErr('%s', $stderr);
|
||||||
|
|
||||||
$prompt = phutil_console_format(
|
$prompt = phutil_console_format(
|
||||||
"Apply this patch to __%s__?",
|
'Apply this patch to __%s__?',
|
||||||
$result->getPath());
|
$result->getPath());
|
||||||
if (!$console->confirm($prompt, $default_no = false)) {
|
if (!$console->confirm($prompt, $default_no = false)) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -531,7 +531,7 @@ EOTEXT
|
||||||
"with lint patches.\n");
|
"with lint patches.\n");
|
||||||
$amend = true;
|
$amend = true;
|
||||||
} else {
|
} else {
|
||||||
$amend = $console->confirm("Amend HEAD with lint patches?");
|
$amend = $console->confirm('Amend HEAD with lint patches?');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($amend) {
|
if ($amend) {
|
||||||
|
@ -543,8 +543,8 @@ EOTEXT
|
||||||
$repository_api->amendCommit();
|
$repository_api->amendCommit();
|
||||||
} else {
|
} else {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"Sort out the lint changes that were applied to the working ".
|
'Sort out the lint changes that were applied to the working '.
|
||||||
"copy and relint.");
|
'copy and relint.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,17 +67,17 @@ EOTEXT
|
||||||
|
|
||||||
$argv = $this->getArgument('argv');
|
$argv = $this->getArgument('argv');
|
||||||
if (count($argv) > 1) {
|
if (count($argv) > 1) {
|
||||||
throw new ArcanistUsageException("Specify only one paste to retrieve.");
|
throw new ArcanistUsageException('Specify only one paste to retrieve.');
|
||||||
} else if (count($argv) == 1) {
|
} else if (count($argv) == 1) {
|
||||||
$id = $argv[0];
|
$id = $argv[0];
|
||||||
if (!preg_match('/^P?\d+/', $id)) {
|
if (!preg_match('/^P?\d+/', $id)) {
|
||||||
throw new ArcanistUsageException("Specify a paste ID, like P123.");
|
throw new ArcanistUsageException('Specify a paste ID, like P123.');
|
||||||
}
|
}
|
||||||
$this->id = (int)ltrim($id, 'P');
|
$this->id = (int)ltrim($id, 'P');
|
||||||
|
|
||||||
if ($this->language || $this->title) {
|
if ($this->language || $this->title) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"Use options --lang and --title only when creating pastes.");
|
'Use options --lang and --title only when creating pastes.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,10 +52,10 @@ EOTEXT
|
||||||
'diff' => array(
|
'diff' => array(
|
||||||
'param' => 'diff_id',
|
'param' => 'diff_id',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Apply changes from a Differential diff. Normally you want to use ".
|
'Apply changes from a Differential diff. Normally you want to use '.
|
||||||
"--revision to get the most recent changes, but you can ".
|
'--revision to get the most recent changes, but you can '.
|
||||||
"specifically apply an out-of-date diff or a diff which was never ".
|
'specifically apply an out-of-date diff or a diff which was never '.
|
||||||
"attached to a revision by using this flag.",
|
'attached to a revision by using this flag.',
|
||||||
),
|
),
|
||||||
'arcbundle' => array(
|
'arcbundle' => array(
|
||||||
'param' => 'bundlefile',
|
'param' => 'bundlefile',
|
||||||
|
@ -67,19 +67,19 @@ EOTEXT
|
||||||
'param' => 'patchfile',
|
'param' => 'patchfile',
|
||||||
'paramtype' => 'file',
|
'paramtype' => 'file',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Apply changes from a git patchfile or unified patchfile.",
|
'Apply changes from a git patchfile or unified patchfile.',
|
||||||
),
|
),
|
||||||
'encoding' => array(
|
'encoding' => array(
|
||||||
'param' => 'encoding',
|
'param' => 'encoding',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Attempt to convert non UTF-8 patch into specified encoding.",
|
'Attempt to convert non UTF-8 patch into specified encoding.',
|
||||||
),
|
),
|
||||||
'update' => array(
|
'update' => array(
|
||||||
'supports' => array(
|
'supports' => array(
|
||||||
'git', 'svn', 'hg'
|
'git', 'svn', 'hg'
|
||||||
),
|
),
|
||||||
'help' =>
|
'help' =>
|
||||||
"Update the local working copy before applying the patch.",
|
'Update the local working copy before applying the patch.',
|
||||||
'conflicts' => array(
|
'conflicts' => array(
|
||||||
'nobranch' => true,
|
'nobranch' => true,
|
||||||
'bookmark' => true,
|
'bookmark' => true,
|
||||||
|
@ -90,8 +90,8 @@ EOTEXT
|
||||||
'git', 'hg'
|
'git', 'hg'
|
||||||
),
|
),
|
||||||
'help' =>
|
'help' =>
|
||||||
"Normally under git/hg, if the patch is successful, the changes ".
|
'Normally under git/hg, if the patch is successful, the changes '.
|
||||||
"are committed to the working copy. This flag prevents the commit.",
|
'are committed to the working copy. This flag prevents the commit.',
|
||||||
),
|
),
|
||||||
'skip-dependencies' => array(
|
'skip-dependencies' => array(
|
||||||
'supports' => array(
|
'supports' => array(
|
||||||
|
@ -107,17 +107,17 @@ EOTEXT
|
||||||
'git', 'hg'
|
'git', 'hg'
|
||||||
),
|
),
|
||||||
'help' =>
|
'help' =>
|
||||||
"Normally, a new branch (git) or bookmark (hg) is created and then ".
|
'Normally, a new branch (git) or bookmark (hg) is created and then '.
|
||||||
"the patch is applied and committed in the new branch/bookmark. ".
|
'the patch is applied and committed in the new branch/bookmark. '.
|
||||||
"This flag cherry-picks the resultant commit onto the original ".
|
'This flag cherry-picks the resultant commit onto the original '.
|
||||||
"branch and deletes the temporary branch.",
|
'branch and deletes the temporary branch.',
|
||||||
'conflicts' => array(
|
'conflicts' => array(
|
||||||
'update' => true,
|
'update' => true,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'force' => array(
|
'force' => array(
|
||||||
'help' =>
|
'help' =>
|
||||||
"Do not run any sanity checks.",
|
'Do not run any sanity checks.',
|
||||||
),
|
),
|
||||||
'*' => 'name',
|
'*' => 'name',
|
||||||
);
|
);
|
||||||
|
@ -147,7 +147,7 @@ EOTEXT
|
||||||
if ($this->getArgument('name')) {
|
if ($this->getArgument('name')) {
|
||||||
$namev = $this->getArgument('name');
|
$namev = $this->getArgument('name');
|
||||||
if (count($namev) > 1) {
|
if (count($namev) > 1) {
|
||||||
throw new ArcanistUsageException("Specify at most one revision name.");
|
throw new ArcanistUsageException('Specify at most one revision name.');
|
||||||
}
|
}
|
||||||
$source = self::SOURCE_REVISION;
|
$source = self::SOURCE_REVISION;
|
||||||
$requested++;
|
$requested++;
|
||||||
|
@ -216,7 +216,7 @@ EOTEXT
|
||||||
$branch_name = null;
|
$branch_name = null;
|
||||||
$repository_api = $this->getRepositoryAPI();
|
$repository_api = $this->getRepositoryAPI();
|
||||||
$revision_id = $bundle->getRevisionID();
|
$revision_id = $bundle->getRevisionID();
|
||||||
$base_name = "arcpatch";
|
$base_name = 'arcpatch';
|
||||||
if ($revision_id) {
|
if ($revision_id) {
|
||||||
$base_name .= "-D{$revision_id}";
|
$base_name .= "-D{$revision_id}";
|
||||||
}
|
}
|
||||||
|
@ -242,8 +242,8 @@ EOTEXT
|
||||||
|
|
||||||
if (!$branch_name) {
|
if (!$branch_name) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"Arc was unable to automagically make a name for this patch. ".
|
'Arc was unable to automagically make a name for this patch. '.
|
||||||
"Please clean up your working copy and try again."
|
'Please clean up your working copy and try again.'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,7 +254,7 @@ EOTEXT
|
||||||
$bookmark_name = null;
|
$bookmark_name = null;
|
||||||
$repository_api = $this->getRepositoryAPI();
|
$repository_api = $this->getRepositoryAPI();
|
||||||
$revision_id = $bundle->getRevisionID();
|
$revision_id = $bundle->getRevisionID();
|
||||||
$base_name = "arcpatch";
|
$base_name = 'arcpatch';
|
||||||
if ($revision_id) {
|
if ($revision_id) {
|
||||||
$base_name .= "-D{$revision_id}";
|
$base_name .= "-D{$revision_id}";
|
||||||
}
|
}
|
||||||
|
@ -281,8 +281,8 @@ EOTEXT
|
||||||
|
|
||||||
if (!$bookmark_name) {
|
if (!$bookmark_name) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
"Arc was unable to automagically make a name for this patch. ".
|
'Arc was unable to automagically make a name for this patch. '.
|
||||||
"Please clean up your working copy and try again."
|
'Please clean up your working copy and try again.'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,7 +362,7 @@ EOTEXT
|
||||||
$patch = @file_get_contents('php://stdin');
|
$patch = @file_get_contents('php://stdin');
|
||||||
if (!strlen($patch)) {
|
if (!strlen($patch)) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"Failed to read patch from stdin!");
|
'Failed to read patch from stdin!');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$patch = Filesystem::readFile($param);
|
$patch = Filesystem::readFile($param);
|
||||||
|
@ -685,7 +685,7 @@ EOTEXT
|
||||||
// can not apply these patches on case-insensitive filesystems and
|
// can not apply these patches on case-insensitive filesystems and
|
||||||
// there is no way to build a patch which works.
|
// there is no way to build a patch which works.
|
||||||
|
|
||||||
throw new ArcanistUsageException("Unable to apply patch!");
|
throw new ArcanistUsageException('Unable to apply patch!');
|
||||||
}
|
}
|
||||||
|
|
||||||
// in case there were any submodule changes involved
|
// in case there were any submodule changes involved
|
||||||
|
|
|
@ -210,7 +210,7 @@ EOTEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($failures) {
|
if ($failures) {
|
||||||
$at = "@";
|
$at = '@';
|
||||||
$msg = phutil_console_format(
|
$msg = phutil_console_format(
|
||||||
"\n**LINT ERRORS**\n\n".
|
"\n**LINT ERRORS**\n\n".
|
||||||
"This changeset has lint errors. You must fix all lint errors before ".
|
"This changeset has lint errors. You must fix all lint errors before ".
|
||||||
|
|
|
@ -44,31 +44,31 @@ EOTEXT
|
||||||
return array(
|
return array(
|
||||||
'status' => array(
|
'status' => array(
|
||||||
'param' => 'task_status',
|
'param' => 'task_status',
|
||||||
'help' => "Show tasks that or open or closed, default is open.",
|
'help' => 'Show tasks that or open or closed, default is open.',
|
||||||
),
|
),
|
||||||
'owner' => array(
|
'owner' => array(
|
||||||
'param' => 'username',
|
'param' => 'username',
|
||||||
'paramtype' => 'username',
|
'paramtype' => 'username',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Only show tasks assigned to the given username, ".
|
'Only show tasks assigned to the given username, '.
|
||||||
"also accepts @all to show all, default is you.",
|
'also accepts @all to show all, default is you.',
|
||||||
'conflict' => array(
|
'conflict' => array(
|
||||||
"unassigned" => "--owner suppresses unassigned",
|
'unassigned' => '--owner suppresses unassigned',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'order' => array(
|
'order' => array(
|
||||||
'param' => 'task_order',
|
'param' => 'task_order',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Arrange tasks based on priority, created, or modified, ".
|
'Arrange tasks based on priority, created, or modified, '.
|
||||||
"default is priority.",
|
'default is priority.',
|
||||||
),
|
),
|
||||||
'limit' => array(
|
'limit' => array(
|
||||||
'param' => 'n',
|
'param' => 'n',
|
||||||
'paramtype' => 'int',
|
'paramtype' => 'int',
|
||||||
'help' => "Limit the amount of tasks outputted, default is all.",
|
'help' => 'Limit the amount of tasks outputted, default is all.',
|
||||||
),
|
),
|
||||||
'unassigned' => array(
|
'unassigned' => array(
|
||||||
'help' => "Only show tasks that are not assigned (upforgrabs).",
|
'help' => 'Only show tasks that are not assigned (upforgrabs).',
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@ EOTEXT
|
||||||
|
|
||||||
if ($owner) {
|
if ($owner) {
|
||||||
$owner_phid = $this->findOwnerPhid($owner);
|
$owner_phid = $this->findOwnerPhid($owner);
|
||||||
} elseif ($unassigned) {
|
} else if ($unassigned) {
|
||||||
$owner_phid = null;
|
$owner_phid = null;
|
||||||
} else {
|
} else {
|
||||||
$owner_phid = $this->getUserPHID();
|
$owner_phid = $this->getUserPHID();
|
||||||
|
@ -106,7 +106,7 @@ EOTEXT
|
||||||
$output = array();
|
$output = array();
|
||||||
|
|
||||||
// Render the "T123" column.
|
// Render the "T123" column.
|
||||||
$task_id = "T".$task['id'];
|
$task_id = 'T'.$task['id'];
|
||||||
$formatted_task_id = phutil_console_format(
|
$formatted_task_id = phutil_console_format(
|
||||||
'**%s**',
|
'**%s**',
|
||||||
$task_id);
|
$task_id);
|
||||||
|
@ -176,7 +176,7 @@ EOTEXT
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
$output['status'] = array(
|
$output['status'] = array(
|
||||||
'text' => "",
|
'text' => '',
|
||||||
'len' => 0,
|
'len' => 0,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -265,8 +265,8 @@ EOTEXT
|
||||||
$find_params['limit'] = $limit;
|
$find_params['limit'] = $limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
$find_params['order'] = ($order ? "order-".$order : "order-priority");
|
$find_params['order'] = ($order ? 'order-'.$order : 'order-priority');
|
||||||
$find_params['status'] = ($status ? "status-".$status : "status-open");
|
$find_params['status'] = ($status ? 'status-'.$status : 'status-open');
|
||||||
|
|
||||||
$tasks = $conduit->callMethodSynchronous(
|
$tasks = $conduit->callMethodSynchronous(
|
||||||
'maniphest.query',
|
'maniphest.query',
|
||||||
|
|
|
@ -42,19 +42,19 @@ EOTEXT
|
||||||
return array(
|
return array(
|
||||||
'rev' => array(
|
'rev' => array(
|
||||||
'param' => 'revision',
|
'param' => 'revision',
|
||||||
'help' => "Run unit tests covering changes since a specific revision.",
|
'help' => 'Run unit tests covering changes since a specific revision.',
|
||||||
'supports' => array(
|
'supports' => array(
|
||||||
'git',
|
'git',
|
||||||
'hg',
|
'hg',
|
||||||
),
|
),
|
||||||
'nosupport' => array(
|
'nosupport' => array(
|
||||||
'svn' => "Arc unit does not currently support --rev in SVN.",
|
'svn' => 'Arc unit does not currently support --rev in SVN.',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'engine' => array(
|
'engine' => array(
|
||||||
'param' => 'classname',
|
'param' => 'classname',
|
||||||
'help' =>
|
'help' =>
|
||||||
"Override configured unit engine for this project."
|
'Override configured unit engine for this project.'
|
||||||
),
|
),
|
||||||
'coverage' => array(
|
'coverage' => array(
|
||||||
'help' => 'Always enable coverage information.',
|
'help' => 'Always enable coverage information.',
|
||||||
|
@ -66,8 +66,8 @@ EOTEXT
|
||||||
'help' => 'Always disable coverage information.',
|
'help' => 'Always disable coverage information.',
|
||||||
),
|
),
|
||||||
'detailed-coverage' => array(
|
'detailed-coverage' => array(
|
||||||
'help' => "Show a detailed coverage report on the CLI. Implies ".
|
'help' => 'Show a detailed coverage report on the CLI. Implies '.
|
||||||
"--coverage.",
|
'--coverage.',
|
||||||
),
|
),
|
||||||
'json' => array(
|
'json' => array(
|
||||||
'help' => 'Report results in JSON format.',
|
'help' => 'Report results in JSON format.',
|
||||||
|
@ -119,8 +119,8 @@ EOTEXT
|
||||||
|
|
||||||
if (!$engine_class) {
|
if (!$engine_class) {
|
||||||
throw new ArcanistNoEngineException(
|
throw new ArcanistNoEngineException(
|
||||||
"No unit test engine is configured for this project. Edit .arcconfig ".
|
'No unit test engine is configured for this project. Edit .arcconfig '.
|
||||||
"to specify a unit test engine.");
|
'to specify a unit test engine.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$paths = $this->getArgument('paths');
|
$paths = $this->getArgument('paths');
|
||||||
|
@ -128,8 +128,8 @@ EOTEXT
|
||||||
$everything = $this->getArgument('everything');
|
$everything = $this->getArgument('everything');
|
||||||
if ($everything && $paths) {
|
if ($everything && $paths) {
|
||||||
throw new ArcanistUsageException(
|
throw new ArcanistUsageException(
|
||||||
"You can not specify paths with --everything. The --everything ".
|
'You can not specify paths with --everything. The --everything '.
|
||||||
"flag runs every test.");
|
'flag runs every test.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$paths = $this->selectPathsForWorkflow($paths, $rev);
|
$paths = $this->selectPathsForWorkflow($paths, $rev);
|
||||||
|
|
|
@ -40,7 +40,7 @@ EOTEXT
|
||||||
|
|
||||||
protected function didParseArguments() {
|
protected function didParseArguments() {
|
||||||
if (!$this->getArgument('paths')) {
|
if (!$this->getArgument('paths')) {
|
||||||
throw new ArcanistUsageException("Specify one or more files to upload.");
|
throw new ArcanistUsageException('Specify one or more files to upload.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->paths = $this->getArgument('paths');
|
$this->paths = $this->getArgument('paths');
|
||||||
|
|
|
@ -44,7 +44,7 @@ EOTEXT
|
||||||
public function getArguments() {
|
public function getArguments() {
|
||||||
return array(
|
return array(
|
||||||
'any-status' => array(
|
'any-status' => array(
|
||||||
'help' => "Show committed and abandoned revisions.",
|
'help' => 'Show committed and abandoned revisions.',
|
||||||
),
|
),
|
||||||
'base' => array(
|
'base' => array(
|
||||||
'param' => 'rules',
|
'param' => 'rules',
|
||||||
|
@ -115,7 +115,7 @@ EOTEXT
|
||||||
} else if ($repository_api instanceof ArcanistMercurialAPI) {
|
} else if ($repository_api instanceof ArcanistMercurialAPI) {
|
||||||
$command = "hg diff --rev {$relative}";
|
$command = "hg diff --rev {$relative}";
|
||||||
} else {
|
} else {
|
||||||
throw new Exception("Unknown VCS!");
|
throw new Exception('Unknown VCS!');
|
||||||
}
|
}
|
||||||
|
|
||||||
echo phutil_console_wrap(
|
echo phutil_console_wrap(
|
||||||
|
|
Loading…
Reference in a new issue