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:
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user