Fix issue in Mercurial repos with duplicate branch heads

Summary:
Fixes T5613. A branch may have multiple heads in Mercurial, but `executeOne()` expects exactly one result.

Load them all instead. Equivalently, we could `limit(1)`, but it's likely that we'll use the cursors in the future to reduce the number of VCS operations we do, so this is probably a little more along the lines where we're headed.

Test Plan: Poked around some repos.

Reviewers: chad, richardvanvelzen

Reviewed By: richardvanvelzen

Subscribers: epriestley

Maniphest Tasks: T5613

Differential Revision: https://secure.phabricator.com/D9918
This commit is contained in:
epriestley
2014-07-13 06:55:04 -07:00
parent 9cb6b2cfcc
commit 66a30ef97b

View File

@@ -29,13 +29,14 @@ final class DiffusionRepositoryController extends DiffusionController {
// If this VCS supports branches, check that the selected branch actually // If this VCS supports branches, check that the selected branch actually
// exists. // exists.
if ($drequest->supportsBranches()) { if ($drequest->supportsBranches()) {
$ref_cursor = id(new PhabricatorRepositoryRefCursorQuery()) // NOTE: Mercurial may have multiple branch heads with the same name.
$ref_cursors = id(new PhabricatorRepositoryRefCursorQuery())
->setViewer($viewer) ->setViewer($viewer)
->withRepositoryPHIDs(array($repository->getPHID())) ->withRepositoryPHIDs(array($repository->getPHID()))
->withRefTypes(array(PhabricatorRepositoryRefCursor::TYPE_BRANCH)) ->withRefTypes(array(PhabricatorRepositoryRefCursor::TYPE_BRANCH))
->withRefNames(array($drequest->getBranch())) ->withRefNames(array($drequest->getBranch()))
->executeOne(); ->execute();
if ($ref_cursor) { if ($ref_cursors) {
// This is a valid branch, so we necessarily have some content. // This is a valid branch, so we necessarily have some content.
$page_has_content = true; $page_has_content = true;
} else { } else {