Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15411865
D12607.id30816.largetrue.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
251 KB
Referenced Files
None
Subscribers
None
D12607.id30816.largetrue.diff
View Options
diff --git a/src/configuration/ArcanistConfiguration.php b/src/configuration/ArcanistConfiguration.php
--- a/src/configuration/ArcanistConfiguration.php
+++ b/src/configuration/ArcanistConfiguration.php
@@ -46,8 +46,11 @@
if (isset($workflows_by_name[$name])) {
$other = get_class($workflows_by_name[$name]);
throw new Exception(
- "Workflows {$class} and {$other} both implement workflows named ".
- "{$name}.");
+ pht(
+ 'Workflows %s and %s both implement workflows named %s.',
+ $class,
+ $other,
+ $name));
}
$workflows_by_name[$name] = $workflow;
@@ -109,7 +112,8 @@
$shell_cmd = substr($full_alias, 1);
$console->writeLog(
- "[alias: 'arc %s' -> $ %s]",
+ "[%s: 'arc %s' -> $ %s]",
+ pht('alias'),
$command,
$shell_cmd);
@@ -127,7 +131,8 @@
$workflow = $this->buildWorkflow($new_command);
if ($workflow) {
$console->writeLog(
- "[alias: 'arc %s' -> 'arc %s']\n",
+ "[%s: 'arc %s' -> 'arc %s']\n",
+ pht('alias'),
$command,
$full_alias);
$command = $new_command;
@@ -168,7 +173,7 @@
}
private function raiseUnknownCommand($command, array $maybe = array()) {
- $message = pht("Unknown command '%s'. Try 'arc help'.", $command);
+ $message = pht("Unknown command '%s'. Try '%s'.", $command, 'arc help');
if ($maybe) {
$message .= "\n\n".pht('Did you mean:')."\n";
sort($maybe);
diff --git a/src/configuration/ArcanistConfigurationManager.php b/src/configuration/ArcanistConfigurationManager.php
--- a/src/configuration/ArcanistConfigurationManager.php
+++ b/src/configuration/ArcanistConfigurationManager.php
@@ -180,11 +180,13 @@
}
if ($mode & 0177) {
// Mode should allow only owner access.
- $prompt = "File permissions on your ~/.arcrc are too open. ".
- "Fix them by chmod'ing to 600?";
+ $prompt = pht(
+ "File permissions on your %s are too open. ".
+ "Fix them by chmod'ing to 600?",
+ '~/.arcrc');
if (!phutil_console_confirm($prompt, $default_no = false)) {
throw new ArcanistUsageException(
- 'Set ~/.arcrc to file mode 600.');
+ pht('Set %s to file mode 600.', '~/.arcrc'));
}
execx('chmod 600 %s', $user_config_path);
@@ -200,7 +202,7 @@
$user_config = phutil_json_decode($user_config_data);
} catch (PhutilJSONParserException $ex) {
throw new PhutilProxyException(
- "Your '~/.arcrc' file is not a valid JSON file.",
+ pht("Your '%s' file is not a valid JSON file.", '~/.arcrc'),
$ex);
}
} else {
@@ -236,7 +238,7 @@
public function setUserConfigurationFileLocation($custom_arcrc) {
if (!Filesystem::pathExists($custom_arcrc)) {
throw new Exception(
- 'Custom arcrc file was specified, but it was not found!');
+ pht('Custom %s file was specified, but it was not found!', 'arcrc'));
}
$this->customArcrcFilename = $custom_arcrc;
@@ -318,8 +320,12 @@
foreach ($options as $opt) {
$opt_config = preg_split('/=/', $opt, 2);
if (count($opt_config) !== 2) {
- throw new ArcanistUsageException("Argument was '{$opt}', but must be ".
- "'name=value'. For example, history.immutable=true");
+ throw new ArcanistUsageException(
+ pht(
+ "Argument was '%s', but must be '%s'. For example, %s",
+ $opt,
+ 'name=value',
+ 'history.immutable=true'));
}
list($key, $value) = $opt_config;
diff --git a/src/configuration/ArcanistSettings.php b/src/configuration/ArcanistSettings.php
--- a/src/configuration/ArcanistSettings.php
+++ b/src/configuration/ArcanistSettings.php
@@ -86,7 +86,7 @@
'help' => pht(
'The name of the default branch to land changes onto when '.
'`%s` is run.',
- 'arc land'),
+ 'arc land'),
'example' => '"develop"',
),
'arc.land.update.default' => array(
diff --git a/src/configuration/__tests__/ArcanistBritishTestCase.php b/src/configuration/__tests__/ArcanistBritishTestCase.php
--- a/src/configuration/__tests__/ArcanistBritishTestCase.php
+++ b/src/configuration/__tests__/ArcanistBritishTestCase.php
@@ -53,7 +53,7 @@
$this->assertEqual(
$expect,
$result,
- "Correction of {$input} against: {$commands}");
+ pht('Correction of %s against: %s', $input, $commands));
}
public function testArgumentCompletion() {
@@ -91,7 +91,7 @@
$this->assertEqual(
$expect,
$result,
- "Correction of {$input} against: {$arguments}");
+ pht('Correction of %s against: %s', $input, $arguments));
}
}
diff --git a/src/difference/ArcanistDiffUtils.php b/src/difference/ArcanistDiffUtils.php
--- a/src/difference/ArcanistDiffUtils.php
+++ b/src/difference/ArcanistDiffUtils.php
@@ -26,7 +26,7 @@
$diff_options = "-L 'Old Value' -L 'New Value'") {
if ((string)$old === (string)$new) {
- $new .= "\n(Old and new values are identical.)";
+ $new .= "\n".pht('(Old and new values are identical.)');
}
$file_old = new TempFile();
diff --git a/src/differential/constants/ArcanistDifferentialRevisionStatus.php b/src/differential/constants/ArcanistDifferentialRevisionStatus.php
--- a/src/differential/constants/ArcanistDifferentialRevisionStatus.php
+++ b/src/differential/constants/ArcanistDifferentialRevisionStatus.php
@@ -21,7 +21,7 @@
self::IN_PREPARATION => pht('In Preparation'),
);
- return idx($map, coalesce($status, '?'), 'Unknown');
+ return idx($map, coalesce($status, '?'), pht('Unknown'));
}
}
diff --git a/src/exception/usage/ArcanistUserAbortException.php b/src/exception/usage/ArcanistUserAbortException.php
--- a/src/exception/usage/ArcanistUserAbortException.php
+++ b/src/exception/usage/ArcanistUserAbortException.php
@@ -7,7 +7,7 @@
final class ArcanistUserAbortException extends ArcanistUsageException {
public function __construct() {
- parent::__construct('User aborted the workflow.');
+ parent::__construct(pht('User aborted the workflow.'));
}
}
diff --git a/src/hgdaemon/ArcanistHgClientChannel.php b/src/hgdaemon/ArcanistHgClientChannel.php
--- a/src/hgdaemon/ArcanistHgClientChannel.php
+++ b/src/hgdaemon/ArcanistHgClientChannel.php
@@ -57,7 +57,7 @@
*/
protected function encodeMessage($argv) {
if (!is_array($argv) || count($argv) !== 2) {
- throw new Exception('Message should be <channel, data>.');
+ throw new Exception(pht('Message should be %s.', '<channel, data>'));
}
$channel = head($argv);
diff --git a/src/hgdaemon/ArcanistHgProxyClient.php b/src/hgdaemon/ArcanistHgProxyClient.php
--- a/src/hgdaemon/ArcanistHgProxyClient.php
+++ b/src/hgdaemon/ArcanistHgProxyClient.php
@@ -163,7 +163,10 @@
if ($errno || !$socket) {
throw new Exception(
- "Unable to connect socket! Error #{$errno}: {$errstr}");
+ pht(
+ 'Unable to connect socket! Error #%d: %s',
+ $errno,
+ $errstr));
}
$channel = new PhutilSocketChannel($socket);
diff --git a/src/hgdaemon/ArcanistHgProxyServer.php b/src/hgdaemon/ArcanistHgProxyServer.php
--- a/src/hgdaemon/ArcanistHgProxyServer.php
+++ b/src/hgdaemon/ArcanistHgProxyServer.php
@@ -168,7 +168,7 @@
$hg = $this->startMercurialProcess();
$clients = array();
- $this->log(null, 'Listening');
+ $this->log(null, pht('Listening'));
$this->idleSince = time();
while (true) {
// Wait for activity on any active clients, the Mercurial process, or
@@ -181,7 +181,7 @@
));
if (!$hg->update()) {
- throw new Exception('Server exited unexpectedly!');
+ throw new Exception(pht('Server exited unexpectedly!'));
}
// Accept any new clients.
@@ -190,7 +190,7 @@
$key = last_key($clients);
$client->setName($key);
- $this->log($client, 'Connected');
+ $this->log($client, pht('Connected'));
$this->idleSince = time();
// Check if we've hit the client limit. If there's a configured
@@ -216,7 +216,7 @@
continue;
}
- $this->log($client, 'Disconnected');
+ $this->log($client, pht('Disconnected'));
unset($clients[$key]);
// If we have a client limit and we've served that many clients, exit.
@@ -224,7 +224,7 @@
if ($this->clientLimit) {
if ($this->lifetimeClientCount >= $this->clientLimit) {
if (!$clients) {
- $this->log(null, 'Exiting (Client Limit)');
+ $this->log(null, pht('Exiting (Client Limit)'));
return;
}
}
@@ -236,11 +236,11 @@
if ($this->idleLimit) {
$remaining = $this->idleLimit - (time() - $this->idleSince);
if ($remaining <= 0) {
- $this->log(null, 'Exiting (Idle Limit)');
+ $this->log(null, pht('Exiting (Idle Limit)'));
return;
}
if ($remaining <= 5) {
- $this->log(null, 'Exiting in '.$remaining.' seconds');
+ $this->log(null, pht('Exiting in %d seconds', $remaining));
}
}
}
@@ -312,7 +312,7 @@
// Log the elapsed time.
$t_end = microtime(true);
$t = 1000000 * ($t_end - $t_start);
- $this->log($client, '< '.number_format($t, 0).'us');
+ $this->log($client, pht('< %sus', number_format($t, 0)));
$this->idleSince = time();
@@ -349,12 +349,15 @@
if ($errno || !$socket) {
throw new Exception(
- "Unable to start socket! Error #{$errno}: {$errstr}");
+ pht(
+ 'Unable to start socket! Error #%d: %s',
+ $errno,
+ $errstr));
}
$ok = stream_set_blocking($socket, 0);
if ($ok === false) {
- throw new Exception('Unable to set socket nonblocking!');
+ throw new Exception(pht('Unable to set socket nonblocking!'));
}
return $socket;
@@ -438,9 +441,15 @@
}
if ($client) {
- $message = '[Client '.$client->getName().'] '.$message;
+ $message = sprintf(
+ '[%s] %s',
+ pht('Client %s', $client->getName()),
+ $message);
} else {
- $message = '[Server] '.$message;
+ $message = sprintf(
+ '[%s] %s',
+ pht('Server'),
+ $message);
}
echo $message."\n";
@@ -461,7 +470,7 @@
$pid = pcntl_fork();
if ($pid === -1) {
- throw new Exception('Unable to fork!');
+ throw new Exception(pht('Unable to fork!'));
} else if ($pid) {
// 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
diff --git a/src/hgdaemon/ArcanistHgServerChannel.php b/src/hgdaemon/ArcanistHgServerChannel.php
--- a/src/hgdaemon/ArcanistHgServerChannel.php
+++ b/src/hgdaemon/ArcanistHgServerChannel.php
@@ -86,7 +86,8 @@
*/
protected function encodeMessage($argv) {
if (!is_array($argv)) {
- throw new Exception('Message to Mercurial server should be an array.');
+ throw new Exception(
+ pht('Message to Mercurial server should be an array.'));
}
$command = head($argv);
diff --git a/src/lint/ArcanistLintPatcher.php b/src/lint/ArcanistLintPatcher.php
--- a/src/lint/ArcanistLintPatcher.php
+++ b/src/lint/ArcanistLintPatcher.php
@@ -49,8 +49,10 @@
list($err) = exec_manual('mv -f %s %s', $lint, $path);
if ($err) {
throw new Exception(
- "Unable to overwrite path `{$path}', patched version was left ".
- "at `{$lint}'.");
+ pht(
+ "Unable to overwrite path '%s', patched version was left at '%s'.",
+ $path,
+ $lint));
}
foreach ($this->applyMessages as $message) {
@@ -114,7 +116,7 @@
}
if ($line_num >= count($this->lineOffsets)) {
- throw new Exception("Data has fewer than `{$line}' lines.");
+ throw new Exception(pht('Data has fewer than %d lines.', $line));
}
return idx($this->lineOffsets, $line_num);
diff --git a/src/lint/ArcanistLintSeverity.php b/src/lint/ArcanistLintSeverity.php
--- a/src/lint/ArcanistLintSeverity.php
+++ b/src/lint/ArcanistLintSeverity.php
@@ -13,11 +13,11 @@
public static function getLintSeverities() {
return array(
- self::SEVERITY_ADVICE => 'Advice',
- self::SEVERITY_AUTOFIX => 'Auto-Fix',
- self::SEVERITY_WARNING => 'Warning',
- self::SEVERITY_ERROR => 'Error',
- self::SEVERITY_DISABLED => 'Disabled',
+ self::SEVERITY_ADVICE => pht('Advice'),
+ self::SEVERITY_AUTOFIX => pht('Auto-Fix'),
+ self::SEVERITY_WARNING => pht('Warning'),
+ self::SEVERITY_ERROR => pht('Error'),
+ self::SEVERITY_DISABLED => pht('Disabled'),
);
}
@@ -25,7 +25,7 @@
$map = self::getLintSeverities();
if (!array_key_exists($severity_code, $map)) {
- throw new Exception("Unknown lint severity '{$severity_code}'!");
+ throw new Exception(pht("Unknown lint severity '%s'!", $severity_code));
}
return $map[$severity_code];
diff --git a/src/lint/engine/ArcanistLintEngine.php b/src/lint/engine/ArcanistLintEngine.php
--- a/src/lint/engine/ArcanistLintEngine.php
+++ b/src/lint/engine/ArcanistLintEngine.php
@@ -168,7 +168,7 @@
final public function run() {
$linters = $this->buildLinters();
if (!$linters) {
- throw new ArcanistNoEffectException('No linters to run.');
+ throw new ArcanistNoEffectException(pht('No linters to run.'));
}
foreach ($linters as $key => $linter) {
@@ -189,7 +189,7 @@
}
if (!$have_paths) {
- throw new ArcanistNoEffectException('No paths are lintable.');
+ throw new ArcanistNoEffectException(pht('No paths are lintable.'));
}
$versions = array($this->getCacheVersion());
@@ -272,7 +272,9 @@
}
if ($exceptions) {
- throw new PhutilAggregateException('Some linters failed:', $exceptions);
+ throw new PhutilAggregateException(
+ pht('Some linters failed:'),
+ $exceptions);
}
return $this->results;
diff --git a/src/lint/linter/ArcanistBaseXHPASTLinter.php b/src/lint/linter/ArcanistBaseXHPASTLinter.php
--- a/src/lint/linter/ArcanistBaseXHPASTLinter.php
+++ b/src/lint/linter/ArcanistBaseXHPASTLinter.php
@@ -132,8 +132,9 @@
throw new Exception(
pht(
'Imbalanced calls to shared futures: each call to '.
- 'buildSharedFutures() for a path must be paired with a call to '.
- 'releaseSharedFutures().'));
+ '%s for a path must be paired with a call to %s.',
+ 'buildSharedFutures()',
+ 'releaseSharedFutures()'));
}
$this->refcount[$path]--;
diff --git a/src/lint/linter/ArcanistCSharpLinter.php b/src/lint/linter/ArcanistCSharpLinter.php
--- a/src/lint/linter/ArcanistCSharpLinter.php
+++ b/src/lint/linter/ArcanistCSharpLinter.php
@@ -62,12 +62,14 @@
foreach ($map as $code => $severity) {
if (substr($code, 0, 2) === 'SA' && $severity == 'disabled') {
throw new Exception(
- "In order to keep StyleCop integration with IDEs and other tools ".
- "consistent with Arcanist results, you aren't permitted to ".
- "disable StyleCop rules within '.arclint'. ".
- "Instead configure the severity using the StyleCop settings dialog ".
- "(usually accessible from within your IDE). StyleCop settings ".
- "for your project will be used when linting for Arcanist.");
+ pht(
+ "In order to keep StyleCop integration with IDEs and other tools ".
+ "consistent with Arcanist results, you aren't permitted to ".
+ "disable StyleCop rules within '%s'. Instead configure the ".
+ "severity using the StyleCop settings dialog (usually accessible ".
+ "from within your IDE). StyleCop settings for your project will ".
+ "be used when linting for Arcanist.",
+ '.arclint'));
}
}
return parent::setCustomSeverityMap($map);
@@ -92,7 +94,8 @@
} else if (Filesystem::binaryExists('mono')) {
$this->runtimeEngine = 'mono ';
} else {
- throw new Exception('Unable to find Mono and you are not on Windows!');
+ throw new Exception(
+ pht('Unable to find Mono and you are not on Windows!'));
}
// Determine cslint path.
@@ -102,7 +105,7 @@
} else if (Filesystem::binaryExists('cslint.exe')) {
$this->cslintEngine = 'cslint.exe';
} else {
- throw new Exception('Unable to locate cslint.');
+ throw new Exception(pht('Unable to locate %s.', 'cslint'));
}
// Determine cslint version.
@@ -112,18 +115,27 @@
list($err, $stdout, $stderr) = $ver_future->resolve();
if ($err !== 0) {
throw new Exception(
- 'You are running an old version of cslint. Please '.
- 'upgrade to version '.self::SUPPORTED_VERSION.'.');
+ pht(
+ 'You are running an old version of %s. Please '.
+ 'upgrade to version %s.',
+ 'cslint',
+ self::SUPPORTED_VERSION));
}
$ver = (int)$stdout;
if ($ver < self::SUPPORTED_VERSION) {
throw new Exception(
- 'You are running an old version of cslint. Please '.
- 'upgrade to version '.self::SUPPORTED_VERSION.'.');
+ pht(
+ 'You are running an old version of %s. Please '.
+ 'upgrade to version %s.',
+ 'cslint',
+ self::SUPPORTED_VERSION));
} else if ($ver > self::SUPPORTED_VERSION) {
throw new Exception(
- 'Arcanist does not support this version of cslint (it is '.
- 'newer). You can try upgrading Arcanist with `arc upgrade`.');
+ pht(
+ 'Arcanist does not support this version of %s (it is newer). '.
+ 'You can try upgrading Arcanist with `%s`.',
+ 'cslint',
+ 'arc upgrade'));
}
$this->loaded = true;
diff --git a/src/lint/linter/ArcanistCppcheckLinter.php b/src/lint/linter/ArcanistCppcheckLinter.php
--- a/src/lint/linter/ArcanistCppcheckLinter.php
+++ b/src/lint/linter/ArcanistCppcheckLinter.php
@@ -14,7 +14,9 @@
}
public function getInfoDescription() {
- return pht('Use `cppcheck` to perform static analysis on C/C++ code.');
+ return pht(
+ 'Use `%s` to perform static analysis on C/C++ code.',
+ 'cppcheck');
}
public function getLinterName() {
@@ -49,7 +51,9 @@
}
public function getInstallInstructions() {
- return pht('Install Cppcheck using `apt-get install cppcheck` or similar.');
+ return pht(
+ 'Install Cppcheck using `%s` or similar.',
+ 'apt-get install cppcheck');
}
protected function getMandatoryFlags() {
diff --git a/src/lint/linter/ArcanistCpplintLinter.php b/src/lint/linter/ArcanistCpplintLinter.php
--- a/src/lint/linter/ArcanistCpplintLinter.php
+++ b/src/lint/linter/ArcanistCpplintLinter.php
@@ -25,8 +25,10 @@
}
public function getInstallInstructions() {
- return pht('Install cpplint.py using `wget http://google-styleguide.'.
- 'googlecode.com/svn/trunk/cpplint/cpplint.py`.');
+ return pht(
+ 'Install cpplint.py using `%s`.',
+ 'wget http://google-styleguide.googlecode.com'.
+ '/svn/trunk/cpplint/cpplint.py');
}
protected function getDefaultFlags() {
diff --git a/src/lint/linter/ArcanistFlake8Linter.php b/src/lint/linter/ArcanistFlake8Linter.php
--- a/src/lint/linter/ArcanistFlake8Linter.php
+++ b/src/lint/linter/ArcanistFlake8Linter.php
@@ -16,8 +16,9 @@
public function getInfoDescription() {
return pht(
- 'Uses `flake8` to run several linters (PyFlakes, pep8, and a McCabe '.
- 'complexity checker) on Python source files.');
+ 'Uses `%s` to run several linters (PyFlakes, pep8, and a McCabe '.
+ 'complexity checker) on Python source files.',
+ 'flake8');
}
public function getLinterName() {
@@ -55,7 +56,7 @@
}
public function getInstallInstructions() {
- return pht('Install flake8 using `easy_install flake8`.');
+ return pht('Install flake8 using `%s`.', 'easy_install flake8');
}
protected function parseLinterOutput($path, $err, $stdout, $stderr) {
diff --git a/src/lint/linter/ArcanistGeneratedLinter.php b/src/lint/linter/ArcanistGeneratedLinter.php
--- a/src/lint/linter/ArcanistGeneratedLinter.php
+++ b/src/lint/linter/ArcanistGeneratedLinter.php
@@ -11,8 +11,8 @@
public function getInfoDescription() {
return pht(
- 'Disables lint for files that are marked as "%s", indicating that they '.
- 'contain generated code.',
+ 'Disables lint for files that are marked as "%s", '.
+ 'indicating that they contain generated code.',
'@'.'generated');
}
diff --git a/src/lint/linter/ArcanistGoLintLinter.php b/src/lint/linter/ArcanistGoLintLinter.php
--- a/src/lint/linter/ArcanistGoLintLinter.php
+++ b/src/lint/linter/ArcanistGoLintLinter.php
@@ -27,7 +27,9 @@
}
public function getInstallInstructions() {
- return pht('Install Golint using `go get github.com/golang/lint/golint`.');
+ return pht(
+ 'Install Golint using `%s`.',
+ 'go get github.com/golang/lint/golint');
}
public function shouldExpectCommandErrors() {
diff --git a/src/lint/linter/ArcanistHLintLinter.php b/src/lint/linter/ArcanistHLintLinter.php
--- a/src/lint/linter/ArcanistHLintLinter.php
+++ b/src/lint/linter/ArcanistHLintLinter.php
@@ -30,7 +30,7 @@
}
public function getInstallInstructions() {
- return pht('Install hlint with `cabal install hlint`.');
+ return pht('Install hlint with `%s`.', 'cabal install hlint');
}
protected function getMandatoryFlags() {
@@ -50,7 +50,6 @@
}
protected function parseLinterOutput($path, $err, $stdout, $stderr) {
-
$json = phutil_json_decode($stdout);
$messages = array();
foreach ($json as $fix) {
@@ -71,13 +70,17 @@
all necessary notes too. */
$notes = '';
foreach ($fix['note'] as $note) {
- $notes .= ' **NOTE**: '.trim($note, '"').'.';
+ $notes .= phutil_console_format(
+ ' **%s**: %s.',
+ pht('NOTE'),
+ trim($note, '"'));
}
$message->setDescription(
pht(
- 'In module `%s`, declaration `%s`.%s',
- $fix['module'], $fix['decl'], $notes));
+ 'In module `%s`, declaration `%s`.',
+ $fix['module'],
+ $fix['decl']).$notes);
switch ($fix['severity']) {
case 'Error':
diff --git a/src/lint/linter/ArcanistJSHintLinter.php b/src/lint/linter/ArcanistJSHintLinter.php
--- a/src/lint/linter/ArcanistJSHintLinter.php
+++ b/src/lint/linter/ArcanistJSHintLinter.php
@@ -17,7 +17,9 @@
}
public function getInfoDescription() {
- return pht('Use `jshint` to detect issues with JavaScript source files.');
+ return pht(
+ 'Use `%s` to detect issues with JavaScript source files.',
+ 'jshint');
}
public function getLinterName() {
@@ -70,7 +72,7 @@
}
public function getInstallInstructions() {
- return pht('Install JSHint using `npm install -g jshint`.');
+ return pht('Install JSHint using `%s`.', 'npm install -g jshint');
}
protected function getMandatoryFlags() {
diff --git a/src/lint/linter/ArcanistJSONLintLinter.php b/src/lint/linter/ArcanistJSONLintLinter.php
--- a/src/lint/linter/ArcanistJSONLintLinter.php
+++ b/src/lint/linter/ArcanistJSONLintLinter.php
@@ -14,7 +14,7 @@
}
public function getInfoDescription() {
- return pht('Use `jsonlint` to detect syntax errors in JSON files.');
+ return pht('Use `%s` to detect syntax errors in JSON files.', 'jsonlint');
}
public function getLinterName() {
@@ -44,7 +44,7 @@
}
public function getInstallInstructions() {
- return pht('Install jsonlint using `npm install -g jsonlint`.');
+ return pht('Install jsonlint using `%s`.', 'npm install -g jsonlint');
}
protected function getMandatoryFlags() {
diff --git a/src/lint/linter/ArcanistJscsLinter.php b/src/lint/linter/ArcanistJscsLinter.php
--- a/src/lint/linter/ArcanistJscsLinter.php
+++ b/src/lint/linter/ArcanistJscsLinter.php
@@ -14,7 +14,9 @@
}
public function getInfoDescription() {
- return pht('Use `jscs` to detect issues with Javascript source files.');
+ return pht(
+ 'Use `%s` to detect issues with Javascript source files.',
+ 'jscs');
}
public function getLinterName() {
@@ -42,7 +44,7 @@
}
public function getInstallInstructions() {
- return pht('Install JSCS using `npm install -g jscs`.');
+ return pht('Install JSCS using `%s`.', 'npm install -g jscs');
}
protected function getMandatoryFlags() {
@@ -66,7 +68,7 @@
$options = array(
'jscs.config' => array(
'type' => 'optional string',
- 'help' => pht('Pass in a custom jscsrc file path.'),
+ 'help' => pht('Pass in a custom %s file path.', 'jscsrc'),
),
'jscs.preset' => array(
'type' => 'optional string',
diff --git a/src/lint/linter/ArcanistLesscLinter.php b/src/lint/linter/ArcanistLesscLinter.php
--- a/src/lint/linter/ArcanistLesscLinter.php
+++ b/src/lint/linter/ArcanistLesscLinter.php
@@ -20,7 +20,7 @@
private $strictUnits = false;
public function getInfoName() {
- return pht('Less');
+ return 'Less';
}
public function getInfoURI() {
@@ -29,8 +29,10 @@
public function getInfoDescription() {
return pht(
- 'Use the `--lint` mode provided by `lessc` to detect errors in Less '.
- 'source files.');
+ 'Use the `%s` mode provided by `%s` to detect errors in '.
+ 'Less source files.',
+ '--lint',
+ 'lessc');
}
public function getLinterName() {
@@ -98,7 +100,7 @@
}
public function getInstallInstructions() {
- return pht('Install lessc using `npm install -g less`.');
+ return pht('Install lessc using `%s`.', 'npm install -g less');
}
protected function getMandatoryFlags() {
@@ -154,9 +156,10 @@
break;
default:
- throw new RuntimeException(pht(
- 'Unrecognized lint message code "%s".',
- $code));
+ throw new RuntimeException(
+ pht(
+ 'Unrecognized lint message code "%s".',
+ $code));
}
$code = $this->getLintCodeFromLinterConfigurationKey($matches['name']);
diff --git a/src/lint/linter/ArcanistLinter.php b/src/lint/linter/ArcanistLinter.php
--- a/src/lint/linter/ArcanistLinter.php
+++ b/src/lint/linter/ArcanistLinter.php
@@ -382,7 +382,7 @@
if (isset($map[$code])) {
return $map[$code];
}
- return 'Unknown lint message!';
+ return pht('Unknown lint message!');
}
final protected function addLintMessage(ArcanistLintMessage $message) {
@@ -511,10 +511,10 @@
public function setLinterConfigurationValue($key, $value) {
$sev_map = array(
- 'error' => ArcanistLintSeverity::SEVERITY_ERROR,
- 'warning' => ArcanistLintSeverity::SEVERITY_WARNING,
- 'autofix' => ArcanistLintSeverity::SEVERITY_AUTOFIX,
- 'advice' => ArcanistLintSeverity::SEVERITY_ADVICE,
+ 'error' => ArcanistLintSeverity::SEVERITY_ERROR,
+ 'warning' => ArcanistLintSeverity::SEVERITY_WARNING,
+ 'autofix' => ArcanistLintSeverity::SEVERITY_AUTOFIX,
+ 'advice' => ArcanistLintSeverity::SEVERITY_ADVICE,
'disabled' => ArcanistLintSeverity::SEVERITY_DISABLED,
);
@@ -566,7 +566,7 @@
return;
}
- throw new Exception("Incomplete implementation: {$key}!");
+ throw new Exception(pht('Incomplete implementation: %s!', $key));
}
protected function canCustomizeLintSeverities() {
@@ -637,9 +637,10 @@
pht('Deprecation Warning'),
pht(
'Configuration option "%s" is deprecated. Generally, linters should '.
- 'now be configured using an `.arclint` file. See "Arcanist User '.
+ 'now be configured using an `%s` file. See "Arcanist User '.
'Guide: Lint" in the documentation for more information.',
- $key));
+ $key,
+ '.arclint'));
return $result;
}
diff --git a/src/lint/linter/ArcanistPEP8Linter.php b/src/lint/linter/ArcanistPEP8Linter.php
--- a/src/lint/linter/ArcanistPEP8Linter.php
+++ b/src/lint/linter/ArcanistPEP8Linter.php
@@ -67,7 +67,7 @@
}
public function getInstallInstructions() {
- return pht('Install PEP8 using `easy_install pep8`.');
+ return pht('Install PEP8 using `%s`.', 'easy_install pep8');
}
protected function parseLinterOutput($path, $err, $stdout, $stderr) {
diff --git a/src/lint/linter/ArcanistPhpLinter.php b/src/lint/linter/ArcanistPhpLinter.php
--- a/src/lint/linter/ArcanistPhpLinter.php
+++ b/src/lint/linter/ArcanistPhpLinter.php
@@ -94,7 +94,7 @@
return self::LINT_FATAL_ERROR;
default:
- throw new Exception(pht('Unrecognized lint message code "%s"', $code));
+ throw new Exception(pht('Unrecognized lint message code: "%s"', $code));
}
}
diff --git a/src/lint/linter/ArcanistPhpcsLinter.php b/src/lint/linter/ArcanistPhpcsLinter.php
--- a/src/lint/linter/ArcanistPhpcsLinter.php
+++ b/src/lint/linter/ArcanistPhpcsLinter.php
@@ -30,7 +30,7 @@
}
public function getInstallInstructions() {
- return pht('Install PHPCS with `pear install PHP_CodeSniffer`.');
+ return pht('Install PHPCS with `%s`.', 'pear install PHP_CodeSniffer');
}
public function getLinterConfigurationOptions() {
@@ -152,7 +152,10 @@
protected function getLintCodeFromLinterConfigurationKey($code) {
if (!preg_match('/^PHPCS\\.(E|W)\\./', $code)) {
throw new Exception(
- "Invalid severity code '{$code}', should begin with 'PHPCS.'.");
+ pht(
+ "Invalid severity code '%s', should begin with '%s.'.",
+ $code,
+ 'PHPCS'));
}
return $code;
}
diff --git a/src/lint/linter/ArcanistPhutilXHPASTLinter.php b/src/lint/linter/ArcanistPhutilXHPASTLinter.php
--- a/src/lint/linter/ArcanistPhutilXHPASTLinter.php
+++ b/src/lint/linter/ArcanistPhutilXHPASTLinter.php
@@ -39,16 +39,13 @@
public function getLintNameMap() {
return array(
self::LINT_ARRAY_COMBINE => pht(
- '%s Unreliable',
- 'array_combine()'),
+ '%s Unreliable', 'array_combine()'),
self::LINT_DEPRECATED_FUNCTION => pht(
'Use of Deprecated Function'),
self::LINT_UNSAFE_DYNAMIC_STRING => pht(
'Unsafe Usage of Dynamic String'),
self::LINT_RAGGED_CLASSTREE_EDGE => pht(
- 'Class Not %s Or %s',
- 'abstract',
- 'final'),
+ 'Class Not %s Or %s', 'abstract', 'final'),
);
}
diff --git a/src/lint/linter/ArcanistPyFlakesLinter.php b/src/lint/linter/ArcanistPyFlakesLinter.php
--- a/src/lint/linter/ArcanistPyFlakesLinter.php
+++ b/src/lint/linter/ArcanistPyFlakesLinter.php
@@ -50,7 +50,7 @@
}
public function getInstallInstructions() {
- return pht('Install pyflakes with `pip install pyflakes`.');
+ return pht('Install pyflakes with `%s`.', 'pip install pyflakes');
}
protected function parseLinterOutput($path, $err, $stdout, $stderr) {
diff --git a/src/lint/linter/ArcanistPyLintLinter.php b/src/lint/linter/ArcanistPyLintLinter.php
--- a/src/lint/linter/ArcanistPyLintLinter.php
+++ b/src/lint/linter/ArcanistPyLintLinter.php
@@ -63,10 +63,13 @@
if (!$error_regexp && !$warning_regexp && !$advice_regexp) {
throw new ArcanistUsageException(
- "You are invoking the PyLint linter but have not configured any of ".
- "'lint.pylint.codes.error', 'lint.pylint.codes.warning', or ".
- "'lint.pylint.codes.advice'. Consult the documentation for ".
- "ArcanistPyLintLinter.");
+ pht(
+ "You are invoking the PyLint linter but have not configured any of ".
+ "'%s', '%s', or '%s'. Consult the documentation for %s.",
+ 'lint.pylint.codes.error',
+ 'lint.pylint.codes.warning',
+ 'lint.pylint.codes.advice',
+ __CLASS__));
}
$code_map = array(
@@ -109,10 +112,13 @@
list($err) = exec_manual('which %s', $pylint_bin);
if ($err) {
throw new ArcanistMissingLinterException(
- "PyLint does not appear to be installed on this system. Install it ".
- "(e.g., with 'sudo easy_install pylint') or configure ".
- "'lint.pylint.prefix' in your .arcconfig to point to the directory ".
- "where it resides.");
+ pht(
+ "PyLint does not appear to be installed on this system. Install ".
+ "it (e.g., with '%s') or configure '%s' in your %s to point to ".
+ "the directory where it resides.",
+ 'sudo easy_install pylint',
+ 'lint.pylint.prefix',
+ '.arcconfig'));
}
}
diff --git a/src/lint/linter/ArcanistRuboCopLinter.php b/src/lint/linter/ArcanistRuboCopLinter.php
--- a/src/lint/linter/ArcanistRuboCopLinter.php
+++ b/src/lint/linter/ArcanistRuboCopLinter.php
@@ -99,9 +99,9 @@
return $messages;
}
- /*
- Take the string from RuboCop's severity terminology and return an
- ArcanistLintSeverity
+ /**
+ * Take the string from RuboCop's severity terminology and return an
+ * @{class:ArcanistLintSeverity}.
*/
protected function getDefaultMessageSeverity($code) {
switch ($code) {
diff --git a/src/lint/linter/ArcanistRubyLinter.php b/src/lint/linter/ArcanistRubyLinter.php
--- a/src/lint/linter/ArcanistRubyLinter.php
+++ b/src/lint/linter/ArcanistRubyLinter.php
@@ -14,7 +14,9 @@
}
public function getInfoDescription() {
- return pht('Use `ruby` to check for syntax errors in Ruby source files.');
+ return pht(
+ 'Use `%s` to check for syntax errors in Ruby source files.',
+ 'ruby');
}
public function getLinterName() {
@@ -47,7 +49,7 @@
}
public function getInstallInstructions() {
- return pht('Install `ruby` from <http://www.ruby-lang.org/>.');
+ return pht('Install `%s` from <%s>.', 'ruby', 'http://www.ruby-lang.org/');
}
protected function getMandatoryFlags() {
diff --git a/src/lint/linter/ArcanistScriptAndRegexLinter.php b/src/lint/linter/ArcanistScriptAndRegexLinter.php
--- a/src/lint/linter/ArcanistScriptAndRegexLinter.php
+++ b/src/lint/linter/ArcanistScriptAndRegexLinter.php
@@ -256,7 +256,7 @@
'code' => idx($match, 'code', $this->getLinterName()),
'severity' => $this->getMatchSeverity($match),
'name' => idx($match, 'name', 'Lint'),
- 'description' => idx($match, 'message', 'Undefined Lint Message'),
+ 'description' => idx($match, 'message', pht('Undefined Lint Message')),
);
$original = idx($match, 'original');
diff --git a/src/lint/linter/ArcanistXMLLinter.php b/src/lint/linter/ArcanistXMLLinter.php
--- a/src/lint/linter/ArcanistXMLLinter.php
+++ b/src/lint/linter/ArcanistXMLLinter.php
@@ -45,7 +45,7 @@
->setLine($error->line)
->setChar($error->column ? $error->column : null)
->setCode($this->getLintMessageFullCode($error->code))
- ->setName('LibXML Error')
+ ->setName(pht('LibXML Error'))
->setDescription(trim($error->message));
switch ($error->level) {
diff --git a/src/lint/linter/__tests__/ArcanistCppcheckLinterTestCase.php b/src/lint/linter/__tests__/ArcanistCppcheckLinterTestCase.php
--- a/src/lint/linter/__tests__/ArcanistCppcheckLinterTestCase.php
+++ b/src/lint/linter/__tests__/ArcanistCppcheckLinterTestCase.php
@@ -4,7 +4,7 @@
extends ArcanistExternalLinterTestCase {
public function testLinter() {
- return $this->executeTestsInDirectory(dirname(__FILE__).'/cppcheck/');
+ $this->executeTestsInDirectory(dirname(__FILE__).'/cppcheck/');
}
}
diff --git a/src/lint/linter/__tests__/ArcanistCpplintLinterTestCase.php b/src/lint/linter/__tests__/ArcanistCpplintLinterTestCase.php
--- a/src/lint/linter/__tests__/ArcanistCpplintLinterTestCase.php
+++ b/src/lint/linter/__tests__/ArcanistCpplintLinterTestCase.php
@@ -4,7 +4,7 @@
extends ArcanistExternalLinterTestCase {
public function testLinter() {
- return $this->executeTestsInDirectory(dirname(__FILE__).'/cpplint/');
+ $this->executeTestsInDirectory(dirname(__FILE__).'/cpplint/');
}
}
diff --git a/src/lint/linter/__tests__/ArcanistLinterTestCase.php b/src/lint/linter/__tests__/ArcanistLinterTestCase.php
--- a/src/lint/linter/__tests__/ArcanistLinterTestCase.php
+++ b/src/lint/linter/__tests__/ArcanistLinterTestCase.php
@@ -47,7 +47,10 @@
$this->assertTrue(
($test_count > 0),
- pht('Expected to find some .lint-test tests in directory %s!', $root));
+ pht(
+ 'Expected to find some %s tests in directory %s!',
+ '.lint-test',
+ $root));
}
private function lintFile($file, ArcanistLinter $linter) {
diff --git a/src/lint/linter/__tests__/ArcanistNoLintLinterTestCase.php b/src/lint/linter/__tests__/ArcanistNoLintLinterTestCase.php
--- a/src/lint/linter/__tests__/ArcanistNoLintLinterTestCase.php
+++ b/src/lint/linter/__tests__/ArcanistNoLintLinterTestCase.php
@@ -3,7 +3,7 @@
final class ArcanistNoLintLinterTestCase extends ArcanistLinterTestCase {
public function testLinter() {
- return $this->executeTestsInDirectory(dirname(__FILE__).'/nolint/');
+ $this->executeTestsInDirectory(dirname(__FILE__).'/nolint/');
}
}
diff --git a/src/lint/linter/__tests__/ArcanistPhutilXHPASTLinterTestCase.php b/src/lint/linter/__tests__/ArcanistPhutilXHPASTLinterTestCase.php
--- a/src/lint/linter/__tests__/ArcanistPhutilXHPASTLinterTestCase.php
+++ b/src/lint/linter/__tests__/ArcanistPhutilXHPASTLinterTestCase.php
@@ -5,7 +5,7 @@
public function testLinter() {
$linter = new ArcanistPhutilXHPASTLinter();
$linter->setDeprecatedFunctions(array(
- 'deprecated_function' => 'This function is most likely deprecated.',
+ 'deprecated_function' => pht('This function is most likely deprecated.'),
));
$this->executeTestsInDirectory(dirname(__FILE__).'/phlxhp/', $linter);
diff --git a/src/lint/linter/__tests__/ArcanistPyLintLinterTestCase.php b/src/lint/linter/__tests__/ArcanistPyLintLinterTestCase.php
--- a/src/lint/linter/__tests__/ArcanistPyLintLinterTestCase.php
+++ b/src/lint/linter/__tests__/ArcanistPyLintLinterTestCase.php
@@ -4,7 +4,7 @@
extends ArcanistExternalLinterTestCase {
public function testLinter() {
- return $this->executeTestsInDirectory(dirname(__FILE__).'/pylint/');
+ $this->executeTestsInDirectory(dirname(__FILE__).'/pylint/');
}
}
diff --git a/src/lint/renderer/ArcanistConsoleLintRenderer.php b/src/lint/renderer/ArcanistConsoleLintRenderer.php
--- a/src/lint/renderer/ArcanistConsoleLintRenderer.php
+++ b/src/lint/renderer/ArcanistConsoleLintRenderer.php
@@ -44,7 +44,9 @@
idx($location, 'path', $path).
(!empty($location['line']) ? ":{$location['line']}" : '');
}
- $description .= "\nOther locations: ".implode(', ', $locations);
+ $description .= "\n".pht(
+ 'Other locations: %s',
+ implode(', ', $locations));
}
$text[] = phutil_console_format(
@@ -60,7 +62,11 @@
}
if ($text) {
- $prefix = phutil_console_format("**>>>** Lint for __%s__:\n\n\n", $path);
+ $prefix = phutil_console_format(
+ "**>>>** %s\n\n\n",
+ pht(
+ 'Lint for %s:',
+ phutil_console_format('__%s__', $path)));
return $prefix.implode("\n", $text);
} else {
return null;
@@ -234,7 +240,9 @@
public function renderOkayResult() {
return phutil_console_format(
- "<bg:green>** OKAY **</bg> No lint warnings.\n");
+ "<bg:green>** %s **</bg> %s\n",
+ pht('OKAY'),
+ pht('No lint warnings.'));
}
}
diff --git a/src/lint/renderer/ArcanistSummaryLintRenderer.php b/src/lint/renderer/ArcanistSummaryLintRenderer.php
--- a/src/lint/renderer/ArcanistSummaryLintRenderer.php
+++ b/src/lint/renderer/ArcanistSummaryLintRenderer.php
@@ -24,7 +24,9 @@
public function renderOkayResult() {
return phutil_console_format(
- "<bg:green>** OKAY **</bg> No lint warnings.\n");
+ "<bg:green>** %s **</bg> %s\n",
+ pht('OKAY'),
+ pht('No lint warnings.'));
}
}
diff --git a/src/parser/ArcanistBaseCommitParser.php b/src/parser/ArcanistBaseCommitParser.php
--- a/src/parser/ArcanistBaseCommitParser.php
+++ b/src/parser/ArcanistBaseCommitParser.php
@@ -22,8 +22,10 @@
foreach ($spec as $rule) {
if (strpos($rule, ':') === false) {
throw new ArcanistUsageException(
- "Rule '{$rule}' is invalid, it must have a type and name like ".
- "'arc:upstream'.");
+ pht(
+ "Rule '%s' is invalid, it must have a type and name like '%s'.",
+ $rule,
+ 'arc:upstream'));
}
}
@@ -61,16 +63,16 @@
$source = head($this->try);
if (!idx($specs, $source)) {
- $this->log("No rules left from source '{$source}'.");
+ $this->log(pht("No rules left from source '%s'.", $source));
array_shift($this->try);
continue;
}
- $this->log("Trying rules from source '{$source}'.");
+ $this->log(pht("Trying rules from source '%s'.", $source));
$rules = &$specs[$source];
while ($rule = array_shift($rules)) {
- $this->log("Trying rule '{$rule}'.");
+ $this->log(pht("Trying rule '%s'.", $rule));
$commit = $this->resolveRule($rule, $source);
@@ -78,7 +80,10 @@
// If a rule returns false, it means to go to the next ruleset.
break;
} else if ($commit !== null) {
- $this->log("Resolved commit '{$commit}' from rule '{$rule}'.");
+ $this->log(pht(
+ "Resolved commit '%s' from rule '%s'.",
+ $commit,
+ $rule));
return $commit;
}
}
@@ -105,8 +110,11 @@
return $this->resolveArcRule($rule, $name, $source);
default:
throw new ArcanistUsageException(
- "Base commit rule '{$rule}' (from source '{$source}') ".
- "is not a recognized rule.");
+ pht(
+ "Base commit rule '%s' (from source '%s') ".
+ "is not a recognized rule.",
+ $rule,
+ $source));
}
}
@@ -120,12 +128,12 @@
switch ($name) {
case 'verbose':
$this->verbose = true;
- $this->log('Enabled verbose mode.');
+ $this->log(pht('Enabled verbose mode.'));
break;
case 'prompt':
- $reason = 'it is what you typed when prompted.';
+ $reason = pht('it is what you typed when prompted.');
$this->api->setBaseCommitExplanation($reason);
- return phutil_console_prompt('Against which commit?');
+ return phutil_console_prompt(pht('Against which commit?'));
case 'local':
case 'user':
case 'project':
@@ -133,17 +141,17 @@
case 'system':
// Push the other source on top of the list.
array_unshift($this->try, $name);
- $this->log("Switching to source '{$name}'.");
+ $this->log(pht("Switching to source '%s'.", $name));
return false;
case 'yield':
// Cycle this source to the end of the list.
$this->try[] = array_shift($this->try);
- $this->log("Yielding processing of rules from '{$source}'.");
+ $this->log(pht("Yielding processing of rules from '%s'.", $source));
return false;
case 'halt':
// Dump the whole stack.
$this->try = array();
- $this->log('Halting all rule processing.');
+ $this->log(pht('Halting all rule processing.'));
return false;
case 'skip':
return null;
@@ -171,8 +179,11 @@
}
throw new ArcanistUsageException(
- "Base commit rule '{$rule}' (from source '{$source}') ".
- "is not a recognized rule.");
+ pht(
+ "Base commit rule '%s' (from source '%s') ".
+ "is not a recognized rule.",
+ $rule,
+ $source));
}
}
@@ -183,7 +194,7 @@
);
$new_name = idx($updated, $name);
if ($new_name) {
- $this->log("translating legacy name '$name' to '$new_name'");
+ $this->log(pht("Translating legacy name '%s' to '%s'", $name, $new_name));
return $new_name;
}
return $name;
diff --git a/src/parser/ArcanistBundle.php b/src/parser/ArcanistBundle.php
--- a/src/parser/ArcanistBundle.php
+++ b/src/parser/ArcanistBundle.php
@@ -124,7 +124,7 @@
return phutil_is_windows() ? "\r\n" : "\n";
default:
throw new Exception(
- "Unknown patch type '{$patch_type}'!");
+ pht("Unknown patch type '%s'!", $patch_type));
}
}
@@ -373,7 +373,9 @@
if (!$decompose_okay) {
throw new Exception(
- 'Failed to decompose multicopy changeset in order to generate diff.');
+ pht(
+ 'Failed to decompose multicopy changeset in '.
+ 'order to generate diff.'));
}
}
@@ -687,9 +689,11 @@
if ($this->conduit) {
if ($name) {
- $console->writeErr("Downloading binary data for '%s'...\n", $name);
+ $console->writeErr(
+ "%s\n",
+ pht("Downloading binary data for '%s'...", $name));
} else {
- $console->writeErr("Downloading binary data...\n");
+ $console->writeErr("%s\n", pht('Downloading binary data...'));
}
$data_base64 = $this->conduit->callMethodSynchronous(
'file.download',
@@ -699,7 +703,7 @@
return base64_decode($data_base64);
}
- throw new Exception("Nowhere to load blob '{$phid}' from!");
+ throw new Exception(pht("Nowhere to load blob '%s' from!", $phid));
}
private function buildBinaryChange(ArcanistDiffChange $change, $old_binary) {
@@ -773,9 +777,10 @@
if (!function_exists('gzcompress')) {
throw new Exception(
- 'This patch has binary data. The PHP zlib extension is required to '.
- 'apply patches with binary data to git. Install the PHP zlib '.
- 'extension to continue.');
+ pht(
+ 'This patch has binary data. The PHP zlib extension is required to '.
+ 'apply patches with binary data to git. Install the PHP zlib '.
+ 'extension to continue.'));
}
// See emit_binary_diff_body() in diff.c for git's implementation.
diff --git a/src/parser/ArcanistDiffParser.php b/src/parser/ArcanistDiffParser.php
--- a/src/parser/ArcanistDiffParser.php
+++ b/src/parser/ArcanistDiffParser.php
@@ -165,7 +165,7 @@
$origin->setType(ArcanistDiffChangeType::TYPE_COPY_AWAY);
break;
default:
- throw new Exception("Bad origin state {$type}.");
+ throw new Exception(pht('Bad origin state %s.', $type));
}
$type = $origin->getType();
@@ -179,7 +179,7 @@
$change->setType(ArcanistDiffChangeType::TYPE_COPY_HERE);
break;
default:
- throw new Exception("Bad origin state {$type}.");
+ throw new Exception(pht('Bad origin state %s.', $type));
}
}
@@ -188,7 +188,7 @@
public function parseDiff($diff) {
if (!strlen(trim($diff))) {
- throw new Exception("Can't parse an empty diff!");
+ throw new Exception(pht("Can't parse an empty diff!"));
}
// Detect `git-format-patch`, by looking for a "---" line somewhere in
@@ -274,11 +274,16 @@
if ($failed_parse) {
$this->didFailParse(
- "Expected a hunk header, like 'Index: /path/to/file.ext' (svn), ".
- "'Property changes on: /path/to/file.ext' (svn properties), ".
- "'commit 59bcc3ad6775562f845953cf01624225' (git show), ".
- "'diff --git' (git diff), '--- filename' (unified diff), or ".
- "'diff -r' (hg diff or patch).");
+ pht(
+ "Expected a hunk header, like '%s' (svn), '%s' (svn properties), ".
+ "'%s' (git show), '%s' (git diff), '%s' (unified diff), or ".
+ "'%s' (hg diff or patch).",
+ 'Index: /path/to/file.ext',
+ 'Property changes on: /path/to/file.ext',
+ 'commit 59bcc3ad6775562f845953cf01624225',
+ 'diff --git',
+ '--- filename',
+ 'diff -r'));
}
if (isset($match['type'])) {
@@ -332,7 +337,9 @@
$line,
$match);
if (!$ok) {
- $this->didFailParse("Expected '+++ filename' in unified diff.");
+ $this->didFailParse(pht(
+ "Expected '%s' in unified diff.",
+ '+++ filename'));
}
$change->setCurrentPath($match[1]);
$line = $this->nextLine();
@@ -347,7 +354,7 @@
$this->parseIndexHunk($change);
break;
default:
- $this->didFailParse('Unknown diff type.');
+ $this->didFailParse(pht('Unknown diff type.'));
break;
}
} while ($this->getLine() !== null);
@@ -380,12 +387,12 @@
$line = $this->getLine();
if (!preg_match('/^Author: /', $line)) {
- $this->didFailParse("Expected 'Author:'.");
+ $this->didFailParse(pht("Expected 'Author:'."));
}
$line = $this->nextLine();
if (!preg_match('/^Date: /', $line)) {
- $this->didFailParse("Expected 'Date:'.");
+ $this->didFailParse(pht("Expected 'Date:'."));
}
while (($line = $this->nextLineTrimmed()) !== null) {
@@ -410,7 +417,7 @@
protected function parsePropertyHunk(ArcanistDiffChange $change) {
$line = $this->getLineTrimmed();
if (!preg_match('/^_+$/', $line)) {
- $this->didFailParse("Expected '______________________'.");
+ $this->didFailParse(pht("Expected '%s'.", '______________________'));
}
$line = $this->nextLine();
@@ -430,7 +437,7 @@
$matches);
if (!$ok) {
$this->didFailParse(
- "Expected 'Name', 'Added', 'Deleted', or 'Modified'.");
+ pht("Expected 'Name', 'Added', 'Deleted', or 'Modified'."));
}
$op = $matches[1];
@@ -476,13 +483,17 @@
}
if ($trimline && $trimline[0] == '+') {
if ($op == 'Deleted') {
- $this->didFailParse('Unexpected "+" section in property deletion.');
+ $this->didFailParse(pht(
+ 'Unexpected "%s" section in property deletion.',
+ '+'));
}
$target = 'new';
$line = substr($trimline, $prop_index);
} else if ($trimline && $trimline[0] == '-') {
if ($op == 'Added') {
- $this->didFailParse('Unexpected "-" section in property addition.');
+ $this->didFailParse(pht(
+ 'Unexpected "%s" section in property addition.',
+ '-'));
}
$target = 'old';
$line = substr($trimline, $prop_index);
@@ -523,7 +534,7 @@
protected function setIsGit($git) {
if ($this->isGit !== null && $this->isGit != $git) {
- throw new Exception('Git status has changed!');
+ throw new Exception(pht('Git status has changed!'));
}
$this->isGit = $git;
return $this;
@@ -682,7 +693,9 @@
if ($is_svn) {
$ok = preg_match('/^=+\s*$/', $line);
if (!$ok) {
- $this->didFailParse("Expected '=======================' divider line.");
+ $this->didFailParse(pht(
+ "Expected '%s' divider line.",
+ '======================='));
} else {
// Adding an empty file in SVN can produce an empty line here.
$line = $this->nextNonemptyLine();
@@ -803,7 +816,8 @@
$line = $this->getLine();
if (!preg_match('/^literal /', $line)) {
- $this->didFailParse("Expected 'literal NNNN' to start git binary patch.");
+ $this->didFailParse(
+ pht("Expected '%s' to start git binary patch.", 'literal NNNN'));
}
do {
$line = $this->nextLineTrimmed();
@@ -814,7 +828,8 @@
$this->nextNonemptyLine();
return;
} else if (!preg_match('/^[a-zA-Z]/', $line)) {
- $this->didFailParse('Expected base85 line length character (a-zA-Z).');
+ $this->didFailParse(
+ pht('Expected base85 line length character (a-zA-Z).'));
}
} while (true);
}
@@ -843,7 +858,9 @@
if (!$ok) {
$this->didFailParse(
- "Expected hunk target '+++ path/to/file.ext (revision N)'.");
+ pht(
+ "Expected hunk target '%s'.",
+ '+++ path/to/file.ext (revision N)'));
}
$this->nextLine();
@@ -887,12 +904,14 @@
$line = $this->nextNonemptyLine();
$ok = preg_match('/^Property changes on:/', $line);
if (!$ok) {
- $this->didFailParse('Confused by empty line');
+ $this->didFailParse(pht('Confused by empty line'));
}
$line = $this->nextLine();
return $this->parsePropertyHunk($change);
}
- $this->didFailParse("Expected hunk header '@@ -NN,NN +NN,NN @@'.");
+ $this->didFailParse(pht(
+ "Expected hunk header '%s'.",
+ '@@ -NN,NN +NN,NN @@'));
}
$hunk->setOldOffset($matches[1]);
@@ -930,7 +949,7 @@
case '\\':
if (!preg_match('@\\ No newline at end of file@', $line)) {
$this->didFailParse(
- "Expected '\ No newline at end of file'.");
+ pht("Expected '\ No newline at end of file'."));
}
if ($new_len) {
$real[] = $line;
@@ -975,7 +994,7 @@
}
if ($old_len || $new_len) {
- $this->didFailParse('Found the wrong number of hunk lines.');
+ $this->didFailParse(pht('Found the wrong number of hunk lines.'));
}
$corpus = implode('', $real);
@@ -991,8 +1010,10 @@
$corpus = phutil_utf8_convert($corpus, 'UTF-8', $try_encoding);
if (!phutil_is_utf8($corpus)) {
throw new Exception(
- "Failed to convert a hunk from '{$try_encoding}' to UTF-8. ".
- "Check that the specified encoding is correct.");
+ pht(
+ "Failed to convert a hunk from '%s' to UTF-8. ".
+ "Check that the specified encoding is correct.",
+ $try_encoding));
}
}
}
@@ -1362,11 +1383,13 @@
if (!$matches) {
throw new Exception(
- "Input diff contains ambiguous line 'diff --git {$paths}'. This line ".
- "is ambiguous because there are spaces in the file names, so the ".
- "parser can not determine where the file names begin and end. To ".
- "resolve this ambiguity, use standard prefixes ('a/' and 'b/') when ".
- "generating diffs.");
+ pht(
+ "Input diff contains ambiguous line '%s'. This line is ambiguous ".
+ "because there are spaces in the file names, so the parser can not ".
+ "determine where the file names begin and end. To resolve this ".
+ "ambiguity, use standard prefixes ('a/' and 'b/') when ".
+ "generating diffs.",
+ "diff --git {$paths}"));
}
$old = $matches['old'];
diff --git a/src/parser/__tests__/ArcanistBundleTestCase.php b/src/parser/__tests__/ArcanistBundleTestCase.php
--- a/src/parser/__tests__/ArcanistBundleTestCase.php
+++ b/src/parser/__tests__/ArcanistBundleTestCase.php
@@ -20,7 +20,11 @@
$this->assertEqual(
1,
$err,
- "Expect `diff` to find changes between '{$old}' and '{$new}'.");
+ pht(
+ "Expect `%s` to find changes between '%s' and '%s'.",
+ 'diff',
+ $old,
+ $new));
return $stdout;
}
@@ -36,7 +40,7 @@
*/
public function testGitRepository() {
if (phutil_is_windows()) {
- $this->assertSkipped('This test is not supported under Windows.');
+ $this->assertSkipped(pht('This test is not supported under Windows.'));
}
$archive = dirname(__FILE__).'/bundle.git.tgz';
@@ -111,8 +115,11 @@
} else {
Filesystem::writeFile($expect_path.'.real', $patch);
throw new Exception(
- "Expected patch and actual patch for {$commit_hash} differ. ".
- "Wrote actual patch to '{$expect_path}.real'.");
+ pht(
+ "Expected patch and actual patch for %s differ. ".
+ "Wrote actual patch to '%s.real'.",
+ $commit_hash,
+ $expect_path));
}
try {
@@ -125,8 +132,8 @@
Filesystem::writeFile($temp, $patch);
PhutilConsole::getConsole()->writeErr(
- "Wrote failing patch to '%s'.\n",
- $temp);
+ "%s\n",
+ pht("Wrote failing patch to '%s'.", $temp));
throw $ex;
}
@@ -137,7 +144,7 @@
$this->assertEqual(
$tree_hash,
$result_hash,
- "Commit {$commit_hash}: {$subject}");
+ pht('Commit %s: %s', $commit_hash, $subject));
}
}
@@ -569,11 +576,11 @@
case '228d7be4840313ed805c25c15bba0f7b188af3e6':
// "Add a text file."
// This commit is never reached because we skip the 0th commit junk.
- $this->assertTrue(true, 'This is never reached.');
+ $this->assertTrue(true, pht('This is never reached.'));
break;
default:
throw new Exception(
- "Commit {$commit} has no change assertions!");
+ pht('Commit %s has no change assertions!', $commit));
}
}
diff --git a/src/parser/__tests__/ArcanistDiffParserTestCase.php b/src/parser/__tests__/ArcanistDiffParserTestCase.php
--- a/src/parser/__tests__/ArcanistDiffParserTestCase.php
+++ b/src/parser/__tests__/ArcanistDiffParserTestCase.php
@@ -602,7 +602,7 @@
$this->assertEqual('file with spaces.txt', $change->getOldPath());
break;
default:
- throw new Exception("No test block for diff file {$diff_file}.");
+ throw new Exception(pht('No test block for diff file %s.', $diff_file));
break;
}
}
@@ -625,7 +625,7 @@
$this->assertEqual(
$expect,
ArcanistDiffParser::stripGitPathPrefix($input),
- "Strip git prefix from '{$input}'.");
+ pht("Strip git prefix from '%s'.", $input));
}
}
@@ -663,7 +663,7 @@
$this->assertEqual(
$expect,
$result,
- "Split: {$input}");
+ pht('Split: %s', $input));
}
@@ -680,7 +680,7 @@
}
$this->assertTrue(
($caught instanceof Exception),
- "Ambiguous: {$input}");
+ pht('Ambiguous: %s', $input));
}
}
diff --git a/src/parser/diff/ArcanistDiffChange.php b/src/parser/diff/ArcanistDiffChange.php
--- a/src/parser/diff/ArcanistDiffChange.php
+++ b/src/parser/diff/ArcanistDiffChange.php
@@ -292,14 +292,14 @@
public function getSymlinkTarget() {
if ($this->getFileType() != ArcanistDiffChangeType::FILE_SYMLINK) {
- throw new Exception('Not a symlink!');
+ throw new Exception(pht('Not a symlink!'));
}
$hunks = $this->getHunks();
$hunk = reset($hunks);
$corpus = $hunk->getCorpus();
$match = null;
if (!preg_match('/^\+(?:link )?(.*)$/m', $corpus, $match)) {
- throw new Exception('Failed to extract link target!');
+ throw new Exception(pht('Failed to extract link target!'));
}
return trim($match[1]);
}
diff --git a/src/parser/diff/ArcanistDiffChangeType.php b/src/parser/diff/ArcanistDiffChangeType.php
--- a/src/parser/diff/ArcanistDiffChangeType.php
+++ b/src/parser/diff/ArcanistDiffChangeType.php
@@ -94,19 +94,24 @@
}
public static function getFullNameForChangeType($type) {
- static $types = array(
- self::TYPE_ADD => 'Added',
- self::TYPE_CHANGE => 'Modified',
- self::TYPE_DELETE => 'Deleted',
- self::TYPE_MOVE_AWAY => 'Moved Away',
- self::TYPE_COPY_AWAY => 'Copied Away',
- self::TYPE_MOVE_HERE => 'Moved Here',
- self::TYPE_COPY_HERE => 'Copied Here',
- self::TYPE_MULTICOPY => 'Deleted After Multiple Copy',
- self::TYPE_MESSAGE => 'Commit Message',
- self::TYPE_CHILD => 'Contents Modified',
- );
- return idx($types, coalesce($type, '?'), 'Unknown');
+ static $types = null;
+
+ if ($types === null) {
+ $types = array(
+ self::TYPE_ADD => pht('Added'),
+ self::TYPE_CHANGE => pht('Modified'),
+ self::TYPE_DELETE => pht('Deleted'),
+ self::TYPE_MOVE_AWAY => pht('Moved Away'),
+ self::TYPE_COPY_AWAY => pht('Copied Away'),
+ self::TYPE_MOVE_HERE => pht('Moved Here'),
+ self::TYPE_COPY_HERE => pht('Copied Here'),
+ self::TYPE_MULTICOPY => pht('Deleted After Multiple Copy'),
+ self::TYPE_MESSAGE => pht('Commit Message'),
+ self::TYPE_CHILD => pht('Contents Modified'),
+ );
+ }
+
+ return idx($types, coalesce($type, '?'), pht('Unknown'));
}
}
diff --git a/src/parser/diff/ArcanistDiffHunk.php b/src/parser/diff/ArcanistDiffHunk.php
--- a/src/parser/diff/ArcanistDiffHunk.php
+++ b/src/parser/diff/ArcanistDiffHunk.php
@@ -83,7 +83,7 @@
case 'cover':
return $cover_map;
default:
- throw new Exception("Unknown line change type '{$type}'.");
+ throw new Exception(pht("Unknown line change type '%s'.", $type));
}
}
diff --git a/src/repository/api/ArcanistGitAPI.php b/src/repository/api/ArcanistGitAPI.php
--- a/src/repository/api/ArcanistGitAPI.php
+++ b/src/repository/api/ArcanistGitAPI.php
@@ -92,8 +92,9 @@
if ($this->repositoryHasNoCommits) {
// Zero commits.
throw new Exception(
- "You can't get local commit information for a repository with no ".
- "commits.");
+ pht(
+ "You can't get local commit information for a repository with no ".
+ "commits."));
} else if ($this->getBaseCommit() == self::GIT_MAGIC_ROOT_COMMIT) {
// One commit.
$against = 'HEAD';
@@ -200,7 +201,7 @@
if ($symbolic_commit !== null) {
if ($symbolic_commit == self::GIT_MAGIC_ROOT_COMMIT) {
$this->setBaseCommitExplanation(
- 'you explicitly specified the empty tree.');
+ pht('you explicitly specified the empty tree.'));
return $symbolic_commit;
}
@@ -210,19 +211,24 @@
$this->getHeadCommit());
if ($err) {
throw new ArcanistUsageException(
- "Unable to find any git commit named '{$symbolic_commit}' in ".
- "this repository.");
+ pht(
+ "Unable to find any git commit named '%s' in this repository.",
+ $symbolic_commit));
}
if ($this->symbolicHeadCommit === null) {
$this->setBaseCommitExplanation(
- "it is the merge-base of the explicitly specified base commit ".
- "'{$symbolic_commit}' and HEAD.");
+ pht(
+ "it is the merge-base of the explicitly specified base commit ".
+ "'%s' and HEAD.",
+ $symbolic_commit));
} else {
$this->setBaseCommitExplanation(
- "it is the merge-base of the explicitly specified base commit ".
- "'{$symbolic_commit}' and the explicitly specified head ".
- "commit '{$this->symbolicHeadCommit}'.");
+ pht(
+ "it is the merge-base of the explicitly specified base commit ".
+ "'%s' and the explicitly specified head commit '%s'.",
+ $symbolic_commit,
+ $this->symbolicHeadCommit));
}
return trim($merge_base);
@@ -239,11 +245,10 @@
}
if ($this->repositoryHasNoCommits) {
- $this->setBaseCommitExplanation(
- 'the repository has no commits.');
+ $this->setBaseCommitExplanation(pht('the repository has no commits.'));
} else {
$this->setBaseCommitExplanation(
- 'the repository has only one commit.');
+ pht('the repository has only one commit.'));
}
return self::GIT_MAGIC_ROOT_COMMIT;
@@ -254,9 +259,10 @@
$base = $this->resolveBaseCommit();
if (!$base) {
throw new ArcanistUsageException(
- "None of the rules in your 'base' configuration matched a valid ".
- "commit. Adjust rules or specify which commit you want to use ".
- "explicitly.");
+ pht(
+ "None of the rules in your 'base' configuration matched a valid ".
+ "commit. Adjust rules or specify which commit you want to use ".
+ "explicitly."));
}
return $base;
}
@@ -268,9 +274,12 @@
$default_relative = $working_copy->getProjectConfig(
'git.default-relative-commit');
$this->setBaseCommitExplanation(
- "it is the merge-base of '{$default_relative}' and HEAD, as ".
- "specified in 'git.default-relative-commit' in '.arcconfig'. This ".
- "setting overrides other settings.");
+ pht(
+ "it is the merge-base of '%s' and HEAD, as specified in '%s' in ".
+ "'%s'. This setting overrides other settings.",
+ $default_relative,
+ 'git.default-relative-commit',
+ '.arcconfig'));
}
if (!$default_relative) {
@@ -281,8 +290,10 @@
if (!$err) {
$default_relative = trim($upstream);
$this->setBaseCommitExplanation(
- "it is the merge-base of '{$default_relative}' (the Git upstream ".
- "of the current branch) HEAD.");
+ pht(
+ "it is the merge-base of '%s' (the Git upstream ".
+ "of the current branch) HEAD.",
+ $default_relative));
}
}
@@ -291,8 +302,10 @@
$default_relative = trim($default_relative);
if ($default_relative) {
$this->setBaseCommitExplanation(
- "it is the merge-base of '{$default_relative}' and HEAD, as ".
- "specified in '.git/arc/default-relative-commit'.");
+ pht(
+ "it is the merge-base of '%s' and HEAD, as specified in '%s'.",
+ $default_relative,
+ '.git/arc/default-relative-commit'));
}
}
@@ -303,23 +316,30 @@
echo phutil_console_format(
"<bg:green>** Select a Default Commit Range **</bg>\n\n");
echo phutil_console_wrap(
- "You're running a command which operates on a range of revisions ".
- "(usually, from some revision to HEAD) but have not specified the ".
- "revision that should determine the start of the range.\n\n".
- "Previously, arc assumed you meant 'HEAD^' when you did not specify ".
- "a start revision, but this behavior does not make much sense in ".
- "most workflows outside of Facebook's historic git-svn workflow.\n\n".
- "arc no longer assumes 'HEAD^'. You must specify a relative commit ".
- "explicitly when you invoke a command (e.g., `arc diff HEAD^`, not ".
- "just `arc diff`) or select a default for this working copy.\n\n".
- "In most cases, the best default is 'origin/master'. You can also ".
- "select 'HEAD^' to preserve the old behavior, or some other remote ".
- "or branch. But you almost certainly want to select ".
- "'origin/master'.\n\n".
- "(Technically: the merge-base of the selected revision and HEAD is ".
- "used to determine the start of the commit range.)");
-
- $prompt = 'What default do you want to use? [origin/master]';
+ pht(
+ "You're running a command which operates on a range of revisions ".
+ "(usually, from some revision to HEAD) but have not specified the ".
+ "revision that should determine the start of the range.\n\n".
+ "Previously, arc assumed you meant '%s' when you did not specify ".
+ "a start revision, but this behavior does not make much sense in ".
+ "most workflows outside of Facebook's historic %s workflow.\n\n".
+ "arc no longer assumes '%s'. You must specify a relative commit ".
+ "explicitly when you invoke a command (e.g., `%s`, not just `%s`) ".
+ "or select a default for this working copy.\n\nIn most cases, the ".
+ "best default is '%s'. You can also select '%s' to preserve the ".
+ "old behavior, or some other remote or branch. But you almost ".
+ "certainly want to select 'origin/master'.\n\n".
+ "(Technically: the merge-base of the selected revision and HEAD is ".
+ "used to determine the start of the commit range.)",
+ 'HEAD^',
+ 'git-svn',
+ 'HEAD^',
+ 'arc diff HEAD^',
+ 'arc diff',
+ 'origin/master',
+ 'HEAD^'));
+
+ $prompt = pht('What default do you want to use? [origin/master]');
$default = phutil_console_prompt($prompt);
if (!strlen(trim($default))) {
@@ -336,7 +356,9 @@
if (trim($object_type) !== 'commit') {
throw new Exception(
- "Relative commit '{$default_relative}' is not the name of a commit!");
+ pht(
+ "Relative commit '%s' is not the name of a commit!",
+ $default_relative));
}
if ($do_write) {
@@ -344,8 +366,9 @@
// valid commit name.
$this->writeScratchFile('default-relative-commit', $default_relative);
$this->setBaseCommitExplanation(
- "it is the merge-base of '{$default_relative}' and HEAD, as you ".
- "just specified.");
+ pht(
+ "it is the merge-base of '%s' and HEAD, as you just specified.",
+ $default_relative));
}
list($merge_base) = $this->execxLocal(
@@ -382,8 +405,9 @@
if ($err) {
throw new ArcanistUsageException(
- "Unable to find any git commit named '{$symbolic_commit}' in ".
- "this repository.");
+ pht(
+ "Unable to find any git commit named '%s' in this repository.",
+ $symbolic_commit));
}
return trim($commit_hash);
@@ -547,7 +571,10 @@
$input);
if (!$stdout) {
throw new ArcanistUsageException(
- "Cannot find the {$vcs} equivalent of {$input}.");
+ pht(
+ 'Cannot find the %s equivalent of %s.',
+ $vcs,
+ $input));
}
// When git performs a partial-rebuild during svn
// look-up, we need to parse the final line
@@ -777,7 +804,7 @@
$line,
$matches);
if (!$ok) {
- throw new Exception("Bad blame? `{$line}'");
+ throw new Exception(pht("Bad blame? `%s'", $line));
}
$revision = $matches[1];
$author = $matches[2];
@@ -812,7 +839,7 @@
$line,
$matches);
if (!$ok) {
- throw new Exception('Failed to parse git ls-tree output!');
+ throw new Exception(pht('Failed to parse %s output!', 'git ls-tree'));
}
$result[$matches[4]] = array(
'mode' => $matches[1],
@@ -937,7 +964,7 @@
public function performLocalBranchMerge($branch, $message) {
if (!$branch) {
throw new ArcanistUsageException(
- 'Under git, you must specify the branch you want to merge.');
+ pht('Under git, you must specify the branch you want to merge.'));
}
$err = phutil_passthru(
'(cd %s && git merge --no-ff -m %s %s)',
@@ -951,8 +978,11 @@
}
public function getFinalizedRevisionMessage() {
- return "You may now push this commit upstream, as appropriate (e.g. with ".
- "'git push', or 'git svn dcommit', or by printing and faxing it).";
+ return pht(
+ "You may now push this commit upstream, as appropriate (e.g. with ".
+ "'%s', or '%s', or by printing and faxing it).",
+ 'git push',
+ 'git svn dcommit');
}
public function getCommitMessage($commit) {
@@ -996,8 +1026,9 @@
foreach ($results as $key => $result) {
$hash = substr($reason_map[$result['id']], 0, 16);
- $results[$key]['why'] =
- "Commit message for '{$hash}' has explicit 'Differential Revision'.";
+ $results[$key]['why'] = pht(
+ "Commit message for '%s' has explicit 'Differential Revision'.",
+ $hash);
}
return $results;
@@ -1017,9 +1048,9 @@
));
foreach ($results as $key => $result) {
- $results[$key]['why'] =
+ $results[$key]['why'] = pht(
'A git commit or tree hash in the commit range is already attached '.
- 'to the Differential revision.';
+ 'to the Differential revision.');
}
return $results;
@@ -1032,7 +1063,7 @@
public function getCommitSummary($commit) {
if ($commit == self::GIT_MAGIC_ROOT_COMMIT) {
- return '(The Empty Tree)';
+ return pht('(The Empty Tree)');
}
list($summary) = $this->execxLocal(
@@ -1044,17 +1075,16 @@
}
public function backoutCommit($commit_hash) {
- $this->execxLocal(
- 'revert %s -n --no-edit', $commit_hash);
+ $this->execxLocal('revert %s -n --no-edit', $commit_hash);
$this->reloadWorkingCopy();
if (!$this->getUncommittedStatus()) {
throw new ArcanistUsageException(
- "{$commit_hash} has already been reverted.");
+ pht('%s has already been reverted.', $commit_hash));
}
}
public function getBackoutMessage($commit_hash) {
- return 'This reverts commit '.$commit_hash.'.';
+ return pht('This reverts commit %s.', $commit_hash);
}
public function isGitSubversionRepo() {
@@ -1073,9 +1103,12 @@
$matches[1]);
if (!$err) {
$this->setBaseCommitExplanation(
- "it is the merge-base of '{$matches[1]}' and HEAD, as ".
- "specified by '{$rule}' in your {$source} 'base' ".
- "configuration.");
+ pht(
+ "it is the merge-base of '%s' and HEAD, as specified by ".
+ "'%s' in your %s 'base' configuration.",
+ $matches[1],
+ $rule,
+ $source));
return trim($merge_base);
}
} else if (preg_match('/^branch-unique\((.+)\)$/', $name, $matches)) {
@@ -1118,9 +1151,13 @@
}
$branches = implode(', ', $branches);
$this->setBaseCommitExplanation(
- "it is the first commit between '{$merge_base}' (the ".
- "merge-base of '{$matches[1]}' and HEAD) which is also ".
- "contained by another branch ({$branches}).");
+ pht(
+ "it is the first commit between '%s' (the merge-base of ".
+ "'%s' and HEAD) which is also contained by another branch ".
+ "(%s).",
+ $merge_base,
+ $matches[1],
+ $branches));
return $commit;
}
}
@@ -1130,8 +1167,10 @@
$name);
if (!$err) {
$this->setBaseCommitExplanation(
- "it is specified by '{$rule}' in your {$source} 'base' ".
- "configuration.");
+ pht(
+ "it is specified by '%s' in your %s 'base' configuration.",
+ $rule,
+ $source));
return $name;
}
}
@@ -1140,8 +1179,10 @@
switch ($name) {
case 'empty':
$this->setBaseCommitExplanation(
- "you specified '{$rule}' in your {$source} 'base' ".
- "configuration.");
+ pht(
+ "you specified '%s' in your %s 'base' configuration.",
+ $rule,
+ $source));
return self::GIT_MAGIC_ROOT_COMMIT;
case 'amended':
$text = $this->getCommitMessage('HEAD');
@@ -1149,9 +1190,11 @@
$text);
if ($message->getRevisionID()) {
$this->setBaseCommitExplanation(
- "HEAD has been amended with 'Differential Revision:', ".
- "as specified by '{$rule}' in your {$source} 'base' ".
- "configuration.");
+ pht(
+ "HEAD has been amended with 'Differential Revision:', ".
+ "as specified by '%s' in your %s 'base' configuration.",
+ $rule,
+ $source));
return 'HEAD^';
}
break;
@@ -1166,16 +1209,21 @@
$upstream);
$upstream_merge_base = rtrim($upstream_merge_base);
$this->setBaseCommitExplanation(
- "it is the merge-base of the upstream of the current branch ".
- "and HEAD, and matched the rule '{$rule}' in your {$source} ".
- "'base' configuration.");
+ pht(
+ "it is the merge-base of the upstream of the current branch ".
+ "and HEAD, and matched the rule '%s' in your %s ".
+ "'base' configuration.",
+ $rule,
+ $source));
return $upstream_merge_base;
}
break;
case 'this':
$this->setBaseCommitExplanation(
- "you specified '{$rule}' in your {$source} 'base' ".
- "configuration.");
+ pht(
+ "you specified '%s' in your %s 'base' configuration.",
+ $rule,
+ $source));
return 'HEAD^';
}
default:
diff --git a/src/repository/api/ArcanistMercurialAPI.php b/src/repository/api/ArcanistMercurialAPI.php
--- a/src/repository/api/ArcanistMercurialAPI.php
+++ b/src/repository/api/ArcanistMercurialAPI.php
@@ -80,7 +80,7 @@
$string);
if (!$stdout) {
throw new ArcanistUsageException(
- "Cannot find the HG equivalent of {$revision_id} given.");
+ pht('Cannot find the HG equivalent of %s given.', $revision_id));
}
return $stdout;
}
@@ -92,7 +92,7 @@
'log -r %s --template {svnrev}', $hash);
if (!$stdout) {
throw new ArcanistUsageException(
- "Cannot find the SVN equivalent of {$hash} given.");
+ pht('Cannot find the SVN equivalent of %s given.', $hash));
}
return $stdout;
}
@@ -125,14 +125,16 @@
hgsprintf('ancestor(%R,.)', $symbolic_commit));
} catch (Exception $ex) {
throw new ArcanistUsageException(
- "Commit '{$symbolic_commit}' is not a valid Mercurial commit ".
- "identifier.");
+ pht(
+ "Commit '%s' is not a valid Mercurial commit identifier.",
+ $symbolic_commit));
}
}
$this->setBaseCommitExplanation(
- 'it is the greatest common ancestor of the working directory '.
- 'and the commit you specified explicitly.');
+ pht(
+ 'it is the greatest common ancestor of the working directory '.
+ 'and the commit you specified explicitly.'));
return $commit;
}
@@ -141,9 +143,10 @@
$base = $this->resolveBaseCommit();
if (!$base) {
throw new ArcanistUsageException(
- "None of the rules in your 'base' configuration matched a valid ".
- "commit. Adjust rules or specify which commit you want to use ".
- "explicitly.");
+ pht(
+ "None of the rules in your 'base' configuration matched a valid ".
+ "commit. Adjust rules or specify which commit you want to use ".
+ "explicitly."));
}
return $base;
}
@@ -172,8 +175,9 @@
if (!$logs) {
$this->setBaseCommitExplanation(
- 'you have no outgoing commits, so arc assumes you intend to submit '.
- 'uncommitted changes in the working copy.');
+ pht(
+ 'you have no outgoing commits, so arc assumes you intend to submit '.
+ 'uncommitted changes in the working copy.'));
return $this->getWorkingCopyRevision();
}
@@ -215,11 +219,12 @@
if ($against == 'null') {
$this->setBaseCommitExplanation(
- 'this is a new repository (all changes are outgoing).');
+ pht('this is a new repository (all changes are outgoing).'));
} else {
$this->setBaseCommitExplanation(
- 'it is the first commit reachable from the working copy state '.
- 'which is not outgoing.');
+ pht(
+ 'it is the first commit reachable from the working copy state '.
+ 'which is not outgoing.'));
}
return $against;
@@ -334,7 +339,10 @@
$ok = preg_match('/^\s*([^:]+?) ([a-f0-9]{12}):/', $line, $matches);
if (!$ok) {
- throw new Exception("Unable to parse Mercurial blame line: {$line}");
+ throw new Exception(
+ pht(
+ 'Unable to parse Mercurial blame line: %s',
+ $line));
}
$revision = $matches[2];
@@ -619,13 +627,15 @@
}
if ($err) {
- throw new ArcanistUsageException('Merge failed!');
+ throw new ArcanistUsageException(pht('Merge failed!'));
}
}
public function getFinalizedRevisionMessage() {
- return "You may now push this commit upstream, as appropriate (e.g. with ".
- "'hg push' or by printing and faxing it).";
+ return pht(
+ "You may now push this commit upstream, as appropriate (e.g. with ".
+ "'%s' or by printing and faxing it).",
+ 'hg push');
}
public function getCommitMessageLog() {
@@ -676,7 +686,9 @@
foreach ($results as $key => $result) {
$hash = substr($reason_map[$result['id']], 0, 16);
$results[$key]['why'] =
- "Commit message for '{$hash}' has explicit 'Differential Revision'.";
+ pht(
+ "Commit message for '%s' has explicit 'Differential Revision'.",
+ $hash);
}
return $results;
@@ -700,9 +712,9 @@
));
foreach ($results as $key => $hash) {
- $results[$key]['why'] =
+ $results[$key]['why'] = pht(
'A mercurial commit hash in the commit range is already attached '.
- 'to the Differential revision.';
+ 'to the Differential revision.');
}
return $results;
@@ -795,7 +807,7 @@
public function getCommitSummary($commit) {
if ($commit == 'null') {
- return '(The Empty Void)';
+ return pht('(The Empty Void)');
}
list($summary) = $this->execxLocal(
@@ -808,17 +820,16 @@
}
public function backoutCommit($commit_hash) {
- $this->execxLocal(
- 'backout -r %s', $commit_hash);
+ $this->execxLocal('backout -r %s', $commit_hash);
$this->reloadWorkingCopy();
if (!$this->getUncommittedStatus()) {
throw new ArcanistUsageException(
- "{$commit_hash} has already been reverted.");
+ pht('%s has already been reverted.', $commit_hash));
}
}
public function getBackoutMessage($commit_hash) {
- return 'Backed out changeset '.$commit_hash.'.';
+ return pht('Backed out changeset %s,', $commit_hash);
}
public function resolveBaseCommitRule($rule, $source) {
@@ -838,9 +849,13 @@
sprintf('ancestor(., %s)', $matches[1]));
if (!$err) {
$this->setBaseCommitExplanation(
- "it is the greatest common ancestor of '{$matches[1]}' and ., as".
- " specified by '{$rule}' in your {$source} 'base' ".
- "configuration.");
+ pht(
+ "it is the greatest common ancestor of '%s' and %s, as ".
+ "specified by '%s' in your %s 'base' configuration.",
+ $matches[1],
+ '.',
+ $rule,
+ $source));
return trim($merge_base);
}
} else {
@@ -855,8 +870,10 @@
}
if (!$err) {
$this->setBaseCommitExplanation(
- "it is specified by '{$rule}' in your {$source} 'base' ".
- "configuration.");
+ pht(
+ "it is specified by '%s' in your %s 'base' configuration.",
+ $rule,
+ $source));
return trim($commit);
}
}
@@ -865,8 +882,10 @@
switch ($name) {
case 'empty':
$this->setBaseCommitExplanation(
- "you specified '{$rule}' in your {$source} 'base' ".
- "configuration.");
+ pht(
+ "you specified '%s' in your %s 'base' configuration.",
+ $rule,
+ $source));
return 'null';
case 'outgoing':
list($err, $outgoing_base) = $this->execManualLocal(
@@ -874,9 +893,12 @@
'limit(reverse(ancestors(.) - outgoing()), 1)');
if (!$err) {
$this->setBaseCommitExplanation(
- "it is the first ancestor of the working copy that is not ".
- "outgoing, and it matched the rule {$rule} in your {$source} ".
- "'base' configuration.");
+ pht(
+ "it is the first ancestor of the working copy that is not ".
+ "outgoing, and it matched the rule %s in your %s ".
+ "'base' configuration.",
+ $rule,
+ $source));
return trim($outgoing_base);
}
case 'amended':
@@ -885,9 +907,12 @@
$text);
if ($message->getRevisionID()) {
$this->setBaseCommitExplanation(
- "'.' has been amended with 'Differential Revision:', ".
- "as specified by '{$rule}' in your {$source} 'base' ".
- "configuration.");
+ pht(
+ "'%s' has been amended with 'Differential Revision:', ".
+ "as specified by '%s' in your %s 'base' configuration.",
+ '.'.
+ $rule,
+ $source));
// NOTE: This should be safe because Mercurial doesn't support
// amend until 2.2.
return $this->getCanonicalRevisionName('.^');
@@ -906,16 +931,22 @@
$revset);
if (!$err) {
$this->setBaseCommitExplanation(
- "it is the first ancestor of . that either has a bookmark, or ".
- "is already in the remote and it matched the rule {$rule} in ".
- "your {$source} 'base' configuration");
+ pht(
+ "it is the first ancestor of %s that either has a bookmark, ".
+ "or is already in the remote and it matched the rule %s in ".
+ "your %s 'base' configuration",
+ '.',
+ $rule,
+ $source));
return trim($bookmark_base);
}
break;
case 'this':
$this->setBaseCommitExplanation(
- "you specified '{$rule}' in your {$source} 'base' ".
- "configuration.");
+ pht(
+ "you specified '%s' in your %s 'base' configuration.",
+ $rule,
+ $source));
return $this->getCanonicalRevisionName('.^');
default:
if (preg_match('/^nodiff\((.+)\)$/', $name, $matches)) {
@@ -936,10 +967,14 @@
$desc);
if ($message->getRevisionID()) {
$this->setBaseCommitExplanation(
- "it is the first ancestor of . that has a diff ".
- "and is the gca or a descendant of the gca with ".
- "'{$matches[1]}', specified by '{$rule}' in your ".
- "{$source} 'base' configuration.");
+ pht(
+ "it is the first ancestor of %s that has a diff and is ".
+ "the gca or a descendant of the gca with '%s', ".
+ "specified by '%s' in your %s 'base' configuration.",
+ '.',
+ $matches[1],
+ $rule,
+ $source));
return $node;
}
}
diff --git a/src/repository/api/ArcanistRepositoryAPI.php b/src/repository/api/ArcanistRepositoryAPI.php
--- a/src/repository/api/ArcanistRepositoryAPI.php
+++ b/src/repository/api/ArcanistRepositoryAPI.php
@@ -63,7 +63,8 @@
if (!$working_copy) {
throw new Exception(
pht(
- 'Trying to create a RepositoryAPI without a working copy!'));
+ 'Trying to create a %s without a working copy!',
+ __CLASS__));
}
$root = $working_copy->getProjectRoot();
diff --git a/src/repository/api/ArcanistSubversionAPI.php b/src/repository/api/ArcanistSubversionAPI.php
--- a/src/repository/api/ArcanistSubversionAPI.php
+++ b/src/repository/api/ArcanistSubversionAPI.php
@@ -37,7 +37,6 @@
}
protected function buildLocalFuture(array $argv) {
-
$argv[0] = 'svn '.$argv[0];
$future = newv('ExecFuture', $argv);
@@ -106,7 +105,9 @@
$mask |= self::FLAG_MODIFIED;
break;
default:
- throw new Exception("Unrecognized property status '{$props}'.");
+ throw new Exception(pht(
+ "Unrecognized property status '%s'.",
+ $props));
}
$mask |= $this->parseSVNStatus($item);
@@ -177,7 +178,7 @@
case 'incomplete':
return self::FLAG_INCOMPLETE;
default:
- throw new Exception("Unrecognized item status '{$item}'.");
+ throw new Exception(pht("Unrecognized item status '%s'.", $item));
}
}
@@ -332,7 +333,7 @@
list($err, $stdout) = $this->svnInfoRaw[$path];
if ($err) {
throw new Exception(
- "Error #{$err} executing svn info against '{$path}'.");
+ pht("Error #%d executing svn info against '%s'.", $err, $path));
}
// TODO: Hack for Windows.
@@ -364,7 +365,7 @@
}
if (empty($result)) {
- throw new Exception('Unable to parse SVN info.');
+ throw new Exception(pht('Unable to parse SVN info.'));
}
$this->svnInfo[$path] = $result;
@@ -431,9 +432,12 @@
// happy about it. SVN will exit with code 1 and return the string below.
if ($err != 0 && $stderr !== "svn: 'diff' returned 2\n") {
throw new Exception(
- "svn diff returned unexpected error code: $err\n".
- "stdout: $stdout\n".
- "stderr: $stderr");
+ pht(
+ "%s returned unexpected error code: %d\nstdout: %s\nstderr: %s",
+ 'svn diff',
+ $err,
+ $stdout,
+ $stderr));
}
if ($err == 0 && empty($stdout)) {
@@ -568,7 +572,7 @@
foreach (explode("\n", $stdout) as $line) {
$m = array();
if (!preg_match('/^\s*(\d+)\s+(\S+)/', $line, $m)) {
- throw new Exception("Bad blame? `{$line}'");
+ throw new Exception(pht("Bad blame? `%s'", $line));
}
$revision = $m[1];
$author = $m[2];
@@ -665,8 +669,8 @@
}
foreach ($results as $key => $result) {
- $results[$key]['why'] =
- 'Matching arcanist project name and working copy directory path.';
+ $results[$key]['why'] = pht(
+ 'Matching arcanist project name and working copy directory path.');
}
return $results;
diff --git a/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php b/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php
--- a/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php
+++ b/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php
@@ -6,7 +6,7 @@
if (Filesystem::binaryExists('git')) {
$this->parseState('git_basic.git.tgz');
} else {
- $this->assertSkipped('Git is not installed');
+ $this->assertSkipped(pht('Git is not installed'));
}
}
@@ -14,7 +14,7 @@
if (Filesystem::binaryExists('hg')) {
$this->parseState('hg_basic.hg.tgz');
} else {
- $this->assertSkipped('Mercurial is not installed');
+ $this->assertSkipped(pht('Mercurial is not installed'));
}
}
@@ -22,7 +22,7 @@
if (Filesystem::binaryExists('svn')) {
$this->parseState('svn_basic.svn.tgz');
} else {
- $this->assertSkipped('Subversion is not installed');
+ $this->assertSkipped(pht('Subversion is not installed'));
}
}
@@ -116,7 +116,7 @@
break;
default:
throw new Exception(
- "No test cases for working copy '{$test}'!");
+ pht("No test cases for working copy '%s'!", $test));
}
}
diff --git a/src/repository/parser/ArcanistMercurialParser.php b/src/repository/parser/ArcanistMercurialParser.php
--- a/src/repository/parser/ArcanistMercurialParser.php
+++ b/src/repository/parser/ArcanistMercurialParser.php
@@ -34,7 +34,10 @@
foreach ($lines as $line) {
$flags = 0;
if ($line[1] !== ' ') {
- throw new Exception("Unparsable Mercurial status line '{$line}'.");
+ throw new Exception(
+ pht(
+ "Unparsable Mercurial status line '%s'.",
+ $line));
}
$code = $line[0];
$path = substr($line, 2);
@@ -66,12 +69,15 @@
// parsed to set its source.
if ($last_path === null) {
throw new Exception(
- "Unexpected copy source in hg status, '{$line}'.");
+ pht(
+ "Unexpected copy source in %s, '%s'.",
+ 'hg status',
+ $line));
}
$result[$last_path]['from'] = $path;
continue 2;
default:
- throw new Exception("Unknown Mercurial status '{$code}'.");
+ throw new Exception(pht("Unknown Mercurial status '%s'.", $code));
}
$result[$path] = array(
@@ -169,7 +175,8 @@
$commit['bookmark'] = $value;
break;
default:
- throw new Exception("Unknown Mercurial log field '{$name}'!");
+ throw new Exception(
+ pht("Unknown Mercurial log field '%s'!", $name));
}
}
$result[] = $commit;
@@ -211,7 +218,11 @@
$regexp = '/^(\S+(?:\s+\S+)*)\s+(\d+):([a-f0-9]+)(\s+\\(inactive\\))?$/';
if (!preg_match($regexp, $line, $matches)) {
- throw new Exception("Failed to parse 'hg branches' output: {$line}");
+ throw new Exception(
+ pht(
+ "Failed to parse '%s' output: %s",
+ 'hg branches',
+ $line));
}
$branches[$matches[1]] = array(
'local' => $matches[2],
diff --git a/src/repository/parser/__tests__/ArcanistMercurialParserTestCase.php b/src/repository/parser/__tests__/ArcanistMercurialParserTestCase.php
--- a/src/repository/parser/__tests__/ArcanistMercurialParserTestCase.php
+++ b/src/repository/parser/__tests__/ArcanistMercurialParserTestCase.php
@@ -82,7 +82,8 @@
idx($output, 'copy_source'));
break;
default:
- throw new Exception("No test information for test data '{$name}'!");
+ throw new Exception(
+ pht("No test information for test data '%s'!", $name));
}
}
diff --git a/src/unit/engine/ArcanistUnitTestEngine.php b/src/unit/engine/ArcanistUnitTestEngine.php
--- a/src/unit/engine/ArcanistUnitTestEngine.php
+++ b/src/unit/engine/ArcanistUnitTestEngine.php
@@ -17,9 +17,11 @@
public function setRunAllTests($run_all_tests) {
if (!$this->supportsRunAllTests() && $run_all_tests) {
- $class = get_class($this);
throw new Exception(
- "Engine '{$class}' does not support --everything.");
+ pht(
+ "Engine '%s' does not support %s.",
+ get_class($this),
+ '--everything'));
}
$this->runAllTests = $run_all_tests;
@@ -53,7 +55,7 @@
if ($this instanceof ArcanistBaseUnitTestEngine) {
phutil_deprecated(
'ArcanistBaseUnitTestEngine',
- 'You should extend from `ArcanistUnitTestEngine` instead.');
+ pht('You should extend from `%s` instead.', __CLASS__));
}
$this->workingCopy = $working_copy;
diff --git a/src/unit/engine/CSharpToolsTestEngine.php b/src/unit/engine/CSharpToolsTestEngine.php
--- a/src/unit/engine/CSharpToolsTestEngine.php
+++ b/src/unit/engine/CSharpToolsTestEngine.php
@@ -37,15 +37,20 @@
// Determine coverage path.
if ($this->cscoverHintPath === null) {
throw new Exception(
- "Unable to locate cscover. Configure it with ".
- "the `unit.csharp.coverage.binary' option in .arcconfig");
+ pht(
+ "Unable to locate %s. Configure it with the '%s' option in %s.",
+ 'cscover',
+ 'unit.csharp.coverage.binary',
+ '.arcconfig'));
}
$cscover = $this->projectRoot.DIRECTORY_SEPARATOR.$this->cscoverHintPath;
if (file_exists($cscover)) {
$this->coverEngine = Filesystem::resolvePath($cscover);
} else {
throw new Exception(
- 'Unable to locate cscover coverage runner (have you built yet?)');
+ pht(
+ 'Unable to locate %s coverage runner (have you built yet?)',
+ 'cscover'));
}
}
diff --git a/src/unit/engine/NoseTestEngine.php b/src/unit/engine/NoseTestEngine.php
--- a/src/unit/engine/NoseTestEngine.php
+++ b/src/unit/engine/NoseTestEngine.php
@@ -75,17 +75,19 @@
$cover_tmp = $tmpfiles[$test_path]['cover'];
$this->parser = new ArcanistXUnitTestResultParser();
- $results[] = $this->parseTestResults($source_path,
- $xunit_tmp,
- $cover_tmp);
+ $results[] = $this->parseTestResults(
+ $source_path,
+ $xunit_tmp,
+ $cover_tmp);
}
return array_mergev($results);
}
public function buildTestFuture($path, $xunit_tmp, $cover_tmp) {
- $cmd_line = csprintf('nosetests --with-xunit --xunit-file=%s',
- $xunit_tmp);
+ $cmd_line = csprintf(
+ 'nosetests --with-xunit --xunit-file=%s',
+ $xunit_tmp);
if ($this->getEnableCoverage() !== false) {
$cmd_line .= csprintf(
diff --git a/src/unit/engine/PhpunitTestEngine.php b/src/unit/engine/PhpunitTestEngine.php
--- a/src/unit/engine/PhpunitTestEngine.php
+++ b/src/unit/engine/PhpunitTestEngine.php
@@ -42,7 +42,7 @@
}
if (empty($this->affectedTests)) {
- throw new ArcanistNoEffectException('No tests to run.');
+ throw new ArcanistNoEffectException(pht('No tests to run.'));
}
$this->prepareConfigFile();
@@ -260,8 +260,10 @@
if (Filesystem::pathExists($project_root.$config)) {
$this->configFile = $project_root.$config;
} else {
- throw new Exception('PHPUnit configuration file was not '.
- 'found in '.$project_root.$config);
+ throw new Exception(
+ pht(
+ 'PHPUnit configuration file was not found in %s',
+ $project_root.$config));
}
}
$bin = $this->getConfigurationManager()->getConfigFromAnySource(
diff --git a/src/unit/engine/PhutilUnitTestEngine.php b/src/unit/engine/PhutilUnitTestEngine.php
--- a/src/unit/engine/PhutilUnitTestEngine.php
+++ b/src/unit/engine/PhutilUnitTestEngine.php
@@ -25,8 +25,11 @@
if (!function_exists('xdebug_start_code_coverage')) {
if ($enable_coverage === true) {
throw new ArcanistUsageException(
- 'You specified --coverage but xdebug is not available, so '.
- 'coverage can not be enabled for PhutilUnitTestEngine.');
+ pht(
+ 'You specified %s but xdebug is not available, so '.
+ 'coverage can not be enabled for %s.',
+ '--coverage',
+ __CLASS__));
}
} else {
$enable_coverage = true;
@@ -114,14 +117,20 @@
if (!$library_name) {
throw new Exception(
- "Attempting to run unit tests on a libphutil library which has not ".
- "been loaded, at:\n\n".
- " {$library_root}\n\n".
- "This probably means one of two things:\n\n".
- " - You may need to add this library to .arcconfig.\n".
- " - You may be running tests on a copy of libphutil or arcanist\n".
- " using a different copy of libphutil or arcanist. This\n".
- " operation is not supported.");
+ sprintf(
+ "%s\n\n %s\n\n%s\n\n - %s\n - %s\n",
+ pht(
+ 'Attempting to run unit tests on a libphutil library '.
+ 'which has not been loaded, at:'),
+ $library_root,
+ pht('This probably means one of two things:'),
+ pht(
+ 'You may need to add this library to %s.',
+ '.arcconfig.'),
+ pht(
+ 'You may be running tests on a copy of libphutil or '.
+ 'arcanist using a different copy of libphutil or arcanist. '.
+ 'This operation is not supported.')));
}
$path = Filesystem::resolvePath($path, $project_root);
diff --git a/src/unit/engine/PytestTestEngine.php b/src/unit/engine/PytestTestEngine.php
--- a/src/unit/engine/PytestTestEngine.php
+++ b/src/unit/engine/PytestTestEngine.php
@@ -17,7 +17,7 @@
if (!Filesystem::pathExists($junit_tmp)) {
throw new CommandException(
- "Command failed with error #{$err}!",
+ pht('Command failed with error #%s!', $err),
$future->getCommand(),
$err,
$stdout,
diff --git a/src/unit/engine/XUnitTestEngine.php b/src/unit/engine/XUnitTestEngine.php
--- a/src/unit/engine/XUnitTestEngine.php
+++ b/src/unit/engine/XUnitTestEngine.php
@@ -42,7 +42,12 @@
} else if (Filesystem::binaryExists('xbuild')) {
$this->buildEngine = 'xbuild';
} else {
- throw new Exception('Unable to find msbuild or xbuild in PATH!');
+ throw new Exception(
+ pht(
+ 'Unable to find %s or %s in %s!',
+ 'msbuild',
+ 'xbuild',
+ 'PATH'));
}
// Determine runtime engine (.NET or Mono).
@@ -51,7 +56,8 @@
} else if (Filesystem::binaryExists('mono')) {
$this->runtimeEngine = Filesystem::resolveBinary('mono');
} else {
- throw new Exception('Unable to find Mono and you are not on Windows!');
+ throw new Exception(
+ pht('Unable to find Mono and you are not on Windows!'));
}
// Read the discovery rules.
@@ -60,8 +66,11 @@
'unit.csharp.discovery');
if ($this->discoveryRules === null) {
throw new Exception(
- 'You must configure discovery rules to map C# files '.
- 'back to test projects (`unit.csharp.discovery` in .arcconfig).');
+ pht(
+ 'You must configure discovery rules to map C# files '.
+ 'back to test projects (`%s` in %s).',
+ 'unit.csharp.discovery',
+ '.arcconfig'));
}
// Determine xUnit test runner path.
@@ -77,8 +86,11 @@
$this->testEngine = 'xunit.console.clr4.exe';
} else {
throw new Exception(
- "Unable to locate xUnit console runner. Configure ".
- "it with the `unit.csharp.xunit.binary' option in .arcconfig");
+ pht(
+ "Unable to locate xUnit console runner. Configure ".
+ "it with the `%s' option in %s.",
+ 'unit.csharp.xunit.binary',
+ '.arcconfig'));
}
}
@@ -234,7 +246,7 @@
$this->projectRoot));
$results = array();
$result = new ArcanistUnitTestResult();
- $result->setName("(regenerate projects for $platform)");
+ $result->setName(pht('(regenerate projects for %s)', $platform));
try {
$regenerate_future->resolvex();
diff --git a/src/unit/engine/__tests__/PhutilUnitTestEngineTestCase.php b/src/unit/engine/__tests__/PhutilUnitTestEngineTestCase.php
--- a/src/unit/engine/__tests__/PhutilUnitTestEngineTestCase.php
+++ b/src/unit/engine/__tests__/PhutilUnitTestEngineTestCase.php
@@ -18,7 +18,9 @@
$this->assertEqual(
1,
self::$allTestsCounter,
- 'Expect willRunTests() has been called once.');
+ pht(
+ 'Expect %s has been called once.',
+ 'willRunTests()'));
self::$allTestsCounter--;
@@ -27,21 +29,27 @@
$this->assertEqual(
$actual_test_count,
count(self::$distinctWillRunTests),
- 'Expect willRunOneTest() was called once for each test.');
+ pht(
+ 'Expect %s was called once for each test.',
+ 'willRunOneTest()'));
$this->assertEqual(
$actual_test_count,
count(self::$distinctDidRunTests),
- 'Expect didRunOneTest() was called once for each test.');
+ pht(
+ 'Expect %s was called once for each test.',
+ 'didRunOneTest()'));
$this->assertEqual(
self::$distinctWillRunTests,
self::$distinctDidRunTests,
- 'Expect same tests had pre- and post-run callbacks invoked.');
+ pht('Expect same tests had pre-run and post-run callbacks invoked.'));
}
public function __destruct() {
if (self::$allTestsCounter !== 0) {
throw new Exception(
- 'didRunTests() was not called correctly after tests completed!');
+ pht(
+ '%s was not called correctly after tests completed!',
+ 'didRunTests()'));
}
}
@@ -54,14 +62,14 @@
$this->assertEqual(
1,
self::$oneTestCounter,
- 'Expect willRunOneTest depth to be one.');
+ pht('Expect %s depth to be one.', 'willRunOneTest()'));
self::$distinctDidRunTests[$test] = true;
self::$oneTestCounter--;
}
public function testPass() {
- $this->assertEqual(1, 1, 'This test is expected to pass.');
+ $this->assertEqual(1, 1, pht('This test is expected to pass.'));
}
public function testFailSkip() {
@@ -74,11 +82,11 @@
} else if ($result->getResult() == ArcanistUnitTestResult::RESULT_SKIP) {
$skipped++;
} else {
- $this->assertFailure('These tests should either fail or skip.');
+ $this->assertFailure(pht('These tests should either fail or skip.'));
}
}
- $this->assertEqual(1, $failed, 'One test was expected to fail.');
- $this->assertEqual(1, $skipped, 'One test was expected to skip.');
+ $this->assertEqual(1, $failed, pht('One test was expected to fail.'));
+ $this->assertEqual(1, $skipped, pht('One test was expected to skip.'));
}
public function testTryTestCases() {
@@ -105,7 +113,7 @@
protected function throwIfFalsey($input) {
if (!$input) {
- throw new Exception('This is a negative test case!');
+ throw new Exception(pht('This is a negative test case!'));
}
}
diff --git a/src/unit/engine/phutil/ArcanistPhutilTestCase.php b/src/unit/engine/phutil/ArcanistPhutilTestCase.php
--- a/src/unit/engine/phutil/ArcanistPhutilTestCase.php
+++ b/src/unit/engine/phutil/ArcanistPhutilTestCase.php
@@ -111,14 +111,14 @@
$output .= "\n";
if (strpos($expect, "\n") === false && strpos($result, "\n") === false) {
- $output .= "Expected: {$expect}\n";
- $output .= " Actual: {$result}";
+ $output .= pht("Expected: %s\n Actual: %s", $expect, $result);
} else {
- $output .= "Expected vs Actual Output Diff\n";
- $output .= ArcanistDiffUtils::renderDifferences(
- $expect,
- $result,
- $lines = 0xFFFF);
+ $output .= pht(
+ "Expected vs Actual Output Diff\n%s",
+ ArcanistDiffUtils::renderDifferences(
+ $expect,
+ $result,
+ $lines = 0xFFFF));
}
$this->failTest($output);
@@ -216,7 +216,7 @@
if (count($inputs) !== count($expect)) {
$this->assertFailure(
- 'Input and expectations must have the same number of values.');
+ pht('Input and expectations must have the same number of values.'));
}
$labels = array_keys($inputs);
@@ -243,18 +243,23 @@
if ($expect === $actual) {
if ($expect) {
- $message = "Test case '{$label}' did not throw, as expected.";
+ $message = pht("Test case '%s' did not throw, as expected.", $label);
} else {
- $message = "Test case '{$label}' threw, as expected.";
+ $message = pht("Test case '%s' threw, as expected.", $label);
}
} else {
if ($expect) {
- $message = "Test case '{$label}' was expected to succeed, but it ".
- "raised an exception of class ".get_class($ex)." with ".
- "message: ".$ex->getMessage();
+ $message = pht(
+ "Test case '%s' was expected to succeed, but it ".
+ "raised an exception of class %s with message: %s",
+ $label,
+ get_class($ex),
+ $ex->getMessage());
} else {
- $message = "Test case '{$label}' was expected to raise an ".
- "exception, but it did not throw anything.";
+ $message = pht(
+ "Test case '%s' was expected to raise an ".
+ "exception, but it did not throw anything.",
+ $label);
}
}
@@ -498,7 +503,7 @@
throw head($exceptions);
} else {
throw new PhutilAggregateException(
- 'Multiple exceptions were raised during test execution.',
+ pht('Multiple exceptions were raised during test execution.'),
$exceptions);
}
}
@@ -518,7 +523,12 @@
$ex_class = get_class($ex);
$ex_message = $ex->getMessage();
$ex_trace = $ex->getTraceAsString();
- $message = "EXCEPTION ({$ex_class}): {$ex_message}\n{$ex_trace}";
+ $message = sprintf(
+ "%s (%s): %s\n%s",
+ pht('EXCEPTION'),
+ $ex_class,
+ $ex_message,
+ $ex_trace);
$this->failTest($message);
}
}
@@ -599,7 +609,7 @@
final private function assertCoverageAvailable() {
if (!function_exists('xdebug_start_code_coverage')) {
throw new Exception(
- "You've enabled code coverage but XDebug is not installed.");
+ pht("You've enabled code coverage but XDebug is not installed."));
}
}
diff --git a/src/unit/parser/ArcanistGoTestResultParser.php b/src/unit/parser/ArcanistGoTestResultParser.php
--- a/src/unit/parser/ArcanistGoTestResultParser.php
+++ b/src/unit/parser/ArcanistGoTestResultParser.php
@@ -122,7 +122,6 @@
}
private function fixNames($test_case_results, $test_case_name) {
-
foreach ($test_case_results as &$result) {
$test_name = $result->getName();
$result->setName('Go::Test::'.$test_case_name.'::'.$test_name);
diff --git a/src/unit/parser/ArcanistPhpunitTestResultParser.php b/src/unit/parser/ArcanistPhpunitTestResultParser.php
--- a/src/unit/parser/ArcanistPhpunitTestResultParser.php
+++ b/src/unit/parser/ArcanistPhpunitTestResultParser.php
@@ -170,12 +170,13 @@
private function getJsonReport($json) {
if (empty($json)) {
- throw new Exception('JSON report file is empty, '.
- 'it probably means that phpunit failed to run tests. '.
- 'Try running arc unit with --trace option and then run '.
- 'generated phpunit command yourself, you might get the '.
- 'answer.'
- );
+ throw new Exception(
+ pht(
+ 'JSON report file is empty, it probably means that phpunit '.
+ 'failed to run tests. Try running %s with %s option and then run '.
+ 'generated phpunit command yourself, you might get the answer.',
+ 'arc unit',
+ '--trace'));
}
$json = preg_replace('/}{\s*"/', '},{"', $json);
diff --git a/src/unit/parser/ArcanistXUnitTestResultParser.php b/src/unit/parser/ArcanistXUnitTestResultParser.php
--- a/src/unit/parser/ArcanistXUnitTestResultParser.php
+++ b/src/unit/parser/ArcanistXUnitTestResultParser.php
@@ -16,7 +16,10 @@
public function parseTestResults($test_results) {
if (!strlen($test_results)) {
throw new Exception(
- 'test_results argument to parseTestResults must not be empty');
+ pht(
+ '%s argument to %s must not be empty',
+ 'test_results',
+ 'parseTestResults()'));
}
// xunit xsd: https://gist.github.com/959290
@@ -28,7 +31,10 @@
->setMaximumGlyphs(150)
->truncateString($test_results);
throw new Exception(
- "Failed to load XUnit report; Input starts with:\n\n {$input_start}");
+ sprintf(
+ "%s\n\n%s",
+ pht('Failed to load XUnit report; Input starts with:'),
+ $input_start));
}
$results = array();
diff --git a/src/unit/parser/__tests__/XUnitTestResultParserTestCase.php b/src/unit/parser/__tests__/XUnitTestResultParserTestCase.php
--- a/src/unit/parser/__tests__/XUnitTestResultParserTestCase.php
+++ b/src/unit/parser/__tests__/XUnitTestResultParserTestCase.php
@@ -28,7 +28,7 @@
$parsed_results = id(new ArcanistXUnitTestResultParser())
->parseTestResults('');
- $this->failTest('Should throw on empty input');
+ $this->failTest(pht('Should throw on empty input'));
} catch (Exception $e) {
// OK
}
@@ -43,7 +43,7 @@
$parsed_results = id(new ArcanistXUnitTestResultParser())
->parseTestResults($stubbed_results);
- $this->failTest('Should throw on non-xml input');
+ $this->failTest(pht('Should throw on non-xml input'));
} catch (Exception $e) {
// OK
}
diff --git a/src/unit/renderer/ArcanistUnitConsoleRenderer.php b/src/unit/renderer/ArcanistUnitConsoleRenderer.php
--- a/src/unit/renderer/ArcanistUnitConsoleRenderer.php
+++ b/src/unit/renderer/ArcanistUnitConsoleRenderer.php
@@ -36,16 +36,32 @@
}
private function getFormattedResult($result) {
- static $status_codes = array(
- ArcanistUnitTestResult::RESULT_PASS => '<bg:green>** PASS **</bg>',
- ArcanistUnitTestResult::RESULT_FAIL => '<bg:red>** FAIL **</bg>',
- ArcanistUnitTestResult::RESULT_SKIP => '<bg:yellow>** SKIP **</bg>',
- ArcanistUnitTestResult::RESULT_BROKEN => '<bg:red>** BROKEN **</bg>',
- ArcanistUnitTestResult::RESULT_UNSOUND => '<bg:yellow>** UNSOUND **</bg>',
- ArcanistUnitTestResult::RESULT_POSTPONED =>
- '<bg:yellow>** POSTPONED **</bg>',
- );
- return phutil_console_format($status_codes[$result]);
+ switch ($result) {
+ case ArcanistUnitTestResult::RESULT_PASS:
+ return phutil_console_format('<bg:green>** %s **</bg>', pht('PASS'));
+
+ case ArcanistUnitTestResult::RESULT_FAIL:
+ return phutil_console_format('<bg:red>** %s **</bg>', pht('FAIL'));
+
+ case ArcanistUnitTestResult::RESULT_SKIP:
+ return phutil_console_format('<bg:yellow>** %s **</bg>', pht('SKIP'));
+
+ case ArcanistUnitTestResult::RESULT_BROKEN:
+ return phutil_console_format('<bg:red>** %s **</bg>', pht('BROKEN'));
+
+ case ArcanistUnitTestResult::RESULT_UNSOUND:
+ return phutil_console_format(
+ '<bg:yellow>** %s **</bg>',
+ pht('UNSOUND'));
+
+ case ArcanistUnitTestResult::RESULT_POSTPONED:
+ return phutil_console_format(
+ '<bg:yellow>** %s **</bg>',
+ pht('POSTPONED'));
+
+ default:
+ return null;
+ }
}
private function formatTestDuration($seconds) {
diff --git a/src/workflow/ArcanistAliasWorkflow.php b/src/workflow/ArcanistAliasWorkflow.php
--- a/src/workflow/ArcanistAliasWorkflow.php
+++ b/src/workflow/ArcanistAliasWorkflow.php
@@ -91,22 +91,24 @@
implode(' ' , $binding));
}
} else {
- echo "You haven't defined any aliases yet.\n";
+ echo pht("You haven't defined any aliases yet.")."\n";
}
} else if (count($argv) == 1) {
if (empty($aliases[$argv[0]])) {
- echo "No alias '{$argv[0]}' to remove.\n";
+ echo pht("No alias '%s' to remove.", $argv[0])."\n";
} else {
- echo phutil_console_format(
- "'**arc %s**' is currently aliased to '**arc %s**'.",
- $argv[0],
- implode(' ', $aliases[$argv[0]]));
- $ok = phutil_console_confirm('Delete this alias?');
+ echo pht(
+ "'%s' is currently aliased to '%s'.",
+ phutil_console_format('**arc %s**', $argv[0]),
+ phutil_console_format(
+ '**arc %s**',
+ implode(' ', $aliases[$argv[0]])));
+ $ok = phutil_console_confirm(pht('Delete this alias?'));
if ($ok) {
$was = implode(' ', $aliases[$argv[0]]);
unset($aliases[$argv[0]]);
$this->writeAliases($aliases);
- echo "Unaliased '{$argv[0]}' (was '{$was}').\n";
+ echo pht("Unaliased '%s' (was '%s').", $argv[0], $was)."\n";
} else {
throw new ArcanistUserAbortException();
}
@@ -116,15 +118,18 @@
if ($arc_config->buildWorkflow($argv[0])) {
throw new ArcanistUsageException(
- "You can not create an alias for '{$argv[0]}' because it is a ".
- "builtin command. 'arc alias' can only create new commands.");
+ pht(
+ "You can not create an alias for '%s' because it is a ".
+ "builtin command. '%s' can only create new commands.",
+ $argv[0],
+ 'arc alias'));
}
$aliases[$argv[0]] = array_slice($argv, 1);
- echo phutil_console_format(
- "Aliased '**arc %s**' to '**arc %s**'.\n",
- $argv[0],
- implode(' ', $aliases[$argv[0]]));
+ echo pht(
+ "Aliased '%s' to '%s'.\n",
+ phutil_console_format('**arc %s**', $argv[0]),
+ phutil_console_format('**arc %s**', implode(' ', $aliases[$argv[0]])));
$this->writeAliases($aliases);
}
diff --git a/src/workflow/ArcanistAmendWorkflow.php b/src/workflow/ArcanistAmendWorkflow.php
--- a/src/workflow/ArcanistAmendWorkflow.php
+++ b/src/workflow/ArcanistAmendWorkflow.php
@@ -67,21 +67,25 @@
if (!$is_show) {
if (!$repository_api->supportsAmend()) {
throw new ArcanistUsageException(
- "You may only run 'arc amend' in a git or hg (version ".
- "2.2 or newer) working copy.");
+ pht(
+ "You may only run '%s' in a git or hg ".
+ "(version 2.2 or newer) working copy.",
+ 'arc amend'));
}
if ($this->isHistoryImmutable()) {
throw new ArcanistUsageException(
- 'This project is marked as adhering to a conservative history '.
- 'mutability doctrine (having an immutable local history), which '.
- 'precludes amending commit messages.');
+ pht(
+ 'This project is marked as adhering to a conservative history '.
+ 'mutability doctrine (having an immutable local history), which '.
+ 'precludes amending commit messages.'));
}
if ($repository_api->getUncommittedChanges()) {
throw new ArcanistUsageException(
- 'You have uncommitted changes in this branch. Stage and commit (or '.
- 'revert) them before proceeding.');
+ pht(
+ 'You have uncommitted changes in this branch. Stage and commit '.
+ '(or revert) them before proceeding.'));
}
}
@@ -101,14 +105,18 @@
if (!$revision_id) {
if (count($in_working_copy) == 0) {
throw new ArcanistUsageException(
- "No revision specified with '--revision', and no revisions found ".
- "in the working copy. Use '--revision <id>' to specify which ".
- "revision you want to amend.");
+ pht(
+ "No revision specified with '%s', and no revisions found ".
+ "in the working copy. Use '%s' to specify which revision ".
+ "you want to amend.",
+ '--revision',
+ '--revision <id>'));
} else if (count($in_working_copy) > 1) {
- $message = "More than one revision was found in the working copy:\n".
- $this->renderRevisionList($in_working_copy)."\n".
- "Use '--revision <id>' to specify which revision you want to ".
- "amend.";
+ $message = pht(
+ "More than one revision was found in the working copy:\n%s\n".
+ "Use '%s' to specify which revision you want to amend.",
+ $this->renderRevisionList($in_working_copy),
+ '--revision <id>');
throw new ArcanistUsageException($message);
} else {
$revision_id = key($in_working_copy);
@@ -123,9 +131,11 @@
$other_author = $other_author[$revision['authorPHID']];
$rev_title = $revision['title'];
$ok = phutil_console_confirm(
- "You are amending the revision 'D{$revision_id}: {$rev_title}' ".
- "but you are not the author. Amend this revision by ".
- "{$other_author}?");
+ pht(
+ "You are amending the revision '%s' but you are not ".
+ "the author. Amend this revision by %s?",
+ "D{$revision_id}: {$rev_title}",
+ $other_author));
if (!$ok) {
throw new ArcanistUserAbortException();
}
@@ -146,7 +156,7 @@
throw $ex;
} else {
throw new ArcanistUsageException(
- "Revision D{$revision_id} does not exist."
+ pht("Revision '%s' does not exist.", "D{$revision_id}")
);
}
}
@@ -158,7 +168,7 @@
));
if (empty($revision)) {
throw new Exception(
- "Failed to lookup information for 'D{$revision_id}'!");
+ pht("Failed to lookup information for '%s'!", "D{$revision_id}"));
}
$revision = head($revision);
$revision_title = $revision['title'];
@@ -166,9 +176,11 @@
if (!$is_show) {
if ($revision_id && empty($in_working_copy[$revision_id])) {
$ok = phutil_console_confirm(
- "The revision 'D{$revision_id}' does not appear to be in the ".
- "working copy. Are you sure you want to amend HEAD with the ".
- "commit message for 'D{$revision_id}: {$revision_title}'?");
+ pht(
+ "The revision '%s' does not appear to be in the working copy. Are ".
+ "you sure you want to amend HEAD with the commit message for '%s'?",
+ "D{$revision_id}",
+ "D{$revision_id}: {$revision_title}"));
if (!$ok) {
throw new ArcanistUserAbortException();
}
@@ -178,9 +190,12 @@
if ($is_show) {
echo $message."\n";
} else {
- echo phutil_console_format(
- "Amending commit message to reflect revision **%s**.\n",
- "D{$revision_id}: {$revision_title}");
+ echo pht(
+ "Amending commit message to reflect revision %s.\n",
+ phutil_console_format(
+ '**D%d: %s**',
+ $revision_id,
+ $revision_title));
$repository_api->amendCommit($message);
}
diff --git a/src/workflow/ArcanistBackoutWorkflow.php b/src/workflow/ArcanistBackoutWorkflow.php
--- a/src/workflow/ArcanistBackoutWorkflow.php
+++ b/src/workflow/ArcanistBackoutWorkflow.php
@@ -61,16 +61,16 @@
));
if (!$revisions) {
throw new ArcanistUsageException(
- 'The revision you provided does not exist!');
+ pht('The revision you provided does not exist!'));
}
$revision = $revisions[0];
$commits = $revision['commits'];
if (!$commits) {
throw new ArcanistUsageException(
- 'This revision has not been committed yet!');
+ pht('This revision has not been committed yet!'));
} else if (count($commits) > 1) {
throw new ArcanistUsageException(
- 'The revision you provided has multiple commits!');
+ pht('The revision you provided has multiple commits!'));
}
$commit_phid = $commits[0];
$commit = $conduit->callMethodSynchronous(
@@ -144,11 +144,11 @@
$repository_api->isHgSubversionRepo();
$revision_id = null;
- $console->writeOut("Starting backout\n");
+ $console->writeOut(pht('Starting backout.')."\n");
$input = $this->getArgument('input');
if (!$input || count($input) != 1) {
throw new ArcanistUsageException(
- 'You must specify one commit to backout!');
+ pht('You must specify one commit to backout!'));
}
// Input looks like a Differential revision, so
@@ -175,14 +175,15 @@
// Run 'backout'.
$subject = $repository_api->getCommitSummary($commit_hash);
- $console->writeOut("Backing out commit {$commit_hash} {$subject} \n");
+ $console->writeOut(
+ pht('Backing out commit %s %s', $commit_hash, $subject)."\n");
$repository_api->backoutCommit($commit_hash);
// Create commit message and execute the commit
$message = $this->buildCommitMessage($commit_hash);
$repository_api->doCommit($message);
- $console->writeOut("Double-check the commit and push when ready\n");
+ $console->writeOut(pht('Double-check the commit and push when ready.')."\n");
}
}
diff --git a/src/workflow/ArcanistBrowseWorkflow.php b/src/workflow/ArcanistBrowseWorkflow.php
--- a/src/workflow/ArcanistBrowseWorkflow.php
+++ b/src/workflow/ArcanistBrowseWorkflow.php
@@ -37,7 +37,8 @@
'branch' => array(
'param' => 'branch_name',
'help' => pht(
- 'Default branch name to view on server. Defaults to "master".'),
+ 'Default branch name to view on server. Defaults to "%s".',
+ 'master'),
),
'force' => array(
'help' => pht(
@@ -74,7 +75,8 @@
throw new ArcanistUsageException(
pht(
'Specify one or more paths or objects to browse. Use the command '.
- '"arc browse ." if you want to browse this directory.'));
+ '"%s" if you want to browse this directory.',
+ 'arc browse .'));
}
$things = array_fuse($things);
@@ -182,21 +184,25 @@
} else {
if ($things) {
$console->writeOut(
+ "%s\n",
pht(
"The current working directory is not a repository working ".
"copy, so remaining arguments can not be resolved as paths or ".
"commits. To browse paths or symbolic commits in Diffusion, run ".
- "'arc browse' from inside a working copy.")."\n");
+ "'%s' from inside a working copy.",
+ 'arc browse'));
}
}
foreach ($things as $thing) {
$console->writeOut(
+ "%s\n",
pht(
'Unable to find an object named **%s**, no such commit exists in '.
'the remote, and no such path exists in the working copy. Use '.
- '__--force__ to treat this as a path anyway.',
- $thing)."\n");
+ '__%s__ to treat this as a path anyway.',
+ $thing,
+ '--force'));
}
if ($uris) {
@@ -212,8 +218,10 @@
throw new ArcanistUsageException(
pht(
'arc is unable to determine which repository in Diffusion '.
- 'this working copy belongs to. Use "arc which" to understand how '.
- 'arc looks for a repository.'));
+ 'this working copy belongs to. Use "%s" to understand how '.
+ '%s looks for a repository.',
+ 'arc which',
+ 'arc'));
}
$branch = $this->getArgument('branch', 'master');
diff --git a/src/workflow/ArcanistCloseRevisionWorkflow.php b/src/workflow/ArcanistCloseRevisionWorkflow.php
--- a/src/workflow/ArcanistCloseRevisionWorkflow.php
+++ b/src/workflow/ArcanistCloseRevisionWorkflow.php
@@ -32,13 +32,14 @@
public function getArguments() {
return array(
'finalize' => array(
- 'help' =>
+ 'help' => pht(
"Close only if the repository is untracked and the revision is ".
"accepted. Continue even if the close can't happen. This is a soft ".
- "version of 'close-revision' used by other workflows.",
+ "version of '' used by other workflows.",
+ 'close-revision'),
),
'quiet' => array(
- 'help' => 'Do not print a success message.',
+ 'help' => pht('Do not print a success message.'),
),
'*' => 'revision',
);
@@ -68,11 +69,15 @@
$revision_list = $this->getArgument('revision', array());
if (!$revision_list) {
throw new ArcanistUsageException(
- 'close-revision requires a revision number.');
+ pht(
+ '%s requires a revision number.',
+ 'close-revision'));
}
if (count($revision_list) != 1) {
throw new ArcanistUsageException(
- 'close-revision requires exactly one revision.');
+ pht(
+ '%s requires exactly one revision.',
+ 'close-revision'));
}
$revision_id = reset($revision_list);
$revision_id = $this->normalizeRevisionID($revision_id);
@@ -86,8 +91,9 @@
if (!$revision && !$is_finalize) {
throw new ArcanistUsageException(
- "Revision D{$revision_id} does not exist."
- );
+ pht(
+ 'Revision %s does not exist.',
+ "D{$revision_id}"));
}
$status_accepted = ArcanistDifferentialRevisionStatus::ACCEPTED;
@@ -95,14 +101,18 @@
if (!$is_finalize && $revision['status'] != $status_accepted) {
throw new ArcanistUsageException(
- "Revision D{$revision_id} can not be closed. You can only close ".
- "revisions which have been 'accepted'.");
+ pht(
+ "Revision %s can not be closed. You can only close ".
+ "revisions which have been 'accepted'.",
+ "D{$revision_id}"));
}
if ($revision) {
if (!$is_finalize && $revision['authorPHID'] != $this->getUserPHID()) {
- $prompt = "You are not the author of revision D{$revision_id}, ".
- 'are you sure you want to close it?';
+ $prompt = pht(
+ 'You are not the author of revision %s, '.
+ 'are you sure you want to close it?',
+ "D{$revision_id}");
if (!phutil_console_confirm($prompt)) {
throw new ArcanistUserAbortException();
}
@@ -118,7 +128,10 @@
if ($actually_close) {
$revision_name = $revision['title'];
- echo "Closing revision D{$revision_id} '{$revision_name}'...\n";
+ echo pht(
+ "Closing revision %s '%s'...\n",
+ "D{$revision_id}",
+ $revision_name);
$conduit->callMethodSynchronous(
'differential.close',
@@ -143,7 +156,7 @@
$message = $this->getRepositoryAPI()->getFinalizedRevisionMessage();
echo phutil_console_wrap($message)."\n";
} else {
- echo "Done.\n";
+ echo pht('Done.')."\n";
}
}
diff --git a/src/workflow/ArcanistCloseWorkflow.php b/src/workflow/ArcanistCloseWorkflow.php
--- a/src/workflow/ArcanistCloseWorkflow.php
+++ b/src/workflow/ArcanistCloseWorkflow.php
@@ -18,13 +18,13 @@
private function getStatusOptions() {
if ($this->statusData === null) {
- throw new Exception('loadStatusData first!');
+ throw new Exception(pht('Call %s first!', 'loadStatusData()'));
}
return idx($this->statusData, 'statusMap');
}
private function getDefaultClosedStatus() {
if ($this->statusData === null) {
- throw new Exception('loadStatusData first!');
+ throw new Exception(pht('Call %s first!', 'loadStatusData()'));
}
return idx($this->statusData, 'defaultClosedStatus');
}
@@ -73,10 +73,11 @@
'short' => 's',
'help' => pht(
'Specify a new status. Valid status options can be '.
- 'seen with the `list-statuses` argument.'),
+ 'seen with the `%s` argument.',
+ 'list-statuses'),
),
'list-statuses' => array(
- 'help' => 'Show available status options and exit.',
+ 'help' => pht('Show available status options and exit.'),
),
);
}
@@ -85,9 +86,11 @@
$this->loadStatusData();
$list_statuses = $this->getArgument('list-statuses');
if ($list_statuses) {
- echo phutil_console_format(pht(
- "Valid status options are:\n".
- "\t%s\n", implode($this->getStatusOptions(), ', ')));
+ echo phutil_console_format(
+ "%s\n",
+ pht(
+ "Valid status options are:\n\t%s",
+ implode($this->getStatusOptions(), ', ')));
return 0;
}
$ids = $this->getArgument('task_id');
@@ -102,23 +105,33 @@
if (!isset($status_options[$status])) {
$options = array_keys($status_options);
$last = array_pop($options);
- echo "Invalid status {$status}, valid options are ".
- implode(', ', $options).", or {$last}.\n";
+ echo pht(
+ "Invalid status %s, valid options are %s, or %s.\n",
+ $status,
+ implode(', ', $options),
+ $last);
+
return;
}
foreach ($ids as $id) {
if (!preg_match('/^T?\d+$/', $id)) {
- echo "Invalid Task ID: {$id}.\n";
+ echo pht('Invalid Task ID: %s.', $id)."\n";
return 1;
}
$id = ltrim($id, 'T');
$result = $this->closeTask($id, $status, $message);
$current_status = $status_options[$status];
if ($result) {
- echo "T{$id}'s status is now set to {$current_status}.\n";
+ echo pht(
+ "%s's status is now set to %s.\n",
+ "T{$id}",
+ $current_status);
} else {
- echo "T{$id} is already set to {$current_status}.\n";
+ echo pht(
+ "%s is already set to %s.\n",
+ "T{$id}",
+ $current_status);
}
}
return 0;
diff --git a/src/workflow/ArcanistCommitWorkflow.php b/src/workflow/ArcanistCommitWorkflow.php
--- a/src/workflow/ArcanistCommitWorkflow.php
+++ b/src/workflow/ArcanistCommitWorkflow.php
@@ -49,15 +49,15 @@
public function getArguments() {
return array(
'show' => array(
- 'help' =>
+ 'help' => pht(
'Show the command which would be issued, but do not actually '.
- 'commit anything.',
+ 'commit anything.'),
),
'revision' => array(
'param' => 'revision_id',
- 'help' =>
+ 'help' => pht(
'Commit a specific revision. If you do not specify a revision, '.
- 'arc will look for committable revisions.',
+ 'arc will look for committable revisions.'),
),
);
}
@@ -76,13 +76,17 @@
if (count($revisions) == 0) {
throw new ArcanistUsageException(
- "Unable to identify the revision in the working copy. Use ".
- "'--revision <revision_id>' to select a revision.");
+ pht(
+ "Unable to identify the revision in the working copy. Use ".
+ "'%s' to select a revision.",
+ '--revision <revision_id>'));
} else if (count($revisions) > 1) {
throw new ArcanistUsageException(
- "More than one revision exists in the working copy:\n\n".
- $this->renderRevisionList($revisions)."\n".
- "Use '--revision <revision_id>' to select a revision.");
+ pht(
+ "More than one revision exists in the working copy:\n\n%s\n".
+ "Use '%s' to select a revision.",
+ $this->renderRevisionList($revisions),
+ '--revision <revision_id>'));
}
} else {
@@ -94,7 +98,9 @@
if (count($revisions) == 0) {
throw new ArcanistUsageException(
- "Revision 'D{$revision_id}' does not exist.");
+ pht(
+ "Revision '%s' does not exist.",
+ "D{$revision_id}"));
}
}
@@ -129,7 +135,10 @@
}
$revision_title = $revision['title'];
- echo "Committing 'D{$revision_id}: {$revision_title}'...\n";
+ echo pht(
+ "Committing '%s: %s'...\n",
+ "D{$revision_id}",
+ $revision_title);
$files = $this->getCommitFileList($revision);
@@ -151,7 +160,7 @@
$err = phutil_passthru('%C', $command);
if ($err) {
- throw new Exception("Executing 'svn commit' failed!");
+ throw new Exception(pht("Executing '%s' failed!", 'svn commit'));
}
$this->askForRepositoryUpdate();
@@ -199,12 +208,15 @@
foreach ($commit_paths as $will_commit => $ignored) {
if (Filesystem::isDescendant($path, $will_commit)) {
throw new ArcanistUsageException(
- "This commit includes the directory '{$will_commit}', but ".
- "it contains a modified path ('{$path}') which is NOT included ".
- "in the commit. Subversion can not handle this operation and ".
- "will commit the path anyway. You need to sort out the working ".
- "copy changes to '{$path}' before you may proceed with the ".
- "commit.");
+ pht(
+ "This commit includes the directory '%s', but it contains a ".
+ "modified path ('%s') which is NOT included in the commit. ".
+ "Subversion can not handle this operation and will commit the ".
+ "path anyway. You need to sort out the working copy changes to ".
+ "'%s' before you may proceed with the commit.",
+ $will_commit,
+ $path,
+ $path));
}
}
$modified_but_not_included[] = $path;
@@ -249,7 +261,9 @@
if (empty($files)) {
throw new ArcanistUsageException(
- 'There is nothing left to commit. None of the modified paths exist.');
+ pht(
+ 'There is nothing left to commit. '.
+ 'None of the modified paths exist.'));
}
return $files;
@@ -303,24 +317,29 @@
$confirm = array();
if ($revision['status'] != ArcanistDifferentialRevisionStatus::ACCEPTED) {
- $confirm[] =
- "Revision 'D{$revision_id}: {$revision_title}' has not been accepted. ".
- "Commit this revision anyway?";
+ $confirm[] = pht(
+ "Revision '%s: %s' has not been accepted. Commit this revision anyway?",
+ "D{$revision_id}",
+ $revision_title);
}
if ($revision['authorPHID'] != $this->getUserPHID()) {
- $confirm[] =
- "You are not the author of 'D{$revision_id}: {$revision_title}'. ".
- "Commit this revision anyway?";
+ $confirm[] = pht(
+ "You are not the author of '%s: %s'. Commit this revision anyway?",
+ "D{$revision_id}",
+ $revision_title);
}
$revision_source = idx($revision, 'branch');
$current_source = $repository_api->getBranchName();
if ($revision_source != $current_source) {
- $confirm[] =
- "Revision 'D{$revision_id}: {$revision_title}' was generated from ".
- "'{$revision_source}', but current working copy root is ".
- "'{$current_source}'. Commit this revision anyway?";
+ $confirm[] = pht(
+ "Revision '%s: %s' was generated from '%s', but current working ".
+ "copy root is '%s'. Commit this revision anyway?",
+ "D{$revision_id}",
+ $revision_title,
+ $revision_source,
+ $current_source);
}
foreach ($confirm as $thing) {
diff --git a/src/workflow/ArcanistCoverWorkflow.php b/src/workflow/ArcanistCoverWorkflow.php
--- a/src/workflow/ArcanistCoverWorkflow.php
+++ b/src/workflow/ArcanistCoverWorkflow.php
@@ -31,13 +31,13 @@
return array(
'rev' => array(
'param' => 'revision',
- 'help' => 'Cover changes since a specific revision.',
+ 'help' => pht('Cover changes since a specific revision.'),
'supports' => array(
'git',
'hg',
),
'nosupport' => array(
- 'svn' => 'cover does not currently support --rev in svn.',
+ 'svn' => pht('cover does not currently support %s in svn.', '--rev'),
),
),
'*' => 'paths',
@@ -78,7 +78,7 @@
if (!$paths) {
throw new ArcanistNoEffectException(
- "You're covered, you didn't change anything.");
+ pht("You're covered, you didn't change anything."));
}
$covers = array();
@@ -126,7 +126,8 @@
}
}
} else {
- echo "You're covered, your changes didn't touch anyone else's code.\n";
+ echo pht(
+ "You're covered, your changes didn't touch anyone else's code.\n");
}
return 0;
diff --git a/src/workflow/ArcanistDiffWorkflow.php b/src/workflow/ArcanistDiffWorkflow.php
--- a/src/workflow/ArcanistDiffWorkflow.php
+++ b/src/workflow/ArcanistDiffWorkflow.php
@@ -2395,9 +2395,12 @@
$title = $revision['title'];
throw new ArcanistUsageException(
- "You don't own revision D{$id} '{$title}'. You can only update ".
- "revisions you own. You can 'Commandeer' this revision from the web ".
- "interface if you want to become the owner.");
+ pht(
+ "You don't own revision %s '%s'. You can only update revisions ".
+ "you own. You can 'Commandeer' this revision from the web ".
+ "interface if you want to become the owner.",
+ "D{$id}",
+ $title));
}
@@ -2524,12 +2527,14 @@
$change->setMetadata("{$type}:binary-phid", $phid);
echo pht("Uploaded '%s' (%s).", $name, $type)."\n";
} catch (Exception $e) {
- echo "Failed to upload {$type} binary '{$name}'.\n\n";
+ echo pht("Failed to upload %s binary '%s'.", $type, $name)."\n\n";
echo $e->getMessage()."\n";
- if (!phutil_console_confirm('Continue?', $default_no = false)) {
+ if (!phutil_console_confirm(pht('Continue?'), $default_no = false)) {
throw new ArcanistUsageException(
- 'Aborted due to file upload failure. You can use --skip-binaries '.
- 'to skip binary uploads.');
+ pht(
+ 'Aborted due to file upload failure. You can use %s '.
+ 'to skip binary uploads.',
+ '--skip-binaries'));
}
}
}
diff --git a/src/workflow/ArcanistDownloadWorkflow.php b/src/workflow/ArcanistDownloadWorkflow.php
--- a/src/workflow/ArcanistDownloadWorkflow.php
+++ b/src/workflow/ArcanistDownloadWorkflow.php
@@ -34,15 +34,18 @@
return array(
'show' => array(
'conflicts' => array(
- 'as' =>
- 'Use --show to direct the file to stdout, or --as to direct '.
+ 'as' => pht(
+ 'Use %s to direct the file to stdout, or %s to direct '.
'it to a named location.',
+ '--show',
+ '--as'),
),
- 'help' => 'Write file to stdout instead of to disk.',
+ 'help' => pht('Write file to stdout instead of to disk.'),
),
'as' => array(
'param' => 'name',
- 'help' => 'Save the file with a specific name rather than the default.',
+ 'help' => pht(
+ 'Save the file with a specific name rather than the default.'),
),
'*' => 'argv',
);
@@ -51,15 +54,17 @@
protected function didParseArguments() {
$argv = $this->getArgument('argv');
if (!$argv) {
- throw new ArcanistUsageException('Specify a file to download.');
+ throw new ArcanistUsageException(pht('Specify a file to download.'));
}
if (count($argv) > 1) {
- throw new ArcanistUsageException('Specify exactly one file to download.');
+ throw new ArcanistUsageException(
+ pht('Specify exactly one file to download.'));
}
$file = reset($argv);
if (!preg_match('/^F?\d+$/', $file)) {
- throw new ArcanistUsageException('Specify file by ID, e.g. F123.');
+ throw new ArcanistUsageException(
+ pht('Specify file by ID, e.g. %s.', 'F123'));
}
$this->id = (int)ltrim($file, 'F');
@@ -72,10 +77,9 @@
}
public function run() {
-
$conduit = $this->getConduit();
- $this->writeStatusMessage("Getting file information...\n");
+ $this->writeStatusMessage(pht('Getting file information...')."\n");
$info = $conduit->callMethodSynchronous(
'file.info',
array(
@@ -88,7 +92,7 @@
$desc = "'".$info['name']."' ".$desc;
}
- $this->writeStatusMessage("Downloading file {$desc}...\n");
+ $this->writeStatusMessage(pht('Downloading file %s...', $desc)."\n");
$data = $conduit->callMethodSynchronous(
'file.download',
array(
@@ -103,7 +107,7 @@
$path = Filesystem::writeUniqueFile(
nonempty($this->saveAs, $info['name'], 'file'),
$data);
- $this->writeStatusMessage("Saved file as '{$path}'.\n");
+ $this->writeStatusMessage(pht("Saved file as '%s'.", $path)."\n");
}
return 0;
diff --git a/src/workflow/ArcanistExportWorkflow.php b/src/workflow/ArcanistExportWorkflow.php
--- a/src/workflow/ArcanistExportWorkflow.php
+++ b/src/workflow/ArcanistExportWorkflow.php
@@ -44,39 +44,44 @@
public function getArguments() {
return array(
'git' => array(
- 'help' =>
+ 'help' => pht(
"Export change as a git patch. This format is more complete than ".
"unified, but less complete than arc bundles. These patches can be ".
- "applied with 'git apply' or 'arc patch'.",
+ "applied with '%s' or '%s'.",
+ 'git apply',
+ 'arc patch'),
),
'unified' => array(
- 'help' =>
+ 'help' => pht(
"Export change as a unified patch. This format is less complete ".
"than git patches or arc bundles. These patches can be applied with ".
- "'patch' or 'arc patch'.",
+ "'%s' or '%s'.",
+ 'patch',
+ 'arc patch'),
),
'arcbundle' => array(
'param' => 'file',
- 'help' =>
+ 'help' => pht(
"Export change as an arc bundle. This format can represent all ".
- "changes. These bundles can be applied with 'arc patch'.",
+ "changes. These bundles can be applied with '%s'.",
+ 'arc patch'),
),
'encoding' => array(
'param' => 'encoding',
- 'help' =>
- 'Attempt to convert non UTF-8 patch into specified encoding.',
+ 'help' => pht(
+ 'Attempt to convert non UTF-8 patch into specified encoding.'),
),
'revision' => array(
'param' => 'revision_id',
- 'help' =>
+ 'help' => pht(
'Instead of exporting changes from the working copy, export them '.
- 'from a Differential revision.',
+ 'from a Differential revision.'),
),
'diff' => array(
'param' => 'diff_id',
- 'help' =>
+ 'help' => pht(
'Instead of exporting changes from the working copy, export them '.
- 'from a Differential diff.',
+ 'from a Differential diff.'),
),
'*' => 'paths',
);
@@ -102,8 +107,11 @@
if ($requested > 1) {
throw new ArcanistUsageException(
- "Options '--revision' and '--diff' are not compatible. Choose exactly ".
- "one change source.");
+ pht(
+ "Options '%s' and '%s' are not compatible. Choose exactly ".
+ "one change source.",
+ '--revision',
+ '--diff'));
}
$format = null;
@@ -123,12 +131,19 @@
if ($requested === 0) {
throw new ArcanistUsageException(
- "Specify one of '--git', '--unified' or '--arcbundle <path>' to ".
- "choose an export format.");
+ pht(
+ "Specify one of '%s', '%s' or '%s' to choose an export format.",
+ '--git',
+ '--unified',
+ '--arcbundle <path>'));
} else if ($requested > 1) {
throw new ArcanistUsageException(
- "Options '--git', '--unified' and '--arcbundle' are not compatible. ".
- "Choose exactly one export format.");
+ pht(
+ "Options '%s', '%s' and '%s' are not compatible. ".
+ "Choose exactly one export format.",
+ '--git',
+ '--unified',
+ '--arcbundle'));
}
$this->format = $format;
@@ -260,9 +275,9 @@
break;
case self::FORMAT_BUNDLE:
$path = $this->getArgument('arcbundle');
- echo "Writing bundle to '{$path}'...\n";
+ echo pht("Writing bundle to '%s'...", $path)."\n";
$bundle->writeToDisk($path);
- echo "done.\n";
+ echo pht('Done.')."\n";
break;
}
diff --git a/src/workflow/ArcanistFeatureWorkflow.php b/src/workflow/ArcanistFeatureWorkflow.php
--- a/src/workflow/ArcanistFeatureWorkflow.php
+++ b/src/workflow/ArcanistFeatureWorkflow.php
@@ -53,17 +53,19 @@
public function getArguments() {
return array(
'view-all' => array(
- 'help' => 'Include closed and abandoned revisions.',
+ 'help' => pht('Include closed and abandoned revisions.'),
),
'by-status' => array(
- 'help' => 'Sort branches by status instead of time.',
+ 'help' => pht('Sort branches by status instead of time.'),
),
'output' => array(
'param' => 'format',
'support' => array(
'json',
),
- 'help' => "With 'json', show features in machine-readable JSON format.",
+ 'help' => pht(
+ "With '%s', show features in machine-readable JSON format.",
+ 'json'),
),
'*' => 'branch',
);
@@ -79,14 +81,15 @@
$names = $this->getArgument('branch');
if ($names) {
if (count($names) > 2) {
- throw new ArcanistUsageException('Specify only one branch.');
+ throw new ArcanistUsageException(pht('Specify only one branch.'));
}
return $this->checkoutBranch($names);
}
$branches = $repository_api->getAllBranches();
if (!$branches) {
- throw new ArcanistUsageException('No branches in this working copy.');
+ throw new ArcanistUsageException(
+ pht('No branches in this working copy.'));
}
$branches = $this->loadCommitInfo($branches);
@@ -302,7 +305,7 @@
$status = $revision['statusName'];
} else {
$desc = $branch['desc'];
- $status = 'No Revision';
+ $status = pht('No Revision');
}
if (!$this->getArgument('view-all') && !$branch['current']) {
diff --git a/src/workflow/ArcanistFlagWorkflow.php b/src/workflow/ArcanistFlagWorkflow.php
--- a/src/workflow/ArcanistFlagWorkflow.php
+++ b/src/workflow/ArcanistFlagWorkflow.php
@@ -57,18 +57,18 @@
return array(
'*' => 'objects',
'clear' => array(
- 'help' => 'Delete the flag on an object.',
+ 'help' => pht('Delete the flag on an object.'),
),
'edit' => array(
- 'help' => 'Edit the flag on an object.',
+ 'help' => pht('Edit the flag on an object.'),
),
'color' => array(
'param' => 'color',
- 'help' => 'Set the color of a flag.',
+ 'help' => pht('Set the color of a flag.'),
),
'note' => array(
'param' => 'note',
- 'help' => 'Set the note on a flag.',
+ 'help' => pht('Set the note on a flag.'),
),
);
}
@@ -114,10 +114,11 @@
$editing = $edit || ($color != -1) || $note;
if ($editing && $clear) {
- throw new ArcanistUsageException("You can't both edit and clear a flag.");
+ throw new ArcanistUsageException(
+ pht("You can't both edit and clear a flag."));
}
if (($editing || $clear) && count($objects) != 1) {
- throw new ArcanistUsageException('Specify exactly one object.');
+ throw new ArcanistUsageException(pht('Specify exactly one object.'));
}
if (!empty($objects)) {
@@ -131,7 +132,9 @@
if (isset($handles[$object])) {
$phids[$object] = $handles[$object]['phid'];
} else {
- echo phutil_console_format("**%s** doesn't exist.\n", $object);
+ echo pht(
+ "%s doesn't exist.\n",
+ phutil_console_format('**%s**', $object));
}
}
if (empty($phids)) {
@@ -153,7 +156,9 @@
'objectPHID' => head($phids),
));
if (!$flag) {
- echo phutil_console_format("**%s** has no flag to clear.\n", $object);
+ echo pht(
+ "%s has no flag to clear.\n",
+ phutil_console_format('**%s**', $object));
} else {
self::flagWasEdited($flag, 'deleted');
}
@@ -186,7 +191,9 @@
'objectPHID');
foreach ($phids as $object => $phid) {
if (!isset($flags[$phid])) {
- echo phutil_console_format("**%s** has no flag.\n", $object);
+ echo pht(
+ "%s has no flag.\n",
+ phutil_console_format('**%s**', $object));
}
}
@@ -196,7 +203,7 @@
// If the user passed object names, we already told them all their
// objects are nonexistent or unflagged.
if (empty($objects)) {
- echo "You have no flagged objects.\n";
+ echo pht('You have no flagged objects.')."\n";
}
} else {
// Print ALL the flags. With fancy formatting. Because fancy formatting
diff --git a/src/workflow/ArcanistGetConfigWorkflow.php b/src/workflow/ArcanistGetConfigWorkflow.php
--- a/src/workflow/ArcanistGetConfigWorkflow.php
+++ b/src/workflow/ArcanistGetConfigWorkflow.php
@@ -163,8 +163,8 @@
if (!$verbose) {
$console->writeOut(
- "%s\n",
- pht('(Run with --verbose for more details.)'));
+ "(%s)\n",
+ pht('Run with %s for more details.', '--verbose'));
}
return 0;
diff --git a/src/workflow/ArcanistHelpWorkflow.php b/src/workflow/ArcanistHelpWorkflow.php
--- a/src/workflow/ArcanistHelpWorkflow.php
+++ b/src/workflow/ArcanistHelpWorkflow.php
@@ -46,7 +46,10 @@
$target = head($this->getArgument('command'));
if (empty($workflows[$target])) {
throw new ArcanistUsageException(
- "Unrecognized command '{$target}'. Try 'arc help'.");
+ pht(
+ "Unrecognized command '%s'. Try '%s'.",
+ $target,
+ 'arc help'));
}
}
@@ -109,19 +112,19 @@
}
if (isset($config_arguments[$argument])) {
- $optref[] = ' (This is a custom option for this '.
- 'project.)';
+ $optref[] = ' '.
+ pht('(This is a custom option for this project.)');
}
if (isset($spec['supports'])) {
- $optref[] = ' Supports: '.
- implode(', ', $spec['supports']);
+ $optref[] = ' '.
+ pht('Supports: %s', implode(', ', $spec['supports']));
}
if (isset($spec['help'])) {
$docs = $spec['help'];
} else {
- $docs = 'This option is not documented.';
+ $docs = pht('This option is not documented.');
}
$docs = phutil_console_wrap($docs, 14);
$optref[] = "{$docs}\n";
@@ -163,7 +166,9 @@
);
if (!$this->getArgument('full')) {
- echo "Run 'arc help --full' to get commands and options descriptions.\n";
+ echo pht(
+ "Run '%s' to get commands and options descriptions.\n",
+ 'arc help --full');
return;
}
diff --git a/src/workflow/ArcanistInstallCertificateWorkflow.php b/src/workflow/ArcanistInstallCertificateWorkflow.php
--- a/src/workflow/ArcanistInstallCertificateWorkflow.php
+++ b/src/workflow/ArcanistInstallCertificateWorkflow.php
@@ -89,17 +89,17 @@
// Ignore.
}
- echo phutil_console_format("**LOGIN TO PHABRICATOR**\n");
- echo "Open this page in your browser and login to Phabricator if ".
- "necessary:\n";
- echo "\n";
- echo " {$token_uri}\n";
- echo "\n";
- echo 'Then paste the API Token on that page below.';
-
+ echo phutil_console_format("**%s**\n", pht('LOGIN TO PHABRICATOR'));
+ echo phutil_console_format(
+ "%s\n\n%s\n\n%s",
+ pht(
+ 'Open this page in your browser and login to '.
+ 'Phabricator if necessary:'),
+ $token_uri,
+ pht('Then paste the API Token on that page below.'));
do {
- $token = phutil_console_prompt('Paste API Token from that page:');
+ $token = phutil_console_prompt(pht('Paste API Token from that page:'));
$token = trim($token);
if (strlen($token)) {
break;
@@ -142,7 +142,7 @@
);
} else {
echo "\n";
- echo "Downloading authentication certificate...\n";
+ echo pht('Downloading authentication certificate...')."\n";
$info = $conduit->callMethodSynchronous(
'conduit.getcertificate',
array(
@@ -151,22 +151,26 @@
));
$user = $info['username'];
- echo "Installing certificate for '{$user}'...\n";
+ echo pht("Installing certificate for '%s'...", $user)."\n";
$config['hosts'][$uri] = array(
'user' => $user,
'cert' => $info['certificate'],
);
}
- echo "Writing ~/.arcrc...\n";
+ echo pht('Writing %s...', '~/.arcrc')."\n";
$configuration_manager->writeUserConfigurationFile($config);
if ($is_token_auth) {
echo phutil_console_format(
- "<bg:green>** SUCCESS! **</bg> API Token installed.\n");
+ "<bg:green>** %s **</bg> %s\n",
+ pht('SUCCESS!'),
+ pht('API Token installed.'));
} else {
echo phutil_console_format(
- "<bg:green>** SUCCESS! **</bg> Certificate installed.\n");
+ "<bg:green>** %s **</bg> %s\n",
+ pht('SUCCESS!'),
+ pht('Certificate installed.'));
}
return 0;
@@ -175,15 +179,17 @@
private function determineConduitURI() {
$uri = $this->getArgument('uri');
if (count($uri) > 1) {
- throw new ArcanistUsageException('Specify at most one URI.');
+ throw new ArcanistUsageException(pht('Specify at most one URI.'));
} else if (count($uri) == 1) {
$uri = reset($uri);
} else {
$conduit_uri = $this->getConduitURI();
if (!$conduit_uri) {
throw new ArcanistUsageException(
- 'Specify an explicit URI or run this command from within a project '.
- 'which is configured with a .arcconfig.');
+ pht(
+ 'Specify an explicit URI or run this command from within a '.
+ 'project which is configured with a %s.',
+ '.arcconfig'));
}
$uri = $conduit_uri;
}
diff --git a/src/workflow/ArcanistLandWorkflow.php b/src/workflow/ArcanistLandWorkflow.php
--- a/src/workflow/ArcanistLandWorkflow.php
+++ b/src/workflow/ArcanistLandWorkflow.php
@@ -83,8 +83,10 @@
'help' => pht(
"Land feature branch onto a branch other than the default ".
"('master' in git, 'default' in hg). You can change the default ".
- "by setting 'arc.land.onto.default' with `arc set-config` or ".
- "for the entire project in .arcconfig."),
+ "by setting '%s' with `%s` or for the entire project in %s.",
+ 'arc.land.onto.default',
+ 'arc set-config',
+ '.arcconfig'),
),
'hold' => array(
'help' => pht(
@@ -102,22 +104,31 @@
),
'merge' => array(
'help' => pht(
- 'Perform a --no-ff merge, not a --squash merge. If the project '.
+ 'Perform a %s merge, not a %s merge. If the project '.
'is marked as having an immutable history, this is the default '.
- 'behavior.'),
+ 'behavior.',
+ '--no-ff',
+ '--squash'),
'supports' => array(
'git',
),
'nosupport' => array(
- 'hg' => pht('Use the --squash strategy when landing in mercurial.'),
+ 'hg' => pht(
+ 'Use the %s strategy when landing in mercurial.',
+ '--squash'),
),
),
'squash' => array(
'help' => pht(
- 'Perform a --squash merge, not a --no-ff merge. If the project is '.
- 'marked as having a mutable history, this is the default behavior.'),
+ 'Perform a %s merge, not a %s merge. If the project is '.
+ 'marked as having a mutable history, this is the default behavior.',
+ '--squash',
+ '--no-ff'),
'conflicts' => array(
- 'merge' => '--merge and --squash are conflicting merge strategies.',
+ 'merge' => pht(
+ '%s and %s are conflicting merge strategies.',
+ '--merge',
+ '--squash'),
),
),
'delete-remote' => array(
@@ -131,12 +142,16 @@
'help' => pht(
"When updating the feature branch, use rebase instead of merge. ".
"This might make things work better in some cases. Set ".
- "arc.land.update.default to 'rebase' to make this the default."),
+ "%s to '%s' to make this the default.",
+ 'arc.land.update.default',
+ 'rebase'),
'conflicts' => array(
'merge' => pht(
- 'The --merge strategy does not update the feature branch.'),
+ 'The %s strategy does not update the feature branch.',
+ '--merge'),
'update-with-merge' => pht(
- 'Cannot be used with --update-with-merge.'),
+ 'Cannot be used with %s.',
+ '--update-with-merge'),
),
'supports' => array(
'git',
@@ -145,13 +160,17 @@
'update-with-merge' => array(
'help' => pht(
"When updating the feature branch, use merge instead of rebase. ".
- "This is the default behavior. Setting arc.land.update.default to ".
- "'merge' can also be used to make this the default."),
+ "This is the default behavior. Setting %s to '%s' can also be ".
+ "used to make this the default.",
+ 'arc.land.update.default',
+ 'merge'),
'conflicts' => array(
'merge' => pht(
- 'The --merge strategy does not update the feature branch.'),
+ 'The %s strategy does not update the feature branch.',
+ '--merge'),
'update-with-rebase' => pht(
- 'Cannot be used with --update-with-rebase.'),
+ 'Cannot be used with %s.',
+ '--update-with-rebase'),
),
'supports' => array(
'git',
@@ -329,7 +348,7 @@
$this->branch,
$this->onto);
if (!$this->isHistoryImmutable()) {
- $message .= ' '.pht("You may be able to 'arc amend' instead.");
+ $message .= ' '.pht("You may be able to '%s' instead.", 'arc amend');
}
throw new ArcanistUsageException($message);
}
@@ -339,23 +358,26 @@
if (!$repository_api->supportsRebase()) {
throw new ArcanistUsageException(
pht(
- 'You must enable the rebase extension to use the --squash '.
- 'strategy.'));
+ 'You must enable the rebase extension to use the %s strategy.',
+ '--squash'));
}
}
if ($this->branchType != $this->ontoType) {
throw new ArcanistUsageException(pht(
'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, '.
- 'or set arc.land.onto.default in .arcconfig.',
+ '%s, the destination must also be a %s. Use %s to specify a %s, '.
+ 'or set %s in %s.',
$this->branch,
$this->branchType,
$this->onto,
$this->ontoType,
$this->branchType,
$this->branchType,
- $this->branchType));
+ '--onto',
+ $this->branchType,
+ 'arc.land.onto.default',
+ '.arcconfig'));
}
}
@@ -376,16 +398,15 @@
private function checkoutBranch() {
$repository_api = $this->getRepositoryAPI();
if ($this->getBranchOrBookmark() != $this->branch) {
- $repository_api->execxLocal(
- 'checkout %s',
- $this->branch);
+ $repository_api->execxLocal('checkout %s', $this->branch);
}
echo phutil_console_format(
- pht('Switched to %s **%s**. Identifying and merging...',
- $this->branchType,
- $this->branch).
- "\n");
+ "%s\n",
+ pht(
+ 'Switched to %s **%s**. Identifying and merging...',
+ $this->branchType,
+ $this->branch));
}
private function printPendingCommits() {
@@ -417,7 +438,7 @@
if (!trim($out)) {
$this->restoreBranch();
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";
@@ -451,11 +472,13 @@
throw new ArcanistUsageException(pht(
"arc can not identify which revision exists on %s '%s'. Update the ".
"revision with recent changes to synchronize the %s name and hashes, ".
- "or use 'arc amend' to amend the commit message at HEAD, or use ".
- "'--revision <id>' to select a revision explicitly.",
+ "or use '%s' to amend the commit message at HEAD, or use ".
+ "'%s' to select a revision explicitly.",
$this->branchType,
$this->branch,
- $this->branchType));
+ $this->branchType,
+ 'arc amend',
+ '--revision <id>'));
} else if (count($revisions) > 1) {
$message = pht(
"There are multiple revisions on feature %s '%s' which are not ".
@@ -531,9 +554,10 @@
}
$open_revs = implode("\n", $open_revs);
- echo pht("Revision '%s' depends on open revisions:\n\n%s",
- "D{$rev_id}: {$rev_title}",
- $open_revs);
+ echo pht(
+ "Revision '%s' depends on open revisions:\n\n%s",
+ "D{$rev_id}: {$rev_title}",
+ $open_revs);
$ok = phutil_console_confirm(pht('Continue anyway?'));
if (!$ok) {
@@ -552,8 +576,9 @@
$this->messageFile = new TempFile();
Filesystem::writeFile($this->messageFile, $message);
- echo pht("Landing revision '%s'...",
- "D{$rev_id}: {$rev_title}"), "\n";
+ echo pht(
+ "Landing revision '%s'...",
+ "D{$rev_id}: {$rev_title}")."\n";
$diff_phid = idx($this->revision, 'activeDiffPHID');
if ($diff_phid) {
@@ -590,9 +615,7 @@
}
} else if ($this->isHg) {
- echo phutil_console_format(pht(
- 'Updating **%s**...',
- $this->onto)."\n");
+ echo phutil_console_format(pht('Updating **%s**...', $this->onto)."\n");
try {
list($out, $err) = $repository_api->execxLocal('pull');
@@ -602,10 +625,11 @@
throw new ArcanistUsageException(phutil_console_format(pht(
"Local bookmark **%s** has diverged from the server's **%s** ".
"(now labeled **%s**). Please resolve this divergence and run ".
- "'arc land' again.",
+ "'%s' again.",
$this->onto,
$this->onto,
- $divergedbookmark)));
+ $divergedbookmark,
+ 'arc land')));
}
} catch (CommandException $ex) {
$err = $ex->getError();
@@ -659,13 +683,14 @@
throw new ArcanistUsageException(pht(
"Local %s '%s' is ahead of remote %s '%s', so landing a feature ".
"%s would push additional changes. Push or reset the changes in '%s' ".
- "before running 'arc land'.",
+ "before running '%s'.",
$this->ontoType,
$this->onto,
$this->ontoType,
$this->ontoRemoteBranch,
$this->ontoType,
- $this->onto));
+ $this->onto,
+ 'arc land'));
}
}
@@ -682,11 +707,13 @@
$err = phutil_passthru('git rebase %s', $this->onto);
if ($err) {
throw new ArcanistUsageException(pht(
- "'git rebase %s' failed. You can abort with 'git rebase ".
- "--abort', or resolve conflicts and use 'git rebase --continue' ".
- "to continue forward. After resolving the rebase, run 'arc land' ".
- "again.",
- $this->onto));
+ "'%s' failed. You can abort with '%s', or resolve conflicts ".
+ "and use '%s' to continue forward. After resolving the rebase, ".
+ "run '%s' again.",
+ sprintf('git rebase %s', $this->onto),
+ 'git rebase --abort',
+ 'git rebase --continue',
+ 'arc land'));
}
} else {
echo phutil_console_format(pht(
@@ -696,21 +723,20 @@
$err = phutil_passthru(
'git merge --no-stat %s -m %s',
$this->onto,
- pht("Automatic merge by 'arc land'"));
+ pht("Automatic merge by '%s'", 'arc land'));
if ($err) {
throw new ArcanistUsageException(pht(
- "'git merge %s' failed. ".
- "To continue: resolve the conflicts, commit the changes, then run ".
- "'arc land' again. To abort: run 'git merge --abort'.",
- $this->onto));
+ "'%s' failed. To continue: resolve the conflicts, commit ".
+ "the changes, then run '%s' again. To abort: run '%s'.",
+ sprintf('git merge %s', $this->onto),
+ 'arc land',
+ 'git merge --abort'));
}
}
} else if ($this->isHg) {
$onto_tip = $repository_api->getCanonicalRevisionName($this->onto);
$common_ancestor = $repository_api->getCanonicalRevisionName(
- hgsprintf('ancestor(%s, %s)',
- $this->onto,
- $this->branch));
+ hgsprintf('ancestor(%s, %s)', $this->onto, $this->branch));
// Only rebase if the local branch is not at the tip of the onto branch.
if ($onto_tip != $common_ancestor) {
@@ -719,17 +745,17 @@
'rebase -d %s --keepbranches',
$this->onto);
if ($err) {
- echo phutil_console_format("Aborting rebase\n");
- $repository_api->execManualLocal(
- 'rebase --abort');
+ echo phutil_console_format("%s\n", pht('Aborting rebase'));
+ $repository_api->execManualLocal('rebase --abort');
$this->restoreBranch();
throw new ArcanistUsageException(pht(
- "'hg rebase %s' failed and the rebase was aborted. ".
- "This is most likely due to conflicts. Manually rebase %s onto ".
- "%s, resolve the conflicts, then run 'arc land' again.",
- $this->onto,
+ "'%s' failed and the rebase was aborted. This is most ".
+ "likely due to conflicts. Manually rebase %s onto %s, resolve ".
+ "the conflicts, then run '%s' again.",
+ sprintf('hg rebase %s', $this->onto),
$this->branch,
- $this->onto));
+ $this->onto,
+ 'arc land'));
}
}
}
@@ -789,12 +815,14 @@
$this->onto);
if ($err) {
- $repository_api->execManualLocal(
- 'rebase --abort');
+ $repository_api->execManualLocal('rebase --abort');
$this->restoreBranch();
throw new ArcanistUsageException(
- "Squashing the commits under {$this->branch} failed. ".
- "Manually squash your commits and run 'arc land' again.");
+ pht(
+ "Squashing the commits under %s failed. ".
+ "Manually squash your commits and run '%s' again.",
+ $this->branch,
+ 'arc land'));
}
if ($repository_api->isBookmark($this->branch)) {
@@ -903,10 +931,11 @@
$branch_string = implode("\n", $alt_branches);
echo
"\n",
- pht("Remove the %s starting at these revisions and ".
- "run arc land again:\n%s",
- $this->branchType.'s',
- $branch_string),
+ pht(
+ "Remove the %s starting at these revisions and run %s again:\n%s",
+ $this->branchType.'s',
+ $branch_string,
+ 'arc land'),
"\n\n";
throw new ArcanistUserAbortException();
} else {
@@ -931,9 +960,11 @@
if ($err) {
throw new ArcanistUsageException(pht(
- "'git merge' failed. Your working copy has been left in a partially ".
- "merged state. You can: abort with 'git merge --abort'; or follow ".
- "the instructions to complete the merge."));
+ "'%s' failed. Your working copy has been left in a partially ".
+ "merged state. You can: abort with '%s'; or follow the ".
+ "instructions to complete the merge.",
+ 'git merge',
+ 'git merge --abort'));
}
} else if ($this->isHg) {
// HG arc land currently doesn't support --merge.
@@ -943,20 +974,18 @@
// until there is a demand for it.
// The user should never reach this line, since --merge is
// forbidden at the command line argument level.
- throw new ArcanistUsageException(pht(
- '--merge is not currently supported for hg repos.'));
+ throw new ArcanistUsageException(
+ pht('%s is not currently supported for hg repos.', '--merge'));
}
}
private function push() {
$repository_api = $this->getRepositoryAPI();
- // these commands can fail legitimately (e.g. commit hooks)
+ // These commands can fail legitimately (e.g. commit hooks)
try {
if ($this->isGit) {
- $repository_api->execxLocal(
- 'commit -F %s',
- $this->messageFile);
+ $repository_api->execxLocal('commit -F %s', $this->messageFile);
if (phutil_is_windows()) {
// Occasionally on large repositories on Windows, Git can exit with
// an unclean working copy here. This prevents reverts from being
@@ -995,18 +1024,13 @@
$err = phutil_passthru('git svn dcommit');
$cmd = 'git svn dcommit';
} else if ($this->isGit) {
- $err = phutil_passthru(
- 'git push %s %s',
- $this->remote,
- $this->onto);
+ $err = phutil_passthru('git push %s %s', $this->remote, $this->onto);
$cmd = 'git push';
} else if ($this->isHgSvn) {
// hg-svn doesn't support 'push -r', so we do a normal push
// which hg-svn modifies to only push the current branch and
// ancestors.
- $err = $repository_api->execPassthru(
- 'push %s',
- $this->remote);
+ $err = $repository_api->execPassthru('push %s', $this->remote);
$cmd = 'hg push';
} else if ($this->isHg) {
$err = $repository_api->execPassthru(
@@ -1017,13 +1041,15 @@
}
if ($err) {
- $failed_str = pht('PUSH FAILED!');
- echo phutil_console_format("<bg:red>** %s **</bg>\n", $failed_str);
+ echo phutil_console_format(
+ "<bg:red>** %s **</bg>\n",
+ pht('PUSH FAILED!'));
$this->executeCleanupAfterFailedPush();
if ($this->isGit) {
throw new ArcanistUsageException(pht(
- "'%s' failed! Fix the error and run 'arc land' again.",
- $cmd));
+ "'%s' failed! Fix the error and run '%s' again.",
+ $cmd,
+ 'arc land'));
}
throw new ArcanistUsageException(pht(
"'%s' failed! Fix the error and push this change manually.",
@@ -1072,14 +1098,10 @@
$this->branch,
$ref);
echo pht('(Use `%s` if you want it back.)', $recovery_command), "\n";
- $repository_api->execxLocal(
- 'branch -D %s',
- $this->branch);
+ $repository_api->execxLocal('branch -D %s', $this->branch);
} else if ($this->isHg) {
$common_ancestor = $repository_api->getCanonicalRevisionName(
- hgsprintf('ancestor(%s,%s)',
- $this->onto,
- $this->branch));
+ hgsprintf('ancestor(%s,%s)', $this->onto, $this->branch));
$branch_root = $repository_api->getCanonicalRevisionName(
hgsprintf('first((%s::%s)-%s)',
@@ -1092,9 +1114,7 @@
$branch_root);
if ($repository_api->isBookmark($this->branch)) {
- $repository_api->execxLocal(
- 'bookmark -d %s',
- $this->branch);
+ $repository_api->execxLocal('bookmark -d %s', $this->branch);
}
}
@@ -1106,8 +1126,10 @@
$this->branch);
if ($err) {
- echo pht('No remote feature %s to clean up.',
- $this->branchType), "\n";
+ echo pht(
+ 'No remote feature %s to clean up.',
+ $this->branchType);
+ echo "\n";
} else {
// NOTE: In Git, you delete a remote branch by pushing it with a
@@ -1166,16 +1188,14 @@
*/
private function restoreBranch() {
$repository_api = $this->getRepositoryAPI();
- $repository_api->execxLocal(
- 'checkout %s',
- $this->oldBranch);
+ $repository_api->execxLocal('checkout %s', $this->oldBranch);
if ($this->isGit) {
- $repository_api->execxLocal(
- 'submodule update --init --recursive');
+ $repository_api->execxLocal('submodule update --init --recursive');
}
- echo phutil_console_format(
- "Switched back to {$this->branchType} **%s**.\n",
- $this->oldBranch);
+ echo pht(
+ "Switched back to %s %s.\n",
+ $this->branchType,
+ phutil_console_format('**%s**', $this->oldBranch));
}
@@ -1212,8 +1232,7 @@
$console->writeOut(
"**<bg:green> %s </bg>** %s\n",
pht('BUILDS PASSED'),
- pht(
- 'Harbormaster builds for the active diff completed successfully.'));
+ pht('Harbormaster builds for the active diff completed successfully.'));
return;
}
diff --git a/src/workflow/ArcanistLiberateWorkflow.php b/src/workflow/ArcanistLiberateWorkflow.php
--- a/src/workflow/ArcanistLiberateWorkflow.php
+++ b/src/workflow/ArcanistLiberateWorkflow.php
@@ -34,35 +34,35 @@
public function getArguments() {
return array(
'all' => array(
- 'help' =>
+ 'help' => pht(
'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(
- 'help' =>
+ 'help' => pht(
'Force the library map to be updated, even in the presence of '.
- 'lint errors.',
+ 'lint errors.'),
),
'library-name' => array(
'param' => 'name',
'help' =>
- 'Use a flag for library name rather than awaiting user input.',
+ pht('Use a flag for library name rather than awaiting user input.'),
),
'remap' => array(
'hide' => true,
- 'help' =>
+ 'help' => pht(
'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(
'hide' => true,
- 'help' =>
+ 'help' => pht(
'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(
'hide' => true,
- 'help' => 'Experimental. Upgrade library to v2.',
+ 'help' => pht('Experimental. Upgrade library to v2.'),
),
'*' => 'argv',
);
@@ -72,8 +72,10 @@
$argv = $this->getArgument('argv');
if (count($argv) > 1) {
throw new ArcanistUsageException(
- "Provide only one path to 'arc liberate'. The path should be a ".
- "directory where you want to create or update a libphutil library.");
+ pht(
+ "Provide only one path to '%s'. The path should be a directory ".
+ "where you want to create or update a libphutil library.",
+ 'arc liberate'));
} else if (count($argv) == 0) {
$path = getcwd();
} else {
@@ -96,8 +98,9 @@
if ($init) {
if (count($init) > 1) {
throw new ArcanistUsageException(
- 'Specified directory contains more than one libphutil library. Use '.
- 'a more specific path.');
+ pht(
+ 'Specified directory contains more than one libphutil library. '.
+ 'Use a more specific path.'));
}
$path = Filesystem::resolvePath(dirname(reset($init)), $path);
} else {
@@ -110,7 +113,7 @@
}
}
if (!$found) {
- echo "No library currently exists at that path...\n";
+ echo pht("No library currently exists at that path...\n");
$this->liberateCreateDirectory($path);
$this->liberateCreateLibrary($path);
return;
@@ -124,17 +127,19 @@
return $this->upgradeLibrary($path);
}
throw new ArcanistUsageException(
- "This library is using libphutil v1, which is no longer supported. ".
- "Run 'arc liberate --upgrade' to upgrade to v2.");
+ pht(
+ "This library is using libphutil v1, which is no ".
+ "longer supported. Run '%s' to upgrade to v2.",
+ 'arc liberate --upgrade'));
case 2:
if ($this->getArgument('upgrade')) {
throw new ArcanistUsageException(
- "Can't upgrade a v2 library!");
+ pht("Can't upgrade a v2 library!"));
}
return $this->liberateVersion2($path);
default:
throw new ArcanistUsageException(
- "Unknown library version '{$version}'!");
+ pht("Unknown library version '%s'!", $version));
}
}
@@ -171,12 +176,12 @@
->withType('f')
->find();
- echo "Removing __init__.php files...\n";
+ echo pht('Removing %s files...', '__init__.php')."\n";
foreach ($inits as $init) {
Filesystem::remove($path.'/'.$init);
}
- echo "Upgrading library to v2...\n";
+ echo pht('Upgrading library to v2...')."\n";
$this->liberateVersion2($path);
}
@@ -184,14 +189,15 @@
if (Filesystem::pathExists($path)) {
if (!is_dir($path)) {
throw new ArcanistUsageException(
- 'Provide a directory to create or update a libphutil library in.');
+ pht(
+ 'Provide a directory to create or update a libphutil library in.'));
}
return;
}
- echo "The directory '{$path}' does not exist.";
- if (!phutil_console_confirm('Do you want to create it?')) {
- throw new ArcanistUsageException('Cancelled.');
+ echo pht("The directory '%s' does not exist.", $path);
+ if (!phutil_console_confirm(pht('Do you want to create it?'))) {
+ throw new ArcanistUsageException(pht('Canceled.'));
}
execx('mkdir -p %s', $path);
@@ -203,21 +209,22 @@
return;
}
- echo "Creating new libphutil library in '{$path}'.\n";
+ echo pht("Creating new libphutil library in '%s'.", $path)."\n";
do {
$name = $this->getArgument('library-name');
if ($name === null) {
- echo "Choose a name for the new library.\n";
- $name = phutil_console_prompt('What do you want to name this library?');
+ echo pht('Choose a name for the new library.')."\n";
+ $name = phutil_console_prompt(
+ pht('What do you want to name this library?'));
} else {
- echo "Using library name {$name}.\n";
+ echo pht('Using library name %s.', $name)."\n";
}
if (preg_match('/^[a-z-]+$/', $name)) {
break;
} else {
- echo "Library name should contain only lowercase letters and ".
- "hyphens.\n";
+ echo pht(
+ 'Library name should contain only lowercase letters and hyphens.')."\n";
}
} while (true);
@@ -225,7 +232,10 @@
"<?php\n\n".
"phutil_register_library('{$name}', __FILE__);\n";
- echo "Writing '__phutil_library_init__.php' to '{$path}'...\n";
+ echo pht(
+ "Writing '%s' to '%s'...\n",
+ '__phutil_library_init__.php',
+ $path);
Filesystem::writeFile($init_path, $template);
$this->liberateVersion2($path);
}
diff --git a/src/workflow/ArcanistLintWorkflow.php b/src/workflow/ArcanistLintWorkflow.php
--- a/src/workflow/ArcanistLintWorkflow.php
+++ b/src/workflow/ArcanistLintWorkflow.php
@@ -60,99 +60,104 @@
public function getArguments() {
return array(
'lintall' => array(
- 'help' =>
- 'Show all lint warnings, not just those on changed lines. When '.
- 'paths are specified, this is the default behavior.',
+ 'help' => pht(
+ 'Show all lint warnings, not just those on changed lines. When '.
+ 'paths are specified, this is the default behavior.'),
'conflicts' => array(
'only-changed' => true,
),
),
'only-changed' => array(
- 'help' =>
- 'Show lint warnings just on changed lines. When no paths are '.
- 'specified, this is the default. This differs from only-new '.
- 'in cases where line modifications introduce lint on other '.
- 'unmodified lines.',
+ 'help' => pht(
+ 'Show lint warnings just on changed lines. When no paths are '.
+ 'specified, this is the default. This differs from only-new '.
+ 'in cases where line modifications introduce lint on other '.
+ 'unmodified lines.'),
'conflicts' => array(
'lintall' => true,
),
),
'rev' => array(
'param' => 'revision',
- 'help' => 'Lint changes since a specific revision.',
+ 'help' => pht('Lint changes since a specific revision.'),
'supports' => array(
'git',
'hg',
),
'nosupport' => array(
- 'svn' => 'Lint does not currently support --rev in SVN.',
+ 'svn' => pht('Lint does not currently support %s in SVN.', '--rev'),
),
),
'output' => array(
'param' => 'format',
- 'help' =>
+ 'help' => pht(
"With 'summary', show lint warnings in a more compact format. ".
"With 'json', show lint warnings in machine-readable JSON format. ".
"With 'none', show no lint warnings. ".
"With 'compiler', show lint warnings in suitable for your editor. ".
- "With 'xml', show lint warnings in the Checkstyle XML format.",
+ "With 'xml', show lint warnings in the Checkstyle XML format."),
),
'only-new' => array(
'param' => 'bool',
'supports' => array('git', 'hg'), // TODO: svn
- 'help' => 'Display only messages not present in the original code.',
+ 'help' => pht(
+ 'Display only messages not present in the original code.'),
),
'engine' => array(
'param' => 'classname',
- 'help' =>
- 'Override configured lint engine for this project.',
+ 'help' => pht('Override configured lint engine for this project.'),
),
'apply-patches' => array(
- 'help' =>
+ 'help' => pht(
'Apply patches suggested by lint to the working copy without '.
- 'prompting.',
+ 'prompting.'),
'conflicts' => array(
'never-apply-patches' => true,
),
),
'never-apply-patches' => array(
- 'help' => 'Never apply patches suggested by lint.',
+ 'help' => pht('Never apply patches suggested by lint.'),
'conflicts' => array(
'apply-patches' => true,
),
),
'amend-all' => array(
- 'help' =>
- 'When linting git repositories, amend HEAD with all patches '.
- 'suggested by lint without prompting.',
+ 'help' => pht(
+ 'When linting git repositories, amend HEAD with all patches '.
+ 'suggested by lint without prompting.'),
),
'amend-autofixes' => array(
- 'help' =>
+ 'help' => pht(
'When linting git repositories, amend HEAD with autofix '.
- 'patches suggested by lint without prompting.',
+ 'patches suggested by lint without prompting.'),
),
'everything' => array(
- 'help' => 'Lint all files in the project.',
+ 'help' => pht('Lint all files in the project.'),
'conflicts' => array(
- 'cache' => '--everything lints all files',
- 'rev' => '--everything lints all files',
+ 'cache' => pht('%s lints all files', '--everything'),
+ 'rev' => pht('%s lints all files', '--everything'),
),
),
'severity' => array(
'param' => 'string',
- 'help' =>
- "Set minimum message severity. One of: '".
- implode(
- "', '",
- array_keys(ArcanistLintSeverity::getLintSeverities())).
- "'. Defaults to '".self::DEFAULT_SEVERITY."'.",
+ 'help' => pht(
+ "Set minimum message severity. One of: %s. Defaults to '%s'.",
+ sprintf(
+ "'%s'",
+ implode(
+ "', '",
+ array_keys(ArcanistLintSeverity::getLintSeverities()))),
+ self::DEFAULT_SEVERITY),
),
'cache' => array(
'param' => 'bool',
- 'help' =>
- "0 to disable cache, 1 to enable. The default value is ".
- "determined by 'arc.lint.cache' in configuration, which defaults ".
- "to off. See notes in 'arc.lint.cache'.",
+ 'help' => pht(
+ "%d to disable cache, %d to enable. The default value is determined ".
+ "by '%s' in configuration, which defaults to off. See notes in '%s'.",
+ 0,
+ 1,
+ 'arc.lint.cache',
+ 'arc.lint.cache'),
),
'*' => 'paths',
);
@@ -191,8 +196,10 @@
$everything = $this->getArgument('everything');
if ($everything && $paths) {
throw new ArcanistUsageException(
- 'You can not specify paths with --everything. The --everything '.
- 'flag lints every file.');
+ pht(
+ 'You can not specify paths with %s. The %s flag lints every file.',
+ '--everything',
+ '--everything'));
}
if ($use_cache === null) {
$use_cache = (bool)$configuration_manager->getConfigFromAnySource(
@@ -201,7 +208,8 @@
}
if ($rev && $paths) {
- throw new ArcanistUsageException('Specify either --rev or paths.');
+ throw new ArcanistUsageException(
+ pht('Specify either %s or paths.', '--rev'));
}
@@ -252,7 +260,10 @@
if ($cached) {
$console->writeErr(
- pht("Using lint cache, use '--cache 0' to disable it.")."\n");
+ "%s\n",
+ pht(
+ "Using lint cache, use '%s' to disable it.",
+ '--cache 0'));
}
$engine->setCachedResults($cached);
@@ -491,9 +502,9 @@
$console->writeOut('%s', $stdout);
$console->writeErr('%s', $stderr);
- $prompt = phutil_console_format(
- 'Apply this patch to __%s__?',
- $result->getPath());
+ $prompt = pht(
+ 'Apply this patch to %s?',
+ phutil_console_format('__%s__', $result->getPath()));
if (!$console->confirm($prompt, $default_no = false)) {
continue;
}
@@ -511,11 +522,12 @@
if ($this->shouldAmendWithoutPrompt ||
($this->shouldAmendAutofixesWithoutPrompt && $all_autofix)) {
$console->writeOut(
- "<bg:yellow>** LINT NOTICE **</bg> Automatically amending HEAD ".
- "with lint patches.\n");
+ "<bg:yellow>** %s **</bg> %s\n",
+ pht('LINT NOTICE'),
+ pht('Automatically amending HEAD with lint patches.'));
$amend = true;
} else {
- $amend = $console->confirm('Amend HEAD with lint patches?');
+ $amend = $console->confirm(pht('Amend HEAD with lint patches?'));
}
if ($amend) {
@@ -527,8 +539,9 @@
$repository_api->amendCommit();
} else {
throw new ArcanistUsageException(
- 'Sort out the lint changes that were applied to the working '.
- 'copy and relint.');
+ pht(
+ 'Sort out the lint changes that were applied to the working '.
+ 'copy and relint.'));
}
}
diff --git a/src/workflow/ArcanistLintersWorkflow.php b/src/workflow/ArcanistLintersWorkflow.php
--- a/src/workflow/ArcanistLintersWorkflow.php
+++ b/src/workflow/ArcanistLintersWorkflow.php
@@ -178,7 +178,7 @@
if (!$this->getArgument('verbose')) {
$console->writeOut(
"%s\n",
- pht('(Run `arc linters --verbose` for more details.)'));
+ pht('(Run `%s` for more details.)', 'arc linters --verbose'));
}
}
@@ -191,8 +191,8 @@
private function getStatusMap() {
$text_map = array(
'configured' => pht('CONFIGURED'),
- 'available' => pht('AVAILABLE'),
- 'error' => pht('ERROR'),
+ 'available' => pht('AVAILABLE'),
+ 'error' => pht('ERROR'),
);
$sizes = array();
diff --git a/src/workflow/ArcanistListWorkflow.php b/src/workflow/ArcanistListWorkflow.php
--- a/src/workflow/ArcanistListWorkflow.php
+++ b/src/workflow/ArcanistListWorkflow.php
@@ -55,7 +55,7 @@
));
if (!$revisions) {
- echo "You have no open Differential revisions.\n";
+ echo pht('You have no open Differential revisions.')."\n";
return 0;
}
@@ -93,9 +93,12 @@
$table->addRow(array(
'exists' => $spec['exists'] ? phutil_console_format('**%s**', '*') : '',
'status' => phutil_console_format(
- "<fg:{$spec['color']}>%s</fg>", $spec['statusName']),
+ "<fg:{$spec['color']}>%s</fg>",
+ $spec['statusName']),
'title' => phutil_console_format(
- '**D%d:** %s', $revision['id'], $revision['title']),
+ '**D%d:** %s',
+ $revision['id'],
+ $revision['title']),
));
}
diff --git a/src/workflow/ArcanistPasteWorkflow.php b/src/workflow/ArcanistPasteWorkflow.php
--- a/src/workflow/ArcanistPasteWorkflow.php
+++ b/src/workflow/ArcanistPasteWorkflow.php
@@ -123,7 +123,7 @@
$conduit = $this->getConduit();
if (!function_exists('posix_isatty') || posix_isatty(STDIN)) {
- $this->writeStatusMessage("Reading paste from stdin...\n");
+ $this->writeStatusMessage(pht('Reading paste from stdin...')."\n");
}
$info = $conduit->callMethodSynchronous(
diff --git a/src/workflow/ArcanistPatchWorkflow.php b/src/workflow/ArcanistPatchWorkflow.php
--- a/src/workflow/ArcanistPatchWorkflow.php
+++ b/src/workflow/ArcanistPatchWorkflow.php
@@ -42,37 +42,42 @@
'revision' => array(
'param' => 'revision_id',
'paramtype' => 'complete',
- 'help' =>
+ 'help' => pht(
"Apply changes from a Differential revision, using the most recent ".
- "diff that has been attached to it. You can run 'arc patch D12345' ".
- "as a shorthand.",
+ "diff that has been attached to it. You can run '%s' as a shorthand.",
+ 'arc patch D12345'),
),
'diff' => array(
'param' => 'diff_id',
- 'help' =>
+ 'help' => pht(
'Apply changes from a Differential diff. Normally you want to use '.
- '--revision to get the most recent changes, but you can '.
- 'specifically apply an out-of-date diff or a diff which was never '.
- 'attached to a revision by using this flag.',
+ '%s to get the most recent changes, but you can specifically apply '.
+ 'an out-of-date diff or a diff which was never attached to a '.
+ 'revision by using this flag.',
+ '--revision'),
),
'arcbundle' => array(
'param' => 'bundlefile',
'paramtype' => 'file',
- 'help' =>
- "Apply changes from an arc bundle generated with 'arc export'.",
+ 'help' => pht(
+ "Apply changes from an arc bundle generated with '%s'.",
+ 'arc export'),
),
'patch' => array(
'param' => 'patchfile',
'paramtype' => 'file',
- 'help' => 'Apply changes from a git patchfile or unified patchfile.',
+ 'help' => pht(
+ 'Apply changes from a git patchfile or unified patchfile.'),
),
'encoding' => array(
'param' => 'encoding',
- 'help' => 'Attempt to convert non UTF-8 patch into specified encoding.',
+ 'help' => pht(
+ 'Attempt to convert non UTF-8 patch into specified encoding.'),
),
'update' => array(
'supports' => array('git', 'svn', 'hg'),
- 'help' => 'Update the local working copy before applying the patch.',
+ 'help' => pht(
+ 'Update the local working copy before applying the patch.'),
'conflicts' => array(
'nobranch' => true,
'bookmark' => true,
@@ -80,30 +85,30 @@
),
'nocommit' => array(
'supports' => array('git', 'hg'),
- 'help' =>
+ 'help' => pht(
'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(
'supports' => array('git', 'hg'),
- 'help' =>
+ 'help' => pht(
'Normally, if a patch has dependencies that are not present in the '.
'working copy, arc tries to apply them as well. This flag prevents '.
- 'such work.',
+ 'such work.'),
),
'nobranch' => array(
'supports' => array('git', 'hg'),
- 'help' =>
+ 'help' => pht(
'Normally, a new branch (git) or bookmark (hg) is created and then '.
'the patch is applied and committed in the new branch/bookmark. '.
'This flag cherry-picks the resultant commit onto the original '.
- 'branch and deletes the temporary branch.',
+ 'branch and deletes the temporary branch.'),
'conflicts' => array(
'update' => true,
),
),
'force' => array(
- 'help' => 'Do not run any sanity checks.',
+ 'help' => pht('Do not run any sanity checks.'),
),
'*' => 'name',
);
@@ -133,7 +138,8 @@
if ($this->getArgument('name')) {
$namev = $this->getArgument('name');
if (count($namev) > 1) {
- throw new ArcanistUsageException('Specify at most one revision name.');
+ throw new ArcanistUsageException(
+ pht('Specify at most one revision name.'));
}
$source = self::SOURCE_REVISION;
$requested++;
@@ -143,15 +149,26 @@
if ($requested === 0) {
throw new ArcanistUsageException(
- "Specify one of 'D12345', '--revision <revision_id>' (to select the ".
- "current changes attached to a Differential revision), ".
- "'--diff <diff_id>' (to select a specific, out-of-date diff or a ".
- "diff which is not attached to a revision), '--arcbundle <file>' ".
- "or '--patch <file>' to choose a patch source.");
+ pht(
+ "Specify one of '%s', '%s' (to select the current changes attached ".
+ "to a Differential revision), '%s' (to select a specific, ".
+ "out-of-date diff or a diff which is not attached to a revision), ".
+ "'%s' or '%s' to choose a patch source.",
+ 'D12345',
+ '--revision <revision_id>',
+ '--diff <diff_id>',
+ '--arcbundle <file>',
+ '--patch <file>'));
} else if ($requested > 1) {
throw new ArcanistUsageException(
- "Options 'D12345', '--revision', '--diff', '--arcbundle' and ".
- "'--patch' are not compatible. Choose exactly one patch source.");
+ pht(
+ "Options '%s', '%s', '%s', '%s' and '%s' are not compatible. ".
+ "Choose exactly one patch source.",
+ 'D12345',
+ '--revision',
+ '--diff',
+ '--arcbundle',
+ '--patch'));
}
$this->source = $source;
@@ -218,7 +235,10 @@
// no error means git rev-parse found a branch
if (!$err) {
echo phutil_console_format(
- "Branch name {$proposed_name} already exists; trying a new name.\n");
+ "%s\n",
+ pht(
+ 'Branch name %s already exists; trying a new name.',
+ $proposed_name));
continue;
} else {
$branch_name = $proposed_name;
@@ -228,9 +248,9 @@
if (!$branch_name) {
throw new Exception(
- 'Arc was unable to automagically make a name for this patch. '.
- 'Please clean up your working copy and try again.'
- );
+ pht(
+ 'Arc was unable to automagically make a name for this patch. '.
+ 'Please clean up your working copy and try again.'));
}
return $branch_name;
@@ -256,8 +276,10 @@
// no error means hg log found a bookmark
if (!$err) {
echo phutil_console_format(
- "Bookmark name %s already exists; trying a new name.\n",
- $proposed_name);
+ "%s\n",
+ pht(
+ 'Bookmark name %s already exists; trying a new name.',
+ $proposed_name));
continue;
} else {
$bookmark_name = $proposed_name;
@@ -267,9 +289,9 @@
if (!$bookmark_name) {
throw new Exception(
- 'Arc was unable to automagically make a name for this patch. '.
- 'Please clean up your working copy and try again.'
- );
+ pht(
+ 'Arc was unable to automagically make a name for this patch. '.
+ 'Please clean up your working copy and try again.'));
}
return $bookmark_name;
@@ -289,14 +311,14 @@
$branch_name,
$base_revision);
} else {
- $repository_api->execxLocal(
- 'checkout -b %s',
- $branch_name);
+ $repository_api->execxLocal('checkout -b %s', $branch_name);
}
echo phutil_console_format(
- "Created and checked out branch %s.\n",
- $branch_name);
+ "%s\n",
+ pht(
+ 'Created and checked out branch %s.',
+ $branch_name));
} else if ($repository_api instanceof ArcanistMercurialAPI) {
$branch_name = $this->getBookmarkName($bundle);
$base_revision = $bundle->getBaseRevision();
@@ -305,17 +327,17 @@
$base_revision = $repository_api->getCanonicalRevisionName(
$base_revision);
- echo "Updating to the revision's base commit\n";
- $repository_api->execPassthru(
- 'update %s',
- $base_revision);
+ echo pht("Updating to the revision's base commit")."\n";
+ $repository_api->execPassthru('update %s', $base_revision);
}
$repository_api->execxLocal('bookmark %s', $branch_name);
echo phutil_console_format(
- "Created and checked out bookmark %s.\n",
- $branch_name);
+ "%s\n",
+ pht(
+ 'Created and checked out bookmark %s.',
+ $branch_name));
}
return $branch_name;
@@ -330,9 +352,9 @@
}
private function updateWorkingCopy() {
- echo "Updating working copy...\n";
+ echo pht('Updating working copy...')."\n";
$this->getRepositoryAPI()->updateWorkingCopy();
- echo "Done.\n";
+ echo pht('Done.')."\n";
}
public function run() {
@@ -345,7 +367,7 @@
$patch = @file_get_contents('php://stdin');
if (!strlen($patch)) {
throw new ArcanistUsageException(
- 'Failed to read patch from stdin!');
+ pht('Failed to read patch from stdin!'));
}
} else {
$patch = Filesystem::readFile($param);
@@ -469,8 +491,10 @@
$fpath = $repository_api->getPath($path);
if (!@file_exists($fpath)) {
$ok = phutil_console_confirm(
- "Patch deletes file '{$path}', but the file does not exist in ".
- "the working copy. Continue anyway?");
+ pht(
+ "Patch deletes file '%s', but the file does not exist in ".
+ "the working copy. Continue anyway?",
+ $path));
if (!$ok) {
throw new ArcanistUserAbortException();
}
@@ -486,13 +510,17 @@
if (!@file_exists($fpath)) {
$cpath = $change->getCurrentPath();
if ($type == ArcanistDiffChangeType::TYPE_COPY_HERE) {
- $verbs = 'copies';
+ $verbs = pht('copies');
} else {
- $verbs = 'moves';
+ $verbs = pht('moves');
}
$ok = phutil_console_confirm(
- "Patch {$verbs} '{$path}' to '{$cpath}', but source path ".
- "does not exist in the working copy. Continue anyway?");
+ pht(
+ "Patch %s '%s' to '%s', but source path does not exist ".
+ "in the working copy. Continue anyway?",
+ $verbs,
+ $path,
+ $cpath));
if (!$ok) {
throw new ArcanistUserAbortException();
}
@@ -634,18 +662,26 @@
if ($patch_err == 0) {
echo phutil_console_format(
- "<bg:green>** OKAY **</bg> Successfully applied patch ".
- "to the working copy.\n");
+ "<bg:green>** %s **</bg> %s\n",
+ pht('OKAY'),
+ pht('Successfully applied patch to the working copy.'));
} else {
echo phutil_console_format(
- "\n\n<bg:yellow>** WARNING **</bg> Some hunks could not be applied ".
- "cleanly by the unix 'patch' utility. Your working copy may be ".
- "different from the revision's base, or you may be in the wrong ".
- "subdirectory. You can export the raw patch file using ".
- "'arc export --unified', and then try to apply it by fiddling with ".
- "options to 'patch' (particularly, -p), or manually. The output ".
- "above, from 'patch', may be helpful in figuring out what went ".
- "wrong.\n");
+ "\n\n<bg:yellow>** %s **</bg> %s\n",
+ pht('WARNING'),
+ pht(
+ "Some hunks could not be applied cleanly by the unix '%s' ".
+ "utility. Your working copy may be different from the revision's ".
+ "base, or you may be in the wrong subdirectory. You can export ".
+ "the raw patch file using '%s', and then try to apply it by ".
+ "fiddling with options to '%s' (particularly, %s), or manually. ".
+ "The output above, from '%s', may be helpful in ".
+ "figuring out what went wrong.",
+ 'patch',
+ 'arc export --unified',
+ 'patch',
+ '-p',
+ 'patch'));
}
return $patch_err;
@@ -662,19 +698,19 @@
if ($err) {
echo phutil_console_format(
- "\n<bg:red>** Patch Failed! **</bg>\n");
+ "\n<bg:red>** %s **</bg>\n",
+ pht('Patch Failed!'));
// NOTE: Git patches may fail if they change the case of a filename
// (for instance, from 'example.c' to 'Example.c'). As of now, Git
// can not apply these patches on case-insensitive filesystems and
// there is no way to build a patch which works.
- throw new ArcanistUsageException('Unable to apply patch!');
+ throw new ArcanistUsageException(pht('Unable to apply patch!'));
}
// in case there were any submodule changes involved
- $repository_api->execpassthru(
- 'submodule update --init --recursive');
+ $repository_api->execpassthru('submodule update --init --recursive');
if ($this->shouldCommit()) {
if ($bundle->getFullAuthor()) {
@@ -689,9 +725,9 @@
$author_cmd);
$future->write($commit_message);
$future->resolvex();
- $verb = 'committed';
+ $verb = pht('committed');
} else {
- $verb = 'applied';
+ $verb = pht('applied');
}
if ($this->canBranch() &&
@@ -707,33 +743,39 @@
$repository_api->execxLocal('branch -D %s', $new_branch);
if ($ex) {
echo phutil_console_format(
- "\n<bg:red>** Cherry Pick Failed!**</bg>\n");
+ "\n<bg:red>** %s**</bg>\n",
+ pht('Cherry Pick Failed!'));
throw $ex;
}
}
echo phutil_console_format(
- "<bg:green>** OKAY **</bg> Successfully {$verb} patch.\n");
+ "<bg:green>** %s **</bg> %s\n",
+ pht('OKAY'),
+ pht('Successfully %s patch.', $verb));
} else if ($repository_api instanceof ArcanistMercurialAPI) {
-
- $future = $repository_api->execFutureLocal(
- 'import --no-commit -');
+ $future = $repository_api->execFutureLocal('import --no-commit -');
$future->write($bundle->toGitPatch());
try {
$future->resolvex();
} catch (CommandException $ex) {
echo phutil_console_format(
- "\n<bg:red>** Patch Failed! **</bg>\n");
+ "\n<bg:red>** %s **</bg>\n",
+ pht('Patch Failed!'));
$stderr = $ex->getStdErr();
if (preg_match('/case-folding collision/', $stderr)) {
echo phutil_console_wrap(
phutil_console_format(
- "\n<bg:yellow>** WARNING **</bg> This patch may have failed ".
- "because it attempts to change the case of a filename (for ".
- "instance, from 'example.c' to 'Example.c'). Mercurial cannot ".
- "apply patches like this on case-insensitive filesystems. You ".
- "must apply this patch manually.\n"));
+ "\n<bg:yellow>** %s **</bg> %s\n",
+ pht('WARNING'),
+ pht(
+ "This patch may have failed because it attempts to change ".
+ "the case of a filename (for instance, from '%s' to '%s'). ".
+ "Mercurial cannot apply patches like this on case-insensitive ".
+ "filesystems. You must apply this patch manually.",
+ 'example.c',
+ 'Example.c')));
}
throw $ex;
}
@@ -770,21 +812,24 @@
$repository_api->execxLocal('bookmark --delete %s', $new_branch);
if ($err) {
$repository_api->execManualLocal('rebase --abort');
- throw new ArcanistUsageException(phutil_console_format(
- "\n<bg:red>** Rebase onto $original_branch failed!**</bg>\n"));
+ throw new ArcanistUsageException(
+ phutil_console_format(
+ "\n<bg:red>** %s**</bg>\n",
+ pht('Rebase onto %s failed!', $original_branch)));
}
}
- $verb = 'committed';
+ $verb = pht('committed');
} else {
- $verb = 'applied';
+ $verb = pht('applied');
}
echo phutil_console_format(
- "<bg:green>** OKAY **</bg> Successfully {$verb} patch.\n");
-
+ "<bg:green>** %s **</bg> %s\n",
+ pht('OKAY'),
+ pht('Successfully %s patch.', $verb));
} else {
- throw new Exception('Unknown version control system.');
+ throw new Exception(pht('Unknown version control system.'));
}
return 0;
@@ -806,20 +851,23 @@
array(
'revision_id' => $revision_id,
));
- $prompt_message = " Note arcanist failed to load the commit message ".
- "from differential for revision D{$revision_id}.";
+ $prompt_message = pht(
+ ' Note arcanist failed to load the commit message '.
+ 'from differential for revision %s.',
+ "D{$revision_id}");
}
// no revision id or failed to fetch commit message so get it from the
// user on the command line
if (!$commit_message) {
- $template =
- "\n\n".
- "# Enter a commit message for this patch. If you just want to apply ".
- "the patch to the working copy without committing, re-run arc patch ".
- "with the --nocommit flag.".
- $prompt_message.
- "\n";
+ $template = sprintf(
+ "\n\n# %s%s\n",
+ pht(
+ 'Enter a commit message for this patch. If you just want to apply '.
+ 'the patch to the working copy without committing, re-run arc patch '.
+ 'with the %s flag.',
+ '--nocommit'),
+ $prompt_message);
$commit_message = $this->newInteractiveEditor($template)
->setName('arcanist-patch-commit-message')
@@ -848,8 +896,9 @@
$cycle_phids = $graph->detectCycles($start_phid);
if ($cycle_phids) {
$phids = array_keys($graph->getNodes());
- $issue = 'The dependencies for this patch have a cycle. Applying them '.
- 'is not guaranteed to work. Continue anyway?';
+ $issue = pht(
+ 'The dependencies for this patch have a cycle. Applying them '.
+ 'is not guaranteed to work. Continue anyway?');
$okay = phutil_console_confirm($issue, true);
} else {
$phids = $graph->getTopographicallySortedNodes();
@@ -915,17 +964,20 @@
// they don't come with a project id so just do nothing
} else if ($bundle_project_id != $working_copy_project_id) {
if ($working_copy_project_id) {
- $issue =
- "This patch is for the '{$bundle_project_id}' project, but the ".
- "working copy belongs to the '{$working_copy_project_id}' project.";
+ $issue = pht(
+ "This patch is for the '%s' project, but the working copy ".
+ "belongs to the '%s' project.",
+ $bundle_project_id,
+ $working_copy_project_id);
} else {
- $issue =
- "This patch is for the '{$bundle_project_id}' project, but the ".
- "working copy does not have an '.arcconfig' file to identify which ".
- "project it belongs to.";
+ $issue = pht(
+ "This patch is for the '%s' project, but the working copy does ".
+ "not have an '%s' file to identify which project it belongs to.",
+ $bundle_project_id,
+ '.arcconfig');
}
$ok = phutil_console_confirm(
- "{$issue} Still try to apply the patch?",
+ pht('%s Still try to apply the patch?', $issue),
$default_no = false);
if (!$ok) {
throw new ArcanistUserAbortException();
@@ -985,9 +1037,12 @@
$source_base_rev);
$ok = phutil_console_confirm(
- "This diff is against commit {$bundle_base_rev_str}, but the ".
- "commit is nowhere in the working copy. Try to apply it against ".
- "the current working copy state? ({$source_base_rev_str})",
+ pht(
+ 'This diff is against commit %s, but the commit is nowhere '.
+ 'in the working copy. Try to apply it against the current '.
+ 'working copy state? (%s)',
+ $bundle_base_rev_str,
+ $source_base_rev_str),
$default_no = false);
if (!$ok) {
throw new ArcanistUserAbortException();
diff --git a/src/workflow/ArcanistRevertWorkflow.php b/src/workflow/ArcanistRevertWorkflow.php
--- a/src/workflow/ArcanistRevertWorkflow.php
+++ b/src/workflow/ArcanistRevertWorkflow.php
@@ -34,7 +34,9 @@
}
public function run() {
- echo pht('Please use `%s` instead.', 'arc backout')."\n";
+ echo pht(
+ 'Please use `%s` instead.',
+ 'arc backout')."\n";
return 1;
}
diff --git a/src/workflow/ArcanistSetConfigWorkflow.php b/src/workflow/ArcanistSetConfigWorkflow.php
--- a/src/workflow/ArcanistSetConfigWorkflow.php
+++ b/src/workflow/ArcanistSetConfigWorkflow.php
@@ -36,7 +36,7 @@
public function getArguments() {
return array(
'local' => array(
- 'help' => 'Set a local config value instead of a user one',
+ 'help' => pht('Set a local config value instead of a user one.'),
),
'*' => 'argv',
);
@@ -85,9 +85,16 @@
$old = $settings->formatConfigValueForDisplay($key, $old);
if ($old === null) {
- echo "Deleted key '{$key}' from {$which} config.\n";
+ echo pht(
+ "Deleted key '%s' from %s config.\n",
+ $key,
+ $which);
} else {
- echo "Deleted key '{$key}' from {$which} config (was {$old}).\n";
+ echo pht(
+ "Deleted key '%s' from %s config (was %s).\n",
+ $key,
+ $which,
+ $old);
}
} else {
$val = $settings->willWriteValue($key, $val);
@@ -103,9 +110,18 @@
$old = $settings->formatConfigValueForDisplay($key, $old);
if ($old === null) {
- echo "Set key '{$key}' = {$val} in {$which} config.\n";
+ echo pht(
+ "Set key '%s' = %s in %s config.\n",
+ $key,
+ $val,
+ $which);
} else {
- echo "Set key '{$key}' = {$val} in {$which} config (was {$old}).\n";
+ echo pht(
+ "Set key '%s' = %s in %s config (was %s).\n",
+ $key,
+ $val,
+ $which,
+ $old);
}
}
diff --git a/src/workflow/ArcanistShellCompleteWorkflow.php b/src/workflow/ArcanistShellCompleteWorkflow.php
--- a/src/workflow/ArcanistShellCompleteWorkflow.php
+++ b/src/workflow/ArcanistShellCompleteWorkflow.php
@@ -50,7 +50,9 @@
if ($pos > $argc) {
throw new ArcanistUsageException(
- 'Specified position is greater than the number of arguments provided.');
+ pht(
+ 'Specified position is greater than the number of '.
+ 'arguments provided.'));
}
// Determine which revision control system the working copy uses, so we
diff --git a/src/workflow/ArcanistTasksWorkflow.php b/src/workflow/ArcanistTasksWorkflow.php
--- a/src/workflow/ArcanistTasksWorkflow.php
+++ b/src/workflow/ArcanistTasksWorkflow.php
@@ -41,31 +41,32 @@
return array(
'status' => array(
'param' => 'task_status',
- 'help' => 'Show tasks that or open or closed, default is open.',
+ 'help' => pht('Show tasks that or open or closed, default is open.'),
),
'owner' => array(
'param' => 'username',
'paramtype' => 'username',
- 'help' =>
+ 'help' => pht(
'Only show tasks assigned to the given username, '.
- 'also accepts @all to show all, default is you.',
+ 'also accepts %s to show all, default is you.',
+ '@all'),
'conflict' => array(
- 'unassigned' => '--owner suppresses unassigned',
+ 'unassigned' => pht('%s suppresses unassigned', '--owner'),
),
),
'order' => array(
'param' => 'task_order',
- 'help' =>
+ 'help' => pht(
'Arrange tasks based on priority, created, or modified, '.
- 'default is priority.',
+ 'default is priority.'),
),
'limit' => array(
'param' => 'n',
'paramtype' => 'int',
- 'help' => 'Limit the amount of tasks outputted, default is all.',
+ 'help' => pht('Limit the amount of tasks outputted, default is all.'),
),
'unassigned' => array(
- 'help' => 'Only show tasks that are not assigned (upforgrabs).',
+ 'help' => pht('Only show tasks that are not assigned (upforgrabs).'),
),
);
}
@@ -94,16 +95,16 @@
$limit);
if (!$this->tasks) {
- echo "No tasks found.\n";
+ echo pht('No tasks found.')."\n";
return 0;
}
$table = id(new PhutilConsoleTable())
->setShowHeader(false)
- ->addColumn('id', array('title' => 'ID'))
- ->addColumn('title', array('title' => 'Title'))
- ->addColumn('priority', array('title' => 'Priority'))
- ->addColumn('status', array('title' => 'Status'));
+ ->addColumn('id', array('title' => pht('ID')))
+ ->addColumn('title', array('title' => pht('Title')))
+ ->addColumn('priority', array('title' => pht('Priority')))
+ ->addColumn('status', array('title' => pht('Status')));
foreach ($this->tasks as $task) {
$output = array();
diff --git a/src/workflow/ArcanistTodoWorkflow.php b/src/workflow/ArcanistTodoWorkflow.php
--- a/src/workflow/ArcanistTodoWorkflow.php
+++ b/src/workflow/ArcanistTodoWorkflow.php
@@ -63,7 +63,7 @@
$conduit = $this->getConduit();
if (trim($summary) == '') {
- echo "Please provide a summary.\n";
+ echo pht('Please provide a summary.')."\n";
return;
}
@@ -97,7 +97,7 @@
$project = idx($projects['slugMap'], $slug);
if (!$project) {
- throw new ArcanistUsageException('No such project: "'.$slug.'"');
+ throw new ArcanistUsageException(pht('No such project: "%s"', $slug));
}
$phids[] = $project;
}
@@ -106,11 +106,11 @@
}
$result = $conduit->callMethodSynchronous('maniphest.createtask', $args);
- echo phutil_console_format(
- "Created task T%s: '<fg:green>**%s**</fg>' at <fg:blue>**%s**</fg>\n",
- $result['id'],
- $result['title'],
- $result['uri']);
+ echo pht(
+ "Created task %s: '%s' at %s\n",
+ 'T'.$result['id'],
+ phutil_console_format('<fg:green>**%s**</fg>', $result['title']),
+ phutil_console_format('<fg:blue>**%s**</fg>', $result['uri']));
if ($this->getArgument('browse')) {
$this->openURIsInBrowser(array($result['uri']));
diff --git a/src/workflow/ArcanistUnitWorkflow.php b/src/workflow/ArcanistUnitWorkflow.php
--- a/src/workflow/ArcanistUnitWorkflow.php
+++ b/src/workflow/ArcanistUnitWorkflow.php
@@ -40,56 +40,61 @@
return array(
'rev' => array(
'param' => 'revision',
- 'help' => 'Run unit tests covering changes since a specific revision.',
+ 'help' => pht(
+ 'Run unit tests covering changes since a specific revision.'),
'supports' => array(
'git',
'hg',
),
'nosupport' => array(
- 'svn' => 'Arc unit does not currently support --rev in SVN.',
+ 'svn' => pht(
+ 'Arc unit does not currently support %s in SVN.',
+ '--rev'),
),
),
'engine' => array(
'param' => 'classname',
- 'help' =>
- 'Override configured unit engine for this project.',
+ 'help' => pht('Override configured unit engine for this project.'),
),
'coverage' => array(
- 'help' => 'Always enable coverage information.',
+ 'help' => pht('Always enable coverage information.'),
'conflicts' => array(
'no-coverage' => null,
),
),
'no-coverage' => array(
- 'help' => 'Always disable coverage information.',
+ 'help' => pht('Always disable coverage information.'),
),
'detailed-coverage' => array(
- 'help' => 'Show a detailed coverage report on the CLI. Implies '.
- '--coverage.',
+ 'help' => pht(
+ 'Show a detailed coverage report on the CLI. Implies %s.',
+ '--coverage'),
),
'json' => array(
- 'help' => 'Report results in JSON format.',
+ 'help' => pht('Report results in JSON format.'),
),
'output' => array(
'param' => 'format',
- 'help' =>
+ 'help' => pht(
"With 'full', show full pretty report (Default). ".
"With 'json', report results in JSON format. ".
"With 'ugly', use uglier (but more efficient) JSON formatting. ".
- "With 'none', don't print results. ",
+ "With 'none', don't print results."),
'conflicts' => array(
- 'json' => 'Only one output format allowed',
- 'ugly' => 'Only one output format allowed',
+ 'json' => pht('Only one output format allowed'),
+ 'ugly' => pht('Only one output format allowed'),
),
),
'everything' => array(
- 'help' => 'Run every test.',
+ 'help' => pht('Run every test.'),
'conflicts' => array(
- 'rev' => '--everything runs all tests.',
+ 'rev' => pht('%s runs all tests.', '--everything'),
),
),
'ugly' => array(
- 'help' => 'With --json, use uglier (but more efficient) formatting.',
+ 'help' => pht(
+ 'With %s, use uglier (but more efficient) formatting.',
+ '--json'),
),
'*' => 'paths',
);
@@ -117,8 +122,10 @@
if (!$engine_class) {
throw new ArcanistNoEngineException(
- 'No unit test engine is configured for this project. Edit .arcconfig '.
- 'to specify a unit test engine.');
+ pht(
+ 'No unit test engine is configured for this project. Edit %s '.
+ 'to specify a unit test engine.',
+ '.arcconfig'));
}
$paths = $this->getArgument('paths');
@@ -126,8 +133,10 @@
$everything = $this->getArgument('everything');
if ($everything && $paths) {
throw new ArcanistUsageException(
- 'You can not specify paths with --everything. The --everything '.
- 'flag runs every test.');
+ pht(
+ 'You can not specify paths with %s. The %s flag runs every test.',
+ '--everything',
+ '--everything'));
}
if ($everything) {
@@ -139,8 +148,10 @@
if (!class_exists($engine_class) ||
!is_subclass_of($engine_class, 'ArcanistUnitTestEngine')) {
throw new ArcanistUsageException(
- "Configured unit test engine '{$engine_class}' is not a subclass of ".
- "'ArcanistUnitTestEngine'.");
+ pht(
+ "Configured unit test engine '%s' is not a subclass of '%s'.",
+ $engine_class,
+ 'ArcanistUnitTestEngine'));
}
$this->engine = newv($engine_class, array());
@@ -228,7 +239,7 @@
$file_coverage[$file] = $coverage;
$file_reports[$file] = $report;
}
- $console->writeOut("\n__COVERAGE REPORT__\n");
+ $console->writeOut("\n__%s__\n", pht('COVERAGE REPORT'));
asort($file_coverage);
foreach ($file_coverage as $file => $coverage) {
diff --git a/src/workflow/ArcanistUpgradeWorkflow.php b/src/workflow/ArcanistUpgradeWorkflow.php
--- a/src/workflow/ArcanistUpgradeWorkflow.php
+++ b/src/workflow/ArcanistUpgradeWorkflow.php
@@ -31,7 +31,9 @@
);
foreach ($roots as $lib => $root) {
- echo pht('Upgrading %s...', $lib)."\n";
+ echo phutil_console_format(
+ "%s\n",
+ pht('Upgrading %s...', $lib));
$working_copy = ArcanistWorkingCopyIdentity::newFromPath($root);
$configuration_manager = clone $this->getConfigurationManager();
diff --git a/src/workflow/ArcanistUploadWorkflow.php b/src/workflow/ArcanistUploadWorkflow.php
--- a/src/workflow/ArcanistUploadWorkflow.php
+++ b/src/workflow/ArcanistUploadWorkflow.php
@@ -204,12 +204,18 @@
$ok = fseek($f, $offset);
if ($ok !== 0) {
- throw new Exception(pht('Failed to fseek()!'));
+ throw new Exception(
+ pht(
+ 'Failed to %s!',
+ 'fseek()'));
}
$data = fread($f, $chunk['byteEnd'] - $chunk['byteStart']);
if ($data === false) {
- throw new Exception(pht('Failed to fread()!'));
+ throw new Exception(
+ pht(
+ 'Failed to %s!',
+ 'fread()'));
}
$conduit->callMethodSynchronous(
diff --git a/src/workflow/ArcanistVersionWorkflow.php b/src/workflow/ArcanistVersionWorkflow.php
--- a/src/workflow/ArcanistVersionWorkflow.php
+++ b/src/workflow/ArcanistVersionWorkflow.php
@@ -48,9 +48,7 @@
if (!Filesystem::pathExists($repository->getMetadataPath())) {
throw new ArcanistUsageException(
- pht(
- '%s is not a git working copy.',
- $lib));
+ pht('%s is not a git working copy.', $lib));
}
list($stdout) = $repository->execxLocal('log -1 --format=%s', '%H %ct');
diff --git a/src/workflow/ArcanistWhichWorkflow.php b/src/workflow/ArcanistWhichWorkflow.php
--- a/src/workflow/ArcanistWhichWorkflow.php
+++ b/src/workflow/ArcanistWhichWorkflow.php
@@ -42,20 +42,20 @@
public function getArguments() {
return array(
'any-status' => array(
- 'help' => 'Show committed and abandoned revisions.',
+ 'help' => pht('Show committed and abandoned revisions.'),
),
'base' => array(
'param' => 'rules',
- 'help' => 'Additional rules for determining base revision.',
+ 'help' => pht('Additional rules for determining base revision.'),
'nosupport' => array(
- 'svn' => 'Subversion does not use base commits.',
+ 'svn' => pht('Subversion does not use base commits.'),
),
'supports' => array('git', 'hg'),
),
'show-base' => array(
- 'help' => 'Print base commit only and exit.',
+ 'help' => pht('Print base commit only and exit.'),
'nosupport' => array(
- 'svn' => 'Subversion does not use base commits.',
+ 'svn' => pht('Subversion does not use base commits.'),
),
'supports' => array('git', 'hg'),
),
@@ -64,7 +64,7 @@
'help' => pht('Specify the end of the commit range to select.'),
'nosupport' => array(
'svn' => pht('Subversion does not support commit ranges.'),
- 'hg' => pht('Mercurial does not support --head yet.'),
+ 'hg' => pht('Mercurial does not support %s yet.', '--head'),
),
'supports' => array('git'),
),
@@ -118,7 +118,7 @@
}
$commits = implode("\n", $commits);
} else {
- $commits = ' (No commits.)';
+ $commits = ' '.pht('(No commits.)');
}
$explanation = $repository_api->getBaseCommitExplanation();
@@ -139,10 +139,13 @@
echo phutil_console_wrap(
phutil_console_format(
- "**COMMIT RANGE**\n".
- "If you run 'arc diff{$arg}', changes between the commit:\n\n"));
-
- echo " {$relative} {$relative_summary}\n\n";
+ "**%s**\n%s\n\n %s %s\n\n",
+ pht('COMMIT RANGE'),
+ pht(
+ "If you run '%s', changes between the commit:",
+ "arc diff{$arg}"),
+ $relative,
+ $relative_summary));
if ($head_commit === null) {
$will_be_sent = pht(
@@ -157,11 +160,13 @@
}
echo phutil_console_wrap(
- "{$will_be_sent}\n\n".
- "You can see the exact changes that will be sent by running ".
- "this command:\n\n".
- " $ {$command}\n\n".
- "These commits will be included in the diff:\n\n");
+ "%s\n\n%s\n\n $ %s\n\n%s\n\n",
+ $will_be_sent,
+ pht(
+ 'You can see the exact changes that will be sent by running '.
+ 'this command:'),
+ $command,
+ pht('These commits will be included in the diff:'));
echo $commits."\n\n\n";
}
@@ -180,18 +185,22 @@
echo phutil_console_wrap(
phutil_console_format(
- "**MATCHING REVISIONS**\n".
- "These Differential revisions match the changes in this working ".
- "copy:\n\n"));
+ "**%s**\n%s\n\n",
+ pht('MATCHING REVISIONS'),
+ pht(
+ 'These Differential revisions match the changes in this working '.
+ 'copy:')));
if (empty($revisions)) {
echo " (No revisions match.)\n";
echo "\n";
echo phutil_console_wrap(
phutil_console_format(
- "Since there are no revisions in Differential which match this ".
- "working copy, a new revision will be **created** if you run ".
- "'arc diff{$arg}'.\n\n"));
+ pht(
+ "Since there are no revisions in Differential which match this ".
+ "working copy, a new revision will be **created** if you run ".
+ "'%s'.\n\n",
+ "arc diff{$arg}")));
} else {
$other_author_phids = array();
foreach ($revisions as $revision) {
@@ -221,19 +230,23 @@
echo pht(" %s %s\n", $monogram, $title);
}
- echo ' Reason: '.$revision['why']."\n";
+ echo ' '.pht('Reason').': '.$revision['why']."\n";
echo "\n";
}
if (count($revisions) == 1) {
echo phutil_console_wrap(
phutil_console_format(
- "Since exactly one revision in Differential matches this working ".
- "copy, it will be **updated** if you run 'arc diff{$arg}'."));
+ pht(
+ "Since exactly one revision in Differential matches this ".
+ "working copy, it will be **updated** if you run '%s'.",
+ "arc diff{$arg}")));
} else {
echo phutil_console_wrap(
- "Since more than one revision in Differential matches this working ".
- "copy, you will be asked which revision you want to update if ".
- "you run 'arc diff {$arg}'.");
+ pht(
+ "Since more than one revision in Differential matches this ".
+ "working copy, you will be asked which revision you want to ".
+ "update if you run '%s'.",
+ "arc diff {$arg}"));
}
echo "\n\n";
}
diff --git a/src/workflow/ArcanistWorkflow.php b/src/workflow/ArcanistWorkflow.php
--- a/src/workflow/ArcanistWorkflow.php
+++ b/src/workflow/ArcanistWorkflow.php
@@ -88,7 +88,9 @@
if ($this instanceof ArcanistBaseWorkflow) {
phutil_deprecated(
'ArcanistBaseWorkflow',
- 'You should extend from `ArcanistWorkflow` instead.');
+ pht(
+ 'You should extend from `%s` instead.',
+ __CLASS__));
}
$this->finalizeWorkingCopy();
@@ -142,7 +144,9 @@
final public function setConduitURI($conduit_uri) {
if ($this->conduit) {
throw new Exception(
- 'You can not change the Conduit URI after a conduit is already open.');
+ pht(
+ 'You can not change the Conduit URI after a '.
+ 'conduit is already open.'));
}
$this->conduitURI = $conduit_uri;
return $this;
@@ -179,8 +183,10 @@
if (!$this->conduitURI) {
throw new Exception(
- 'You must specify a Conduit URI with setConduitURI() before you can '.
- 'establish a conduit.');
+ pht(
+ 'You must specify a Conduit URI with %s before you can '.
+ 'establish a conduit.',
+ 'setConduitURI()'));
}
$this->conduit = new ConduitClient($this->conduitURI);
@@ -225,7 +231,7 @@
final public function setConduitCredentials(array $credentials) {
if ($this->isConduitAuthenticated()) {
throw new Exception(
- 'You may not set new credentials after authenticating conduit.');
+ pht('You may not set new credentials after authenticating conduit.'));
}
$this->conduitCredentials = $credentials;
@@ -318,8 +324,9 @@
try {
if (!$credentials) {
throw new Exception(
- 'Set conduit credentials with setConduitCredentials() before '.
- 'authenticating conduit!');
+ pht(
+ 'Set conduit credentials with %s before authenticating conduit!',
+ 'setConduitCredentials()'));
}
// If we have `token`, this server supports the simpler, new-style
@@ -351,12 +358,12 @@
if (empty($credentials['user'])) {
throw new ConduitClientException(
'ERR-INVALID-USER',
- 'Empty user in credentials.');
+ pht('Empty user in credentials.'));
}
if (empty($credentials['certificate'])) {
throw new ConduitClientException(
'ERR-NO-CERTIFICATE',
- 'Empty certificate in credentials.');
+ pht('Empty certificate in credentials.'));
}
$description = idx($credentials, 'description', '');
@@ -378,29 +385,24 @@
$ex->getErrorCode() == 'ERR-INVALID-USER' ||
$ex->getErrorCode() == 'ERR-INVALID-AUTH') {
$conduit_uri = $this->conduitURI;
- $message =
- "\n".
- phutil_console_format(
- 'YOU NEED TO __INSTALL A CERTIFICATE__ TO LOGIN TO PHABRICATOR').
- "\n\n".
- phutil_console_format(
- ' To do this, run: **arc install-certificate**').
- "\n\n".
- "The server '{$conduit_uri}' rejected your request:".
- "\n".
- $ex->getMessage();
+ $message = phutil_console_format(
+ "\n%s\n\n %s\n\n%s\n%s",
+ pht('YOU NEED TO __INSTALL A CERTIFICATE__ TO LOGIN TO PHABRICATOR'),
+ pht('To do this, run: **%s**', 'arc install-certificate'),
+ pht("The server '%s' rejected your request:", $conduit_uri),
+ $ex->getMessage());
throw new ArcanistUsageException($message);
} else if ($ex->getErrorCode() == 'NEW-ARC-VERSION') {
// Cleverly disguise this as being AWESOME!!!
- echo phutil_console_format("**New Version Available!**\n\n");
+ echo phutil_console_format("**%s**\n\n", pht('New Version Available!'));
echo phutil_console_wrap($ex->getMessage());
echo "\n\n";
- echo "In most cases, arc can be upgraded automatically.\n";
+ echo pht('In most cases, arc can be upgraded automatically.')."\n";
$ok = phutil_console_confirm(
- 'Upgrade arc now?',
+ pht('Upgrade arc now?'),
$default_no = false);
if (!$ok) {
throw $ex;
@@ -411,7 +413,7 @@
chdir($root);
$err = phutil_passthru('%s upgrade', $root.'/bin/arc');
if (!$err) {
- echo "\nTry running your arc command again.\n";
+ echo "\n".pht('Try running your arc command again.')."\n";
}
exit(1);
} else {
@@ -475,8 +477,11 @@
if (!$this->userPHID) {
$workflow = get_class($this);
throw new Exception(
- "This workflow ('{$workflow}') requires authentication, override ".
- "requiresAuthentication() to return true.");
+ pht(
+ "This workflow ('%s') requires authentication, override ".
+ "%s to return true.",
+ $workflow,
+ 'requiresAuthentication()'));
}
return $this->userPHID;
}
@@ -506,8 +511,11 @@
if (!$this->conduit) {
$workflow = get_class($this);
throw new Exception(
- "This workflow ('{$workflow}') requires a Conduit, override ".
- "requiresConduit() to return true.");
+ pht(
+ "This workflow ('%s') requires a Conduit, override ".
+ "%s to return true.",
+ $workflow,
+ 'requiresConduit()'));
}
return $this->conduit;
}
@@ -692,17 +700,21 @@
'--'.head($corrected))."\n");
$arg_key = head($corrected);
} else {
- throw new ArcanistUsageException(pht(
- "Unknown argument '%s'. Try 'arc help'.",
- $arg_key));
+ throw new ArcanistUsageException(
+ pht(
+ "Unknown argument '%s'. Try '%s'.",
+ $arg_key,
+ 'arc help'));
}
}
} else if (!strncmp($arg, '-', 1)) {
$arg_key = substr($arg, 1);
if (empty($short_to_long_map[$arg_key])) {
- throw new ArcanistUsageException(pht(
- "Unknown argument '%s'. Try 'arc help'.",
- $arg_key));
+ throw new ArcanistUsageException(
+ pht(
+ "Unknown argument '%s'. Try '%s'.",
+ $arg_key,
+ 'arc help'));
}
$arg_key = $short_to_long_map[$arg_key];
} else {
@@ -715,9 +727,10 @@
$dict[$arg_key] = true;
} else {
if ($ii == $size - 1) {
- throw new ArcanistUsageException(pht(
- "Option '%s' requires a parameter.",
- $arg));
+ throw new ArcanistUsageException(
+ pht(
+ "Option '%s' requires a parameter.",
+ $arg));
}
if (!empty($options['repeat'])) {
$dict[$arg_key][] = $args[$ii + 1];
@@ -733,9 +746,11 @@
$dict[$more_key] = $more;
} else {
$example = reset($more);
- throw new ArcanistUsageException(pht(
- "Unrecognized argument '%s'. Try 'arc help'.",
- $example));
+ throw new ArcanistUsageException(
+ pht(
+ "Unrecognized argument '%s'. Try '%s'.",
+ $example,
+ 'arc help'));
}
}
@@ -753,8 +768,10 @@
// TODO: We'll always display these as long-form, when the user might
// have typed them as short form.
throw new ArcanistUsageException(
- "Arguments '--{$key}' and '--{$conflict}' are mutually exclusive".
- $more);
+ pht(
+ "Arguments '%s' and '%s' are mutually exclusive",
+ "--{$key}",
+ "--{$conflict}").$more);
}
}
}
@@ -775,8 +792,11 @@
if (!$working_copy) {
$workflow = get_class($this);
throw new Exception(
- "This workflow ('{$workflow}') requires a working copy, override ".
- "requiresWorkingCopy() to return true.");
+ pht(
+ "This workflow ('%s') requires a working copy, override ".
+ "%s to return true.",
+ $workflow,
+ 'requiresWorkingCopy()'));
}
return $working_copy;
}
@@ -804,8 +824,11 @@
if (!$this->repositoryAPI) {
$workflow = get_class($this);
throw new Exception(
- "This workflow ('{$workflow}') requires a Repository API, override ".
- "requiresRepositoryAPI() to return true.");
+ pht(
+ "This workflow ('%s') requires a Repository API, override ".
+ "%s to return true.",
+ $workflow,
+ 'requiresRepositoryAPI()'));
}
return $this->repositoryAPI;
}
@@ -833,41 +856,52 @@
$must_commit = array();
$working_copy_desc = phutil_console_format(
- " Working copy: __%s__\n\n",
+ " %s: __%s__\n\n",
+ pht('Working copy'),
$api->getPath());
// NOTE: this is a subversion-only concept.
$incomplete = $api->getIncompleteChanges();
if ($incomplete) {
throw new ArcanistUsageException(
- "You have incompletely checked out directories in this working copy. ".
- "Fix them before proceeding.\n\n".
- $working_copy_desc.
- " Incomplete directories in working copy:\n".
- " ".implode("\n ", $incomplete)."\n\n".
- "You can fix these paths by running 'svn update' on them.");
+ sprintf(
+ "%s\n\n%s %s\n %s\n\n%s",
+ pht(
+ "You have incompletely checked out directories in this working ".
+ "copy. Fix them before proceeding.'"),
+ $working_copy_desc,
+ pht('Incomplete directories in working copy:'),
+ implode("\n ", $incomplete),
+ pht(
+ "You can fix these paths by running '%s' on them.",
+ 'svn update')));
}
$conflicts = $api->getMergeConflicts();
if ($conflicts) {
throw new ArcanistUsageException(
- "You have merge conflicts in this working copy. Resolve merge ".
- "conflicts before proceeding.\n\n".
- $working_copy_desc.
- " Conflicts in working copy:\n".
- " ".implode("\n ", $conflicts)."\n");
+ sprintf(
+ "%s\n\n%s %s\n %s",
+ pht(
+ 'You have merge conflicts in this working copy. Resolve merge '.
+ 'conflicts before proceeding.'),
+ $working_copy_desc,
+ pht('Conflicts in working copy:'),
+ implode("\n ", $conflicts)));
}
$missing = $api->getMissingChanges();
if ($missing) {
throw new ArcanistUsageException(
- pht(
- "You have missing files in this working copy. Revert or formally ".
- "remove them (with `svn rm`) before proceeding.\n\n".
- "%s".
- " Missing files in working copy:\n%s\n",
+ sprintf(
+ "%s\n\n%s %s\n %s\n",
+ pht(
+ 'You have missing files in this working copy. Revert or formally '.
+ 'remove them (with `%s`) before proceeding.',
+ 'svn rm'),
$working_copy_desc,
- " ".implode("\n ", $missing)));
+ pht('Missing files in working copy:'),
+ implode("\n ", $missing)));
}
$uncommitted = $api->getUncommittedChanges();
@@ -882,27 +916,32 @@
}
if ($untracked) {
- echo pht(
- "You have untracked files in this working copy.\n\n%s",
+ echo sprintf(
+ "%s\n\n%s",
+ pht('You have untracked files in this working copy.'),
$working_copy_desc);
if ($api instanceof ArcanistGitAPI) {
$hint = pht(
- '(To ignore these %s change(s), add them to ".git/info/exclude".)',
- new PhutilNumber(count($untracked)));
+ '(To ignore these %s change(s), add them to "%s".)',
+ new PhutilNumber(count($untracked)),
+ '.git/info/exclude');
} else if ($api instanceof ArcanistSubversionAPI) {
$hint = pht(
- '(To ignore these %s change(s), add them to "svn:ignore".)',
- new PhutilNumber(count($untracked)));
+ '(To ignore these %s change(s), add them to "%s".)',
+ new PhutilNumber(count($untracked)),
+ 'svn:ignore');
} else if ($api instanceof ArcanistMercurialAPI) {
$hint = pht(
- '(To ignore these %s change(s), add them to ".hgignore".)',
- new PhutilNumber(count($untracked)));
+ '(To ignore these %s change(s), add them to "%s".)',
+ new PhutilNumber(count($untracked)),
+ '.hgignore');
}
$untracked_list = " ".implode("\n ", $untracked);
- echo pht(
- " Untracked changes in working copy:\n %s\n%s",
+ echo sprintf(
+ " %s\n %s\n%s",
+ pht('Untracked changes in working copy:'),
$hint,
$untracked_list);
@@ -924,23 +963,26 @@
// to pause in the middle of printing the output below.
$this->getShouldAmend();
- echo pht(
- "You have uncommitted changes in this working copy.\n\n%s",
+ echo sprintf(
+ "%s\n\n%s",
+ pht('You have uncommitted changes in this working copy.'),
$working_copy_desc);
$lists = array();
if ($unstaged) {
$unstaged_list = " ".implode("\n ", $unstaged);
- $lists[] = pht(
- " Unstaged changes in working copy:\n%s",
+ $lists[] = sprintf(
+ " %s\n%s",
+ pht('Unstaged changes in working copy:'),
$unstaged_list);
}
if ($uncommitted) {
$uncommitted_list = " ".implode("\n ", $uncommitted);
- $lists[] = pht(
- " Uncommitted changes in working copy:\n%s",
+ $lists[] = sprintf(
+ "%s\n%s",
+ pht('Uncommitted changes in working copy:'),
$uncommitted_list);
}
@@ -957,15 +999,16 @@
'arc.autostash',
false);
if ($permit_autostash && $api->canStashChanges()) {
- echo "Stashing uncommitted changes. (You can restore them with ".
- "`git stash pop`.)\n";
+ echo pht(
+ 'Stashing uncommitted changes. (You can restore them with `%s`).',
+ 'git stash pop')."\n";
$api->stashChanges();
$this->stashed = true;
} else {
throw new ArcanistUsageException(
pht(
- 'You can not continue with uncommitted changes. Commit '.
- 'or discard them before proceeding.'));
+ 'You can not continue with uncommitted changes. '.
+ 'Commit or discard them before proceeding.'));
}
}
}
@@ -975,10 +1018,10 @@
$commit = head($api->getLocalCommitInformation());
$api->amendCommit($commit['message']);
} else if ($api->supportsLocalCommits()) {
- $template =
- "\n\n".
- "# ".pht('Enter a commit message.')."\n#\n".
- "# ".pht('Changes:')."\n#\n";
+ $template = sprintf(
+ "\n\n# %s\n#\n# %s\n#\n".
+ pht('Enter a commit message.'),
+ pht('Changes:'));
$paths = array_merge($uncommitted, $unstaged);
$paths = array_unique($paths);
@@ -1729,13 +1772,14 @@
if (!$results) {
$reasons[] = pht(
'No repositories matched the query. Check that your configuration '.
- 'is correct, or use "repository.callsign" to select a repository '.
- 'explicitly.');
+ 'is correct, or use "%s" to select a repository explicitly.',
+ 'repository.callsign');
} else if (count($results) > 1) {
$reasons[] = pht(
'Multiple repostories (%s) matched the query. You can use the '.
- '"repository.callsign" configuration to select the one you want.',
- implode(', ', ipull($results, 'callsign')));
+ '"%s" configuration to select the one you want.',
+ implode(', ', ipull($results, 'callsign')),
+ 'repository.callsign');
} else {
$result = head($results);
$reasons[] = pht('Found a unique matching repository.');
@@ -1757,12 +1801,14 @@
'callsigns' => array($callsign),
);
$reasons[] = pht(
- 'Configuration value "repository.callsign" is set to "%s".',
+ 'Configuration value "%s" is set to "%s".',
+ 'repository.callsign',
$callsign);
return array($query, $reasons);
} else {
$reasons[] = pht(
- 'Configuration value "repository.callsign" is empty.');
+ 'Configuration value "%s" is empty.',
+ 'repository.callsign');
}
$project_info = $this->getProjectInfo();
@@ -1774,25 +1820,29 @@
'callsigns' => array($callsign),
);
$reasons[] = pht(
- 'Configuration value "project.name" is set to "%s"; this project '.
+ 'Configuration value "%s" is set to "%s"; this project '.
'is associated with the "%s" repository.',
+ 'project.name',
$project_name,
$callsign);
return array($query, $reasons);
} else {
$reasons[] = pht(
- 'Configuration value "project.name" is set to "%s", but this '.
+ 'Configuration value "%s" is set to "%s", but this '.
'project is not associated with a repository.',
+ 'project.name',
$project_name);
}
} else if (strlen($project_name)) {
$reasons[] = pht(
- 'Configuration value "project.name" is set to "%s", but that '.
+ 'Configuration value "%s" is set to "%s", but that '.
'project does not exist.',
+ 'project.name',
$project_name);
} else {
$reasons[] = pht(
- 'Configuration value "project.name" is empty.');
+ 'Configuration value "%s" is empty.',
+ 'project.name');
}
$uuid = $this->getRepositoryAPI()->getRepositoryUUID();
@@ -1854,9 +1904,11 @@
if (!$engine_class) {
throw new ArcanistNoEngineException(
pht(
- "No lint engine is configured for this project. ".
- "Create an '.arclint' file, or configure an advanced engine ".
- "with 'lint.engine' in '.arcconfig'."));
+ "No lint engine is configured for this project. Create an '%s' ".
+ "file, or configure an advanced engine with '%s' in '%s'.",
+ '.arclint',
+ 'lint.engine',
+ '.arcconfig'));
}
$base_class = 'ArcanistLintEngine';
@@ -1864,8 +1916,7 @@
!is_subclass_of($engine_class, $base_class)) {
throw new ArcanistUsageException(
pht(
- 'Configured lint engine "%s" is not a subclass of "%s", but must '.
- 'be.',
+ 'Configured lint engine "%s" is not a subclass of "%s", but must be.',
$engine_class,
$base_class));
}
@@ -1917,8 +1968,9 @@
throw new ArcanistUsageException(
pht(
- "Unable to find a browser command to run. Set 'browser' in your ".
- "Arcanist config to specify a command to use."));
+ "Unable to find a browser command to run. Set '%s' in your ".
+ "Arcanist config to specify a command to use.",
+ 'browser'));
}
diff --git a/src/workflow/exception/ArcanistCapabilityNotSupportedException.php b/src/workflow/exception/ArcanistCapabilityNotSupportedException.php
--- a/src/workflow/exception/ArcanistCapabilityNotSupportedException.php
+++ b/src/workflow/exception/ArcanistCapabilityNotSupportedException.php
@@ -5,8 +5,9 @@
public function __construct(ArcanistRepositoryAPI $api) {
$name = $api->getSourceControlSystemName();
parent::__construct(
- "This repository API ('{$name}') does not support the requested ".
- "capability.");
+ pht(
+ "This repository API ('%s') does not support the requested capability.",
+ $name));
}
}
diff --git a/src/workingcopyidentity/ArcanistWorkingCopyIdentity.php b/src/workingcopyidentity/ArcanistWorkingCopyIdentity.php
--- a/src/workingcopyidentity/ArcanistWorkingCopyIdentity.php
+++ b/src/workingcopyidentity/ArcanistWorkingCopyIdentity.php
@@ -123,7 +123,10 @@
if ($config === null) {
$console->writeLog(
"%s\n",
- pht('Working Copy: Reading .arcconfig from "%s".', $config_file));
+ pht(
+ 'Working Copy: Reading %s from "%s".',
+ '.arcconfig',
+ $config_file));
$config_data = Filesystem::readFile($config_file);
$config = self::parseRawConfigFile($config_data, $config_file);
}
@@ -136,15 +139,16 @@
$console->writeLog(
"%s\n",
pht(
- 'Working Copy: Unable to find .arcconfig in any of these '.
- 'locations: %s.',
+ 'Working Copy: Unable to find %s in any of these locations: %s.',
+ '.arcconfig',
implode(', ', $looked_in)));
} else {
$console->writeLog(
"%s\n",
pht(
- 'Working Copy: No candidate locations for .arcconfig from '.
- 'this working directory.'));
+ 'Working Copy: No candidate locations for %s from '.
+ 'this working directory.',
+ '.arcconfig'));
}
$config = array();
}
@@ -202,7 +206,7 @@
return phutil_json_decode($raw_config);
} catch (PhutilJSONParserException $ex) {
throw new PhutilProxyException(
- pht("Unable to parse '.arcconfig' file '%s'.", $from_where),
+ pht("Unable to parse '%s' file '%s'.", '.arcconfig', $from_where),
$ex);
}
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Mar 20, 10:04 AM (2 d, 22 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7221821
Default Alt Text
D12607.id30816.largetrue.diff (251 KB)
Attached To
Mode
D12607: `pht` all the things
Attached
Detach File
Event Timeline
Log In to Comment