sapling/hgext/phabdiff.py
Phil Cohen 45c4a072f9 hgext: use relative imports wherever possible
Summary:
Port of D6798134 to fbsource. It eliminates module-import failures as well as errors like this:

```
mercurial.error.ForeignImportError: hgext.extlib.treedirstate: /home/phillco/.local/lib/python2.7/site-packages/hgext/extlib/treedirstate.so lives outside /..../hg
```

....that block other tests, like test-help.t

(Note: this ignores all push blocking failures!)

Reviewed By: quark-zju

Differential Revision: D6799259

fbshipit-source-id: b77d1b565dbf52165e0847002be498648658e064
2018-04-13 21:50:56 -07:00

39 lines
1.2 KiB
Python

# phabdiff.py
#
# Copyright 2013 Facebook, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from mercurial import registrar, templatekw
from mercurial.node import hex
from .extlib.phabricator import diffprops
import re
templatekeyword = registrar.templatekeyword()
@templatekeyword('phabdiff')
def showphabdiff(repo, ctx, templ, **args):
"""String. Return the phabricator diff id for a given hg rev."""
descr = ctx.description()
revision = diffprops.parserevfromcommitmsg(descr)
return 'D' + revision if revision else ''
@templatekeyword('tasks')
def showtasks(**args):
"""String. Return the tasks associated with given hg rev."""
tasks = []
descr = args['ctx'].description()
match = re.search('(Tasks?|Task ID):(.*)', descr)
if match:
tasks = re.findall('\d+', match.group(0))
return templatekw.showlist('task', tasks, args)
@templatekeyword('singlepublicbase')
def singlepublicbase(repo, ctx, templ, **args):
"""String. Return the public base commit hash."""
base = repo.revs('last(::%d - not public())', ctx.rev())
if len(base):
return hex(repo[base.first()].node())
return ""