Changeset View
Changeset View
Standalone View
Standalone View
support/hg/arc-hg.py
- This file was added.
from __future__ import absolute_import | |||||
import os | |||||
import json | |||||
from mercurial import ( | |||||
cmdutil, | |||||
bookmarks, | |||||
bundlerepo, | |||||
error, | |||||
hg, | |||||
i18n, | |||||
node, | |||||
registrar, | |||||
) | |||||
_ = i18n._ | |||||
cmdtable = {} | |||||
command = registrar.command(cmdtable) | |||||
@command( | |||||
"arc-ls-remote", | |||||
[('', 'output', '', | |||||
_('file to output refs to'), _('FILE')), | |||||
] + cmdutil.remoteopts, | |||||
_('[--output FILENAME] [SOURCE]')) | |||||
def lsremote(ui, repo, source="default", **opts): | |||||
"""list markers in a remote | |||||
Show the current branch heads and bookmarks in a specified path/URL or the | |||||
default pull location. | |||||
Markers are printed to stdout in JSON. | |||||
(This is an Arcanist extension to Mercurial.) | |||||
Returns 0 if listing the markers succeeds, 1 otherwise. | |||||
""" | |||||
# Disable status output from fetching a remote. | |||||
ui.quiet = True | |||||
source, branches = hg.parseurl(ui.expandpath(source)) | |||||
remote = hg.peer(repo, opts, source) | |||||
markers = [] | |||||
bundle, remotebranches, cleanup = bundlerepo.getremotechanges( | |||||
ui, | |||||
repo, | |||||
remote) | |||||
try: | |||||
for n in remotebranches: | |||||
ctx = bundle[n] | |||||
markers.append({ | |||||
'type': 'branch', | |||||
'name': ctx.branch(), | |||||
'node': node.hex(ctx.node()), | |||||
}) | |||||
finally: | |||||
cleanup() | |||||
with remote.commandexecutor() as e: | |||||
remotemarks = bookmarks.unhexlifybookmarks(e.callcommand('listkeys', { | |||||
'namespace': 'bookmarks', | |||||
}).result()) | |||||
for mark in remotemarks: | |||||
markers.append({ | |||||
'type': 'bookmark', | |||||
'name': mark, | |||||
'node': node.hex(remotemarks[mark]), | |||||
}) | |||||
json_opts = { | |||||
'indent': 2, | |||||
'sort_keys': True, | |||||
} | |||||
output_file = opts.get('output') | |||||
if output_file: | |||||
if os.path.exists(output_file): | |||||
raise error.Abort(_('File "%s" already exists.' % output_file)) | |||||
with open(output_file, 'w+') as f: | |||||
json.dump(markers, f, **json_opts) | |||||
else: | |||||
print json.dumps(markers, output_file, **json_opts) | |||||
return 0 |