mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 08:47:12 +03:00
cddc80fd98
Summary: Most of our internal extensions don't have any docstringa causing hg help to show nothing. I think this is confusing, as we teach people to use hg help. In particular for our extensions they won't find anything on the internet but hg help won't help either. So let's add rudimentary help texts. Also ensure that gitnode is properly documented in hg help revset. Test Plan: added extensions, checked hg help and hg help extension. Also checked hg help revset for gitnode. Reviewers: rmcelroy, durham, sid0, akushner Differential Revision: https://phabricator.fb.com/D1645964
68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
# gitrevset.py
|
|
#
|
|
# Copyright 2014 Facebook, Inc.
|
|
"""FBONLY: map a git hash to a Mercurial hash:
|
|
|
|
$ hg log -r 'gitnode($HASH)'
|
|
$ hg id -r 'gitnode($HASH)'
|
|
|
|
shortversion:
|
|
|
|
$ hg log -r 'g$HASH'
|
|
$ hg id -r 'g$HASH'
|
|
|
|
"""
|
|
from mercurial import extensions
|
|
from mercurial import hg
|
|
from mercurial import templatekw
|
|
from mercurial import revset
|
|
from mercurial.i18n import _
|
|
import re
|
|
|
|
githashre = re.compile('g([0-9a-fA-F]{40,40})')
|
|
|
|
def showgitnode(repo, ctx, templ, **args):
|
|
"""Return the git revision corresponding to a given hg rev"""
|
|
peerpath = repo.ui.expandpath('default')
|
|
|
|
# sshing can cause junk 'remote: ...' output to stdout, so we need to
|
|
# redirect it temporarily so automation can parse the result easily.
|
|
oldfout = repo.ui.fout
|
|
try:
|
|
repo.baseui.fout = repo.ui.ferr
|
|
remoterepo = hg.peer(repo, {}, peerpath)
|
|
remoterev = remoterepo.lookup('_gitlookup_hg_%s' % ctx.hex())
|
|
finally:
|
|
repo.baseui.fout = oldfout
|
|
return remoterev.encode('hex')
|
|
|
|
def gitnode(repo, subset, x):
|
|
"""``gitnode(id)``
|
|
Return the hg revision corresponding to a given git rev."""
|
|
l = revset.getargs(x, 1, 1, _("id requires one argument"))
|
|
n = revset.getstring(l[0], _("id requires a string"))
|
|
peerpath = repo.ui.expandpath('default')
|
|
|
|
# sshing can cause junk 'remote: ...' output to stdout, so we need to
|
|
# redirect it temporarily so automation can parse the result easily.
|
|
oldfout = repo.ui.fout
|
|
try:
|
|
repo.baseui.fout = repo.ui.ferr
|
|
remoterepo = hg.peer(repo, {}, peerpath)
|
|
remoterev = remoterepo.lookup('_gitlookup_git_%s' % n)
|
|
finally:
|
|
repo.baseui.fout = oldfout
|
|
rn = repo[remoterev].rev()
|
|
return subset.filter(lambda r: r == rn)
|
|
|
|
def overridestringset(orig, repo, subset, x):
|
|
m = githashre.match(x)
|
|
if m is not None:
|
|
return gitnode(repo, subset, ('string', m.group(1)))
|
|
return orig(repo, subset, x)
|
|
|
|
def extsetup(ui):
|
|
templatekw.keywords['gitnode'] = showgitnode
|
|
revset.symbols['gitnode'] = gitnode
|
|
extensions.wrapfunction(revset, 'stringset', overridestringset)
|