1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2025-02-02 09:58:23 +01:00

Provide hgsprintf() for building hg revsets

Summary: I guess this is correct? See T2387 for discussion.

Test Plan: Unit tests.

Reviewers: bos, DurhamGoode

Reviewed By: DurhamGoode

CC: aran

Maniphest Tasks: T2387

Differential Revision: https://secure.phabricator.com/D4711
This commit is contained in:
epriestley 2013-01-28 16:27:47 -08:00
parent fd909479d0
commit 2613ea196f
3 changed files with 66 additions and 0 deletions

View file

@ -108,6 +108,7 @@ phutil_register_library_map(array(
'ArcanistPhutilTestTerminatedException' => 'unit/engine/phutil/testcase/ArcanistPhutilTestTerminatedException.php',
'ArcanistPyFlakesLinter' => 'lint/linter/ArcanistPyFlakesLinter.php',
'ArcanistPyLintLinter' => 'lint/linter/ArcanistPyLintLinter.php',
'ArcanistRepoUtilsTestCase' => 'repository/util/__tests__/ArcanistRepoUtilsTestCase.php',
'ArcanistRepositoryAPI' => 'repository/api/ArcanistRepositoryAPI.php',
'ArcanistRepositoryAPIMiscTestCase' => 'repository/api/__tests__/ArcanistRepositoryAPIMiscTestCase.php',
'ArcanistRepositoryAPIStateTestCase' => 'repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php',
@ -158,6 +159,8 @@ phutil_register_library_map(array(
),
'function' =>
array(
'hgsprintf' => 'repository/util/hgsprintf.php',
'xsprintf_mercurial' => 'repository/util/hgsprintf.php',
),
'xmap' =>
array(
@ -233,6 +236,7 @@ phutil_register_library_map(array(
'ArcanistPhutilTestTerminatedException' => 'Exception',
'ArcanistPyFlakesLinter' => 'ArcanistLinter',
'ArcanistPyLintLinter' => 'ArcanistLinter',
'ArcanistRepoUtilsTestCase' => 'ArcanistTestCase',
'ArcanistRepositoryAPIMiscTestCase' => 'ArcanistTestCase',
'ArcanistRepositoryAPIStateTestCase' => 'ArcanistTestCase',
'ArcanistRubyLinter' => 'ArcanistLinter',

View file

@ -0,0 +1,23 @@
<?php
final class ArcanistRepoUtilsTestCase extends ArcanistTestCase {
public function testhgsprintf() {
$this->assertEqual(
"'version-1'",
hgsprintf('%s', 'version-1'));
$this->assertEqual(
"'single\\'quote'",
hgsprintf('%s', "single'quote"));
$this->assertEqual(
"'back\\\\slash'",
hgsprintf('%s', 'back\\slash'));
$this->assertEqual(
"'33%'",
hgsprintf('%R', hgsprintf('%s', '33%')));
}
}

View file

@ -0,0 +1,39 @@
<?php
/**
* Format a Mercurial revset expression. Supports the following conversions:
*
* %s Symbol
* Escapes a Mercurial symbol, like a branch or bookmark name.
*
* %R Rrraw Rreferrrence / Rrrrevset
* Passes text through unescaped (e.g., an already-escaped revset).
*
* @group mercurial
*/
function hgsprintf($pattern /* , ... */) {
$args = func_get_args();
return xsprintf('xsprintf_mercurial', null, $args);
}
/**
* xsprintf() callback for Mercurial encoding.
*
* @group mercurial
*/
function xsprintf_mercurial($userdata, &$pattern, &$pos, &$value, &$length) {
$type = $pattern[$pos];
switch ($type) {
case 's':
$value = "'".addcslashes($value, "'\\")."'";
break;
case 'R':
$type = 's';
break;
}
$pattern[$pos] = $type;
}