mirror of
https://github.com/facebook/sapling.git
synced 2024-10-12 17:58:27 +03:00
9dc21f8d0b
Summary: D13853115 adds `edenscm/` to `sys.path` and code still uses `import mercurial`. That has nasty problems if both `import mercurial` and `import edenscm.mercurial` are used, because Python would think `mercurial.foo` and `edenscm.mercurial.foo` are different modules so code like `try: ... except mercurial.error.Foo: ...`, or `isinstance(x, mercurial.foo.Bar)` would fail to handle the `edenscm.mercurial` version. There are also some module-level states (ex. `extensions._extensions`) that would cause trouble if they have multiple versions in a single process. Change imports to use the `edenscm` so ideally the `mercurial` is no longer imported at all. Add checks in extensions.py to catch unexpected extensions importing modules from the old (wrong) locations when running tests. Reviewed By: phillco Differential Revision: D13868981 fbshipit-source-id: f4e2513766957fd81d85407994f7521a08e4de48
66 lines
2.0 KiB
Python
66 lines
2.0 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.
|
|
|
|
import re
|
|
|
|
from edenscm.mercurial import cmdutil, registrar, templatekw
|
|
from edenscm.mercurial.node import hex
|
|
|
|
from .extlib.phabricator import diffprops
|
|
|
|
|
|
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 ""
|
|
|
|
|
|
@templatekeyword("reviewers")
|
|
def showreviewers(repo, ctx, templ, **args):
|
|
"""String. Return the phabricator diff id for a given hg rev."""
|
|
if ctx.node() is None:
|
|
# working copy - use committemplate.reviewers, which can be found at
|
|
# templ.t.cache.
|
|
props = templ.cache
|
|
reviewersconfig = props.get("reviewers")
|
|
if reviewersconfig:
|
|
return cmdutil.rendertemplate(repo.ui, reviewersconfig, props)
|
|
else:
|
|
return None
|
|
else:
|
|
reviewers = []
|
|
descr = ctx.description()
|
|
match = re.search("Reviewers:(.*)", descr)
|
|
if match:
|
|
reviewers = filter(None, re.split("[\s,]", match.group(1)))
|
|
return templatekw.showlist("reviewer", reviewers, args)
|