diff --git a/src/applications/diffusion/controller/branchtable/DiffusionBranchTableController.php b/src/applications/diffusion/controller/branchtable/DiffusionBranchTableController.php index be9a135dca..ee83f57e92 100644 --- a/src/applications/diffusion/controller/branchtable/DiffusionBranchTableController.php +++ b/src/applications/diffusion/controller/branchtable/DiffusionBranchTableController.php @@ -32,8 +32,7 @@ final class DiffusionBranchTableController extends DiffusionController { // TODO: Add support for branches that contain commit $query = DiffusionBranchQuery::newFromDiffusionRequest($drequest); $query->setOffset($pager->getOffset()); - // we add 2 here, because of removed HEAD branch - $query->setLimit($pager->getPageSize() + 2); + $query->setLimit($pager->getPageSize() + 1); $branches = $query->loadBranches(); $branches = $pager->sliceResults($branches); diff --git a/src/applications/diffusion/controller/repository/DiffusionRepositoryController.php b/src/applications/diffusion/controller/repository/DiffusionRepositoryController.php index d75ab134e0..462e1f589f 100644 --- a/src/applications/diffusion/controller/repository/DiffusionRepositoryController.php +++ b/src/applications/diffusion/controller/repository/DiffusionRepositoryController.php @@ -154,8 +154,7 @@ final class DiffusionRepositoryController extends DiffusionController { $limit = 15; $branch_query = DiffusionBranchQuery::newFromDiffusionRequest($drequest); - // we add 2 here, because of removed HEAD branch - $branch_query->setLimit($limit + 2); + $branch_query->setLimit($limit + 1); $branches = $branch_query->loadBranches(); if (!$branches) { @@ -182,20 +181,20 @@ final class DiffusionRepositoryController extends DiffusionController { $panel->setHeader('Branches'); if ($more_branches) { - $panel->setCaption('Showing the ' . $limit . ' most recent branches.'); + $panel->setCaption('Showing ' . $limit . ' branches.'); } $panel->addButton( - phutil_render_tag( - 'a', + phutil_render_tag( + 'a', + array( + 'href' => $drequest->generateURI( array( - 'href' => $drequest->generateURI( - array( - 'action' => 'branches', - )), - 'class' => 'grey button', - ), - "Show All Branches \xC2\xBB")); + 'action' => 'branches', + )), + 'class' => 'grey button', + ), + "Show All Branches \xC2\xBB")); $panel->appendChild($table); diff --git a/src/applications/diffusion/query/branch/git/DiffusionGitBranchQuery.php b/src/applications/diffusion/query/branch/git/DiffusionGitBranchQuery.php index 34fb8f9e64..4be88bb28b 100644 --- a/src/applications/diffusion/query/branch/git/DiffusionGitBranchQuery.php +++ b/src/applications/diffusion/query/branch/git/DiffusionGitBranchQuery.php @@ -21,7 +21,10 @@ final class DiffusionGitBranchQuery extends DiffusionBranchQuery { protected function executeQuery() { $drequest = $this->getRequest(); $repository = $drequest->getRepository(); - $count = $this->getOffset() + $this->getLimit(); + + // We need to add 1 in case we pick up HEAD. + + $count = $this->getOffset() + $this->getLimit() + 1; list($stdout) = $repository->execxLocalCommand( 'for-each-ref %C --sort=-creatordate --format=%s refs/remotes', @@ -50,6 +53,13 @@ final class DiffusionGitBranchQuery extends DiffusionBranchQuery { $branches = array_slice($branches, $offset); } + // We might have too many even after offset slicing, if there was no HEAD + // for some reason. + $limit = $this->getLimit(); + if ($limit) { + $branches = array_slice($branches, 0, $limit); + } + return $branches; } diff --git a/src/applications/diffusion/query/branch/mercurial/DiffusionMercurialBranchQuery.php b/src/applications/diffusion/query/branch/mercurial/DiffusionMercurialBranchQuery.php index 1e058e8b56..750c6a3e2a 100644 --- a/src/applications/diffusion/query/branch/mercurial/DiffusionMercurialBranchQuery.php +++ b/src/applications/diffusion/query/branch/mercurial/DiffusionMercurialBranchQuery.php @@ -1,7 +1,7 @@ getRepository(); list($stdout) = $repository->execxLocalCommand( - 'branches'); + '--debug branches'); $branch_info = ArcanistMercurialParser::parseMercurialBranches($stdout); $branches = array(); @@ -34,6 +34,14 @@ final class DiffusionMercurialBranchQuery extends DiffusionBranchQuery { $branches[] = $branch; } + if ($this->getOffset()) { + $branches = array_slice($branches, $this->getOffset()); + } + + if ($this->getLimit()) { + $branches = array_slice($branches, 0, $this->getLimit()); + } + return $branches; }