Improve low-level branch resolution in Mercurial
Summary:
Ref T7100. Ref T7108. Ref T6160. Several issues:
- High load for mercurial repositories with huge numbers of branches (T7108).
- In Mercurial, we resolve refs individually (one `hg` call per ref).
- Each repository update also updates all refs, which requires resolving all of them.
- For repositories with a huge number of branches,
- We don't distinguish between closed branches (a Mercurial-only concept) and open branches (T6160).
- In Git, when a branch is merged, it ceases to exist.
- In Mercurial, when a branch is merged, it still exists, it's just "closed". Normally, no one cares about these branches.
- In the low-level query, correctly identify which refs we resolve as branches.
- In the low-level query, correctly mark closed branches as closed.
- This marginally improves ref handling in general (see T7100).
Test Plan:
{F384366}
{F384367}
Reviewers: btrahan
Reviewed By: btrahan
Subscribers: epriestley
Maniphest Tasks: T6160, T7108, T7100
Differential Revision: https://secure.phabricator.com/D12548
This commit is contained in:
@@ -66,18 +66,32 @@ final class DiffusionRefTableController extends DiffusionController {
|
||||
$type = idx($cache, 'type');
|
||||
}
|
||||
|
||||
$identifier = idx($vcs, 'identifier');
|
||||
if ($identifier !== null) {
|
||||
$identifier = DiffusionView::linkCommit(
|
||||
$hash = idx($vcs, 'identifier');
|
||||
if ($hash !== null) {
|
||||
$hash = DiffusionView::linkCommit(
|
||||
$repository,
|
||||
$identifier);
|
||||
$hash);
|
||||
}
|
||||
|
||||
$cache_identifier = idx($cache, 'identifier');
|
||||
if ($cache_identifier !== null) {
|
||||
$cache_identifier = DiffusionView::linkCommit(
|
||||
$cached_hash = idx($cache, 'identifier');
|
||||
if ($cached_hash !== null) {
|
||||
$cache_hash = DiffusionView::linkCommit(
|
||||
$repository,
|
||||
$cache_identifier);
|
||||
$cached_hash);
|
||||
}
|
||||
|
||||
$closed = idx($vcs, 'closed', false);
|
||||
if (!$vcs) {
|
||||
$state = null;
|
||||
} else {
|
||||
$state = $closed ? pht('Closed') : pht('Open');
|
||||
}
|
||||
|
||||
$cached_closed = idx($cache, 'closed', false);
|
||||
if (!$cache) {
|
||||
$cached_state = null;
|
||||
} else {
|
||||
$cached_state = $cached_closed ? pht('Closed') : pht('Open');
|
||||
}
|
||||
|
||||
$alternate = idx($vcs, 'alternate');
|
||||
@@ -90,8 +104,10 @@ final class DiffusionRefTableController extends DiffusionController {
|
||||
$rows[] = array(
|
||||
$ref,
|
||||
$type,
|
||||
$identifier,
|
||||
$cache_identifier,
|
||||
$hash,
|
||||
$cached_hash,
|
||||
$state,
|
||||
$cached_state,
|
||||
$alternate,
|
||||
);
|
||||
}
|
||||
@@ -102,8 +118,10 @@ final class DiffusionRefTableController extends DiffusionController {
|
||||
array(
|
||||
pht('Ref'),
|
||||
pht('Type'),
|
||||
pht('Identifier'),
|
||||
pht('Cached'),
|
||||
pht('Hash'),
|
||||
pht('Cached Hash'),
|
||||
pht('State'),
|
||||
pht('Cached State'),
|
||||
pht('Alternate'),
|
||||
));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user