2015-02-18 06:02:09 +03:00
|
|
|
# gitrevset.py
|
2014-10-29 09:06:11 +03:00
|
|
|
#
|
|
|
|
# Copyright 2014 Facebook, Inc.
|
2015-03-08 22:22:25 +03:00
|
|
|
"""map a git hash to a Mercurial hash:
|
2014-10-29 09:06:11 +03:00
|
|
|
|
2018-01-09 14:44:33 +03:00
|
|
|
$ hg log -r "gitnode($HASH)"
|
|
|
|
$ hg id -r "gitnode($HASH)"
|
2014-10-29 09:06:11 +03:00
|
|
|
|
2018-01-09 14:44:33 +03:00
|
|
|
short version:
|
2014-10-29 09:06:11 +03:00
|
|
|
|
2018-01-09 14:44:33 +03:00
|
|
|
$ hg log -r "g$HASH"
|
|
|
|
$ hg id -r "g$HASH"
|
2014-10-29 09:06:11 +03:00
|
|
|
|
|
|
|
"""
|
2017-08-30 23:17:20 +03:00
|
|
|
|
|
|
|
from __future__ import absolute_import
|
|
|
|
|
2014-09-23 05:58:36 +04:00
|
|
|
import re
|
|
|
|
|
2018-09-18 02:59:24 +03:00
|
|
|
from mercurial import error, extensions, hg, namespaces, registrar, revset
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
from mercurial.i18n import _
|
|
|
|
|
|
|
|
|
2018-09-18 02:59:24 +03:00
|
|
|
namespacepredicate = registrar.namespacepredicate()
|
2017-08-30 23:17:20 +03:00
|
|
|
revsetpredicate = registrar.revsetpredicate()
|
|
|
|
|
2018-09-18 02:59:24 +03:00
|
|
|
githashre = re.compile("g([0-9a-fA-F]{40})")
|
2014-09-09 02:36:12 +04:00
|
|
|
|
templates: fix help messages for template keywords
Summary:
Many of the template keywords in our extensions were being registered
incorrectly, causing their help output to be rendered incorrectly in the
"hg help templates" output. The ones in smartlog.py were particularly bad, as
most of them showed only their description, without displaying the name of the
template. In smartlog.py only singlepublicsuccessor was being displayed
correctly, because it's docstring explicitly included it's own name at the
start.
This fixes all of our extensions to consistently use the
registrar.templatekeyword() decorator to register the keywords. This decorator
automatically prefixes the help message with the keyword name. The
mercurial/extensions.py code will explicitly check to see if an extension
contains an "templatekeyword" attribute, and if so it will register any
keywords contained in this registry after calling extsetup().
Test Plan:
Added new unit tests to check the output of "hg help templates" for the
affected keywords.
Reviewers: #sourcecontrol, kulshrax, ikostia, rmcelroy
Reviewed By: rmcelroy
Subscribers: rmcelroy, net-systems-diffs@, yogeshwer, mjpieters
Differential Revision: https://phabricator.intern.facebook.com/D4427729
Signature: t1:4427729:1484831476:17b478a5e867dfc3f85402588c381bf8b1831107
2017-01-19 23:52:54 +03:00
|
|
|
templatekeyword = registrar.templatekeyword()
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
templates: fix help messages for template keywords
Summary:
Many of the template keywords in our extensions were being registered
incorrectly, causing their help output to be rendered incorrectly in the
"hg help templates" output. The ones in smartlog.py were particularly bad, as
most of them showed only their description, without displaying the name of the
template. In smartlog.py only singlepublicsuccessor was being displayed
correctly, because it's docstring explicitly included it's own name at the
start.
This fixes all of our extensions to consistently use the
registrar.templatekeyword() decorator to register the keywords. This decorator
automatically prefixes the help message with the keyword name. The
mercurial/extensions.py code will explicitly check to see if an extension
contains an "templatekeyword" attribute, and if so it will register any
keywords contained in this registry after calling extsetup().
Test Plan:
Added new unit tests to check the output of "hg help templates" for the
affected keywords.
Reviewers: #sourcecontrol, kulshrax, ikostia, rmcelroy
Reviewed By: rmcelroy
Subscribers: rmcelroy, net-systems-diffs@, yogeshwer, mjpieters
Differential Revision: https://phabricator.intern.facebook.com/D4427729
Signature: t1:4427729:1484831476:17b478a5e867dfc3f85402588c381bf8b1831107
2017-01-19 23:52:54 +03:00
|
|
|
@templatekeyword("gitnode")
|
2014-09-09 02:36:12 +04:00
|
|
|
def showgitnode(repo, ctx, templ, **args):
|
|
|
|
"""Return the git revision corresponding to a given hg rev"""
|
2018-08-15 21:53:39 +03:00
|
|
|
binnode = _lookup_node(repo, ctx.hex(), from_scm_type="hg")
|
2017-03-29 17:13:41 +03:00
|
|
|
# templates are expected to return an empty string when no
|
|
|
|
# data exists
|
2018-08-15 21:53:39 +03:00
|
|
|
return binnode.encode("hex") if binnode else ""
|
2014-09-09 02:36:12 +04:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
|
|
|
@revsetpredicate("gitnode(id)")
|
2014-09-09 02:36:12 +04:00
|
|
|
def gitnode(repo, subset, x):
|
2014-10-29 09:06:11 +03:00
|
|
|
"""``gitnode(id)``
|
|
|
|
Return the hg revision corresponding to a given git rev."""
|
2014-09-09 02:36:12 +04:00
|
|
|
l = revset.getargs(x, 1, 1, _("id requires one argument"))
|
|
|
|
n = revset.getstring(l[0], _("id requires a string"))
|
2014-10-09 03:48:59 +04:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
hexhgnode = _lookup_node(repo, n, from_scm_type="git")
|
2017-03-29 17:13:41 +03:00
|
|
|
if not hexhgnode:
|
|
|
|
raise error.RepoLookupError(_("unknown revision '%s'") % n)
|
|
|
|
|
|
|
|
rev = repo[hexhgnode].rev()
|
|
|
|
return subset.filter(lambda r: r == rev)
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2017-03-29 17:13:41 +03:00
|
|
|
def _lookup_node(repo, hexnode, from_scm_type):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
gitlookupnode = "_gitlookup_%s_%s" % (from_scm_type, hexnode)
|
2017-03-29 17:13:41 +03:00
|
|
|
|
|
|
|
# ui.expandpath('default') returns 'default' if there is no default
|
|
|
|
# path. This can be the case when command is ran on the server.
|
|
|
|
# In that case let's run lookup() command locally.
|
2015-02-17 21:44:26 +03:00
|
|
|
try:
|
2018-08-15 21:53:39 +03:00
|
|
|
result = repo.lookup(gitlookupnode)
|
2017-03-29 17:13:41 +03:00
|
|
|
except error.RepoLookupError:
|
|
|
|
# Note: RepoLookupError is caught here because repo.lookup()
|
|
|
|
# can throw only this exception.
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
peerpath = repo.ui.expandpath("default")
|
2017-03-29 17:13:41 +03:00
|
|
|
|
|
|
|
# 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)
|
2018-08-15 21:53:39 +03:00
|
|
|
result = remoterepo.lookup(gitlookupnode)
|
2017-03-29 17:13:41 +03:00
|
|
|
except error.RepoError:
|
|
|
|
# Note: RepoError can be thrown by hg.peer(), RepoLookupError
|
|
|
|
# can be thrown by remoterepo.lookup(). RepoLookupError is a
|
|
|
|
# subclass of RepoError so catching just error.RepoError is enough.
|
|
|
|
return None
|
|
|
|
finally:
|
|
|
|
repo.baseui.fout = oldfout
|
2014-09-09 02:36:12 +04:00
|
|
|
|
2018-08-15 21:53:39 +03:00
|
|
|
# Sanity check - result must be 20 chars
|
|
|
|
if len(result) != 20:
|
|
|
|
return None
|
|
|
|
else:
|
|
|
|
return result
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2018-09-24 22:16:56 +03:00
|
|
|
@namespacepredicate("gitrev", priority=75)
|
2018-09-18 02:59:24 +03:00
|
|
|
def _getnamespace(_repo):
|
|
|
|
return namespaces.namespace(
|
|
|
|
listnames=lambda repo: [], namemap=_gitlookup, nodemap=lambda repo, node: []
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def _gitlookup(repo, gitrev):
|
|
|
|
cl = repo.changelog
|
|
|
|
tonode = cl.node
|
2014-09-23 05:58:36 +04:00
|
|
|
|
2018-09-18 02:59:24 +03:00
|
|
|
def _gittohg(githash):
|
2018-09-26 02:44:21 +03:00
|
|
|
return [tonode(rev) for rev in repo.revs("gitnode(%s)" % githash)]
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2018-09-18 02:59:24 +03:00
|
|
|
m = githashre.match(gitrev)
|
|
|
|
if m is not None:
|
|
|
|
return _gittohg(m.group(1))
|
|
|
|
else:
|
|
|
|
return []
|