Show first 10 branches, then "More Branches" for commits on huge numbers of branches
Summary: Fixes T9562. We already do this for tags, but didn't have similar logic for branches. Implement that logic. Test Plan: - Set limit to 1, saw "More branches", clicked it, got the correct results. - Verified that branch table with no specified commit still works properly. Reviewers: chad Reviewed By: chad Maniphest Tasks: T9562 Differential Revision: https://secure.phabricator.com/D15284
This commit is contained in:
		@@ -19,13 +19,19 @@ final class DiffusionBranchTableController extends DiffusionController {
 | 
			
		||||
    $pager = id(new PHUIPagerView())
 | 
			
		||||
      ->readFromRequest($request);
 | 
			
		||||
 | 
			
		||||
    // TODO: Add support for branches that contain commit
 | 
			
		||||
    $params = array(
 | 
			
		||||
      'offset' => $pager->getOffset(),
 | 
			
		||||
      'limit' => $pager->getPageSize() + 1,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    $contains = $drequest->getSymbolicCommit();
 | 
			
		||||
    if (strlen($contains)) {
 | 
			
		||||
      $params['contains'] = $contains;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $branches = $this->callConduitWithDiffusionRequest(
 | 
			
		||||
      'diffusion.branchquery',
 | 
			
		||||
      array(
 | 
			
		||||
        'offset' => $pager->getOffset(),
 | 
			
		||||
        'limit' => $pager->getPageSize() + 1,
 | 
			
		||||
      ));
 | 
			
		||||
      $params);
 | 
			
		||||
    $branches = $pager->sliceResults($branches);
 | 
			
		||||
 | 
			
		||||
    $branches = DiffusionRepositoryRef::loadAllFromDictionaries($branches);
 | 
			
		||||
 
 | 
			
		||||
@@ -15,20 +15,18 @@ final class DiffusionCommitBranchesController extends DiffusionController {
 | 
			
		||||
    $drequest = $this->getDiffusionRequest();
 | 
			
		||||
    $repository = $drequest->getRepository();
 | 
			
		||||
 | 
			
		||||
    switch ($repository->getVersionControlSystem()) {
 | 
			
		||||
      case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
 | 
			
		||||
        $branches = array();
 | 
			
		||||
        break;
 | 
			
		||||
      default:
 | 
			
		||||
        $branches = $this->callConduitWithDiffusionRequest(
 | 
			
		||||
          'diffusion.branchquery',
 | 
			
		||||
          array(
 | 
			
		||||
            'contains' => $drequest->getCommit(),
 | 
			
		||||
          ));
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    $branch_limit = 10;
 | 
			
		||||
    $branches = DiffusionRepositoryRef::loadAllFromDictionaries(
 | 
			
		||||
      $this->callConduitWithDiffusionRequest(
 | 
			
		||||
        'diffusion.branchquery',
 | 
			
		||||
        array(
 | 
			
		||||
          'contains' => $drequest->getCommit(),
 | 
			
		||||
          'limit' => $branch_limit + 1,
 | 
			
		||||
        )));
 | 
			
		||||
 | 
			
		||||
    $has_more_branches = (count($branches) > $branch_limit);
 | 
			
		||||
    $branches = array_slice($branches, 0, $branch_limit);
 | 
			
		||||
 | 
			
		||||
    $branches = DiffusionRepositoryRef::loadAllFromDictionaries($branches);
 | 
			
		||||
    $branch_links = array();
 | 
			
		||||
    foreach ($branches as $branch) {
 | 
			
		||||
      $branch_links[] = phutil_tag(
 | 
			
		||||
@@ -43,6 +41,18 @@ final class DiffusionCommitBranchesController extends DiffusionController {
 | 
			
		||||
        $branch->getShortName());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ($has_more_branches) {
 | 
			
		||||
      $branch_links[] = phutil_tag(
 | 
			
		||||
        'a',
 | 
			
		||||
        array(
 | 
			
		||||
          'href' => $drequest->generateURI(
 | 
			
		||||
            array(
 | 
			
		||||
              'action'  => 'branches',
 | 
			
		||||
            )),
 | 
			
		||||
        ),
 | 
			
		||||
        pht("More Branches\xE2\x80\xA6"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return id(new AphrontAjaxResponse())
 | 
			
		||||
      ->setContent($branch_links ? implode(', ', $branch_links) : pht('None'));
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -16,20 +16,14 @@ final class DiffusionCommitTagsController extends DiffusionController {
 | 
			
		||||
    $repository = $drequest->getRepository();
 | 
			
		||||
 | 
			
		||||
    $tag_limit = 10;
 | 
			
		||||
    switch ($repository->getVersionControlSystem()) {
 | 
			
		||||
      case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
 | 
			
		||||
        $tags = array();
 | 
			
		||||
        break;
 | 
			
		||||
      default:
 | 
			
		||||
        $tags = DiffusionRepositoryTag::newFromConduit(
 | 
			
		||||
          $this->callConduitWithDiffusionRequest(
 | 
			
		||||
            'diffusion.tagsquery',
 | 
			
		||||
            array(
 | 
			
		||||
              'commit' => $drequest->getCommit(),
 | 
			
		||||
              'limit' => $tag_limit + 1,
 | 
			
		||||
            )));
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    $tags = DiffusionRepositoryTag::newFromConduit(
 | 
			
		||||
      $this->callConduitWithDiffusionRequest(
 | 
			
		||||
        'diffusion.tagsquery',
 | 
			
		||||
        array(
 | 
			
		||||
          'commit' => $drequest->getCommit(),
 | 
			
		||||
          'limit' => $tag_limit + 1,
 | 
			
		||||
        )));
 | 
			
		||||
 | 
			
		||||
    $has_more_tags = (count($tags) > $tag_limit);
 | 
			
		||||
    $tags = array_slice($tags, 0, $tag_limit);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user