1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-11-21 22:32:41 +01:00

Use a "branchmap" call to identify remote branches in "arc-hg"

Summary:
Ref T9948. Ref T13546. To identify remote branch heads -- not just modified heads -- use "branchmap" like "hg outgoing" does.

I wasn't able to find any other way to get what we want: for example, with a bundlerepo, "peer.heads()" and "peer.changelog.heads()" include local branches which are not present in the remote.

It generally seems difficult (perhaps impossible?) to distinguish between these cases by using "getremotechanges()":

  - branch X exists at position Y in both the local and remote;
  - branch X exists at positino Y in the local, but not the remote.

In any case, this seems to work properly and //should// do less work than "getremotechanges()" since we don't need to pull as much data over the wire.

Test Plan: Ran "hg arc-ls-markers" in various repositories, got what appeared to be a faithful representation of the remote branch and bookmark state.

Maniphest Tasks: T13546, T9948

Differential Revision: https://secure.phabricator.com/D21349
This commit is contained in:
epriestley 2020-06-10 15:30:51 -07:00
parent 488a24c40a
commit 86951ad067

View file

@ -159,21 +159,16 @@ def remotemarkers(ui, repo, source, opts):
source, branches = hg.parseurl(ui.expandpath(source))
remote = hg.peer(repo, opts, source)
bundle, remotebranches, cleanup = bundlerepo.getremotechanges(
ui,
repo,
remote)
with remote.commandexecutor() as e:
branchmap = e.callcommand('branchmap', {}).result()
try:
for n in remotebranches:
ctx = bundle[n]
for branch_name in branchmap:
for branch_node in branchmap[branch_name]:
markers.append({
'type': 'branch',
'name': ctx.branch(),
'node': node.hex(ctx.node()),
'name': branch_name,
'node': node.hex(branch_node),
})
finally:
cleanup()
with remote.commandexecutor() as e:
remotemarks = bookmarks.unhexlifybookmarks(e.callcommand('listkeys', {