1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-11-29 10:12:41 +01:00

Handle empty output from hg --debug branches in the parser

Summary: Ref T1493. Also consolidate this a bit more.

Test Plan: Unit tests.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T1493

Differential Revision: https://secure.phabricator.com/D7481
This commit is contained in:
epriestley 2013-11-04 12:15:12 -08:00
parent aabbdbd2ab
commit 9310df9615
4 changed files with 17 additions and 14 deletions

View file

@ -984,22 +984,15 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI {
}
public function getBranches() {
list($stdout) = $this->execxLocal('--debug branches');
$lines = ArcanistMercurialParser::parseMercurialBranches($stdout);
$branches = array();
list($raw_output) = $this->execxLocal('branches');
$raw_output = trim($raw_output);
foreach (explode("\n", $raw_output) as $line) {
// example line: default 0:a5ead76cdf85 (inactive)
list($name, $rev_line) = $this->splitBranchOrBookmarkLine($line);
// strip off the '(inactive)' bit if it exists
$rev_parts = explode(' ', $rev_line);
$revision = $rev_parts[0];
foreach ($lines as $name => $spec) {
$branches[] = array(
'name' => $name,
'revision' => $revision);
'revision' => $spec['rev'],
);
}
return $branches;

View file

@ -188,7 +188,13 @@ final class ArcanistMercurialParser {
* @task parse
*/
public static function parseMercurialBranches($stdout) {
$lines = explode("\n", trim($stdout));
$stdout = rtrim($stdout, "\n");
if (!strlen($stdout)) {
// No branches; commonly, this occurs in a newly initialized repository.
return array();
}
$lines = explode("\n", $stdout);
$branches = array();
foreach ($lines as $line) {

View file

@ -36,6 +36,10 @@ final class ArcanistMercurialParserTestCase extends ArcanistTestCase {
array('0b9d8290c4e0', '78963faacfc7', '5db03c5500c6', 'ffffffffffff'),
array_values(ipull($output, 'rev')));
break;
case 'branches-empty.txt':
$output = ArcanistMercurialParser::parseMercurialBranches($data);
$this->assertEqual(array(), $output);
break;
case 'log-basic.txt':
$output = ArcanistMercurialParser::parseMercurialLog($data);
$this->assertEqual(