sapling/gitrevset.py
Siddharth Agarwal db408787ea [gitrevset] also support stringsets
Summary: Allow git hashes to work with a `g` suffix, sort of like Subversion's `r`.

Test Plan: Ran the tests, and tested it out in fbandroid-hg.

Reviewers: davidsp, akushner, pyd, durham

Reviewed By: durham

Differential Revision: https://phabricator.fb.com/D1571258
2014-09-22 18:58:36 -07:00

37 lines
1.3 KiB
Python

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')
remoterepo = hg.peer(repo, {}, peerpath)
remoterev = remoterepo.lookup('_gitlookup_hg_%s' % ctx.hex())
return remoterev.encode('hex')
def gitnode(repo, subset, x):
"""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')
remoterepo = hg.peer(repo, {}, peerpath)
remoterev = remoterepo.lookup('_gitlookup_git_%s' % n)
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)