narrowtemplates.py
52 lines
| 1.5 KiB
| text/x-python
|
PythonLexer
Augie Fackler
|
r36096 | # narrowtemplates.py - added template keywords for narrow clones | ||
# | ||||
# Copyright 2017 Google, Inc. | ||||
# | ||||
# This software may be used and distributed according to the terms of the | ||||
# GNU General Public License version 2 or any later version. | ||||
Matt Harbison
|
r52756 | from __future__ import annotations | ||
Augie Fackler
|
r36096 | |||
from mercurial import ( | ||||
Augie Fackler
|
r36108 | registrar, | ||
Augie Fackler
|
r36107 | revlog, | ||
Augie Fackler
|
r36096 | ) | ||
Augie Fackler
|
r36108 | keywords = {} | ||
templatekeyword = registrar.templatekeyword(keywords) | ||||
revsetpredicate = registrar.revsetpredicate() | ||||
Augie Fackler
|
r43346 | |||
Augie Fackler
|
r36096 | def _isellipsis(repo, rev): | ||
Augie Fackler
|
r36107 | if repo.changelog.flags(rev) & revlog.REVIDX_ELLIPSIS: | ||
Augie Fackler
|
r36096 | return True | ||
return False | ||||
Augie Fackler
|
r43346 | |||
Augie Fackler
|
r43347 | @templatekeyword(b'ellipsis', requires={b'repo', b'ctx'}) | ||
Yuya Nishihara
|
r36531 | def ellipsis(context, mapping): | ||
Yuya Nishihara
|
r36457 | """String. 'ellipsis' if the change is an ellipsis node, else ''.""" | ||
Augie Fackler
|
r43347 | repo = context.resource(mapping, b'repo') | ||
ctx = context.resource(mapping, b'ctx') | ||||
Augie Fackler
|
r36096 | if _isellipsis(repo, ctx.rev()): | ||
Augie Fackler
|
r43347 | return b'ellipsis' | ||
return b'' | ||||
Augie Fackler
|
r36096 | |||
Augie Fackler
|
r43346 | |||
Augie Fackler
|
r43347 | @templatekeyword(b'outsidenarrow', requires={b'repo', b'ctx'}) | ||
Yuya Nishihara
|
r36531 | def outsidenarrow(context, mapping): | ||
Yuya Nishihara
|
r36457 | """String. 'outsidenarrow' if the change affects no tracked files, | ||
else ''.""" | ||||
Augie Fackler
|
r43347 | repo = context.resource(mapping, b'repo') | ||
ctx = context.resource(mapping, b'ctx') | ||||
Martin von Zweigbergk
|
r36490 | m = repo.narrowmatch() | ||
Danny Hooper
|
r42550 | if ctx.files() and not m.always(): | ||
Augie Fackler
|
r36096 | if not any(m(f) for f in ctx.files()): | ||
Augie Fackler
|
r43347 | return b'outsidenarrow' | ||
return b'' | ||||
Augie Fackler
|
r36096 | |||
Augie Fackler
|
r43346 | |||
Augie Fackler
|
r43347 | @revsetpredicate(b'ellipsis()') | ||
Augie Fackler
|
r36096 | def ellipsisrevset(repo, subset, x): | ||
Yuya Nishihara
|
r36457 | """Changesets that are ellipsis nodes.""" | ||
Augie Fackler
|
r36096 | return subset.filter(lambda r: _isellipsis(repo, r)) | ||