mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-20 20:40:56 +01:00
Work around hg
echoing warnings to stdout under --debug
Summary: Ref T615. Ref T4237. With `--debug`, Mercurial will echo an "ignoring untrusted configuration option" warning **to stdout** if `.hgrc` has the wrong owner. However, we need `--debug` to make `{parents}` usable, at least until the patches I got into the upstream are widely deployed. So after getting `--debug` output, strip off any leading warnings. These warnings should always be in English, at least, since we set `LANG` explicitly. Test Plan: Unit tests. @asherkin, maybe you can confirm this? I can't actually get the warning, but I think my `hg` in PATH is just a bit out of date. Reviewers: asherkin, btrahan Reviewed By: asherkin CC: asherkin, aran Maniphest Tasks: T615, T4237 Differential Revision: https://secure.phabricator.com/D7784
This commit is contained in:
parent
3386920971
commit
b0f7e7a6af
5 changed files with 73 additions and 0 deletions
|
@ -128,6 +128,7 @@ extends ConduitAPI_diffusion_abstractquery_Method {
|
||||||
hgsprintf('reverse(%s::%s)', '0', $commit_hash),
|
hgsprintf('reverse(%s::%s)', '0', $commit_hash),
|
||||||
$path_arg);
|
$path_arg);
|
||||||
|
|
||||||
|
$stdout = PhabricatorRepository::filterMercurialDebugOutput($stdout);
|
||||||
$lines = explode("\n", trim($stdout));
|
$lines = explode("\n", trim($stdout));
|
||||||
$lines = array_slice($lines, $offset);
|
$lines = array_slice($lines, $offset);
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ final class DiffusionLowLevelMercurialBranchesQuery
|
||||||
// NOTE: `--debug` gives us 40-character hashes.
|
// NOTE: `--debug` gives us 40-character hashes.
|
||||||
list($stdout) = $repository->execxLocalCommand(
|
list($stdout) = $repository->execxLocalCommand(
|
||||||
'--debug branches');
|
'--debug branches');
|
||||||
|
$stdout = PhabricatorRepository::filterMercurialDebugOutput($stdout);
|
||||||
|
|
||||||
$branches = array();
|
$branches = array();
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ final class DiffusionMercurialCommitParentsQuery
|
||||||
list($stdout) = $repository->execxLocalCommand(
|
list($stdout) = $repository->execxLocalCommand(
|
||||||
'log --debug --limit 1 --template={parents} --rev %s',
|
'log --debug --limit 1 --template={parents} --rev %s',
|
||||||
$drequest->getStableCommitName());
|
$drequest->getStableCommitName());
|
||||||
|
$stdout = PhabricatorRepository::filterMercurialDebugOutput($stdout);
|
||||||
|
|
||||||
$hashes = preg_split('/\s+/', trim($stdout));
|
$hashes = preg_split('/\s+/', trim($stdout));
|
||||||
foreach ($hashes as $key => $value) {
|
foreach ($hashes as $key => $value) {
|
||||||
|
|
|
@ -440,6 +440,29 @@ final class PhabricatorRepository extends PhabricatorRepositoryDAO
|
||||||
return $args;
|
return $args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sanitize output of an `hg` command invoked with the `--debug` flag to make
|
||||||
|
* it usable.
|
||||||
|
*
|
||||||
|
* @param string Output from `hg --debug ...`
|
||||||
|
* @return string Usable output.
|
||||||
|
*/
|
||||||
|
public static function filterMercurialDebugOutput($stdout) {
|
||||||
|
// When hg commands are run with `--debug` and some config file isn't
|
||||||
|
// trusted, Mercurial prints out a warning to stdout, twice, after Feb 2011.
|
||||||
|
//
|
||||||
|
// http://selenic.com/pipermail/mercurial-devel/2011-February/028541.html
|
||||||
|
|
||||||
|
$lines = preg_split('/(?<=\n)/', $stdout);
|
||||||
|
$regex = '/ignoring untrusted configuration option .*\n$/';
|
||||||
|
|
||||||
|
foreach ($lines as $key => $line) {
|
||||||
|
$lines[$key] = preg_replace($regex, '', $line);
|
||||||
|
}
|
||||||
|
|
||||||
|
return implode('', $lines);
|
||||||
|
}
|
||||||
|
|
||||||
public function getURI() {
|
public function getURI() {
|
||||||
return '/diffusion/'.$this->getCallsign().'/';
|
return '/diffusion/'.$this->getCallsign().'/';
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,5 +107,52 @@ final class PhabricatorRepositoryTestCase
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFilterMercurialDebugOutput() {
|
||||||
|
$map = array(
|
||||||
|
"" => "",
|
||||||
|
|
||||||
|
"quack\n" => "quack\n",
|
||||||
|
|
||||||
|
"ignoring untrusted configuration option x.y = z\nquack\n" =>
|
||||||
|
"quack\n",
|
||||||
|
|
||||||
|
"ignoring untrusted configuration option x.y = z\n".
|
||||||
|
"ignoring untrusted configuration option x.y = z\n".
|
||||||
|
"quack\n" =>
|
||||||
|
"quack\n",
|
||||||
|
|
||||||
|
"ignoring untrusted configuration option x.y = z\n".
|
||||||
|
"ignoring untrusted configuration option x.y = z\n".
|
||||||
|
"ignoring untrusted configuration option x.y = z\n".
|
||||||
|
"quack\n" =>
|
||||||
|
"quack\n",
|
||||||
|
|
||||||
|
"quack\n".
|
||||||
|
"ignoring untrusted configuration option x.y = z\n".
|
||||||
|
"ignoring untrusted configuration option x.y = z\n".
|
||||||
|
"ignoring untrusted configuration option x.y = z\n" =>
|
||||||
|
"quack\n",
|
||||||
|
|
||||||
|
"ignoring untrusted configuration option x.y = z\n".
|
||||||
|
"ignoring untrusted configuration option x.y = z\n".
|
||||||
|
"duck\n".
|
||||||
|
"ignoring untrusted configuration option x.y = z\n".
|
||||||
|
"ignoring untrusted configuration option x.y = z\n".
|
||||||
|
"bread\n".
|
||||||
|
"ignoring untrusted configuration option x.y = z\n".
|
||||||
|
"quack\n" =>
|
||||||
|
"duck\nbread\nquack\n",
|
||||||
|
|
||||||
|
"ignoring untrusted configuration option x.y = z\n".
|
||||||
|
"duckignoring untrusted configuration option x.y = z\n".
|
||||||
|
"quack" =>
|
||||||
|
"duckquack",
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($map as $input => $expect) {
|
||||||
|
$actual = PhabricatorRepository::filterMercurialDebugOutput($input);
|
||||||
|
$this->assertEqual($expect, $actual, $input);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue