1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-11-22 06:42: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)) source, branches = hg.parseurl(ui.expandpath(source))
remote = hg.peer(repo, opts, source) remote = hg.peer(repo, opts, source)
bundle, remotebranches, cleanup = bundlerepo.getremotechanges( with remote.commandexecutor() as e:
ui, branchmap = e.callcommand('branchmap', {}).result()
repo,
remote)
try: for branch_name in branchmap:
for n in remotebranches: for branch_node in branchmap[branch_name]:
ctx = bundle[n]
markers.append({ markers.append({
'type': 'branch', 'type': 'branch',
'name': ctx.branch(), 'name': branch_name,
'node': node.hex(ctx.node()), 'node': node.hex(branch_node),
}) })
finally:
cleanup()
with remote.commandexecutor() as e: with remote.commandexecutor() as e:
remotemarks = bookmarks.unhexlifybookmarks(e.callcommand('listkeys', { remotemarks = bookmarks.unhexlifybookmarks(e.callcommand('listkeys', {