Page MenuHomePhabricator

D7481.diff

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
@@ -984,22 +984,15 @@
}
public function getBranches() {
- $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];
+ list($stdout) = $this->execxLocal('--debug branches');
+ $lines = ArcanistMercurialParser::parseMercurialBranches($stdout);
+ $branches = array();
+ foreach ($lines as $name => $spec) {
$branches[] = array(
'name' => $name,
- 'revision' => $revision);
+ 'revision' => $spec['rev'],
+ );
}
return $branches;
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
@@ -188,7 +188,13 @@
* @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) {
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
@@ -36,6 +36,10 @@
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(
diff --git a/src/repository/parser/__tests__/mercurial/branches-empty.txt b/src/repository/parser/__tests__/mercurial/branches-empty.txt
new file mode 100644

File Metadata

Mime Type
text/x-diff
Storage Engine
amazon-s3
Storage Format
Raw Data
Storage Handle
phabricator/4p/4g/thfl2ctznu2qgz33
Default Alt Text
D7481.diff (2 KB)

Event Timeline