##// END OF EJS Templates
phase: rename getphaserevs to loadphaserevs...
phase: rename getphaserevs to loadphaserevs This function is: - already loading the data in place, - used once in the code. So we drop the return value and change the name to make this obvious. We keep the function public because we'll have to use it in revset.

File last commit:

r25393:eb52de50 merge default
r25611:d89045a6 default
Show More
templatekw.py
471 lines | 15.9 KiB | text/x-python | PythonLexer
Patrick Mezard
cmdutil: replace showlist() closure with a function
r10053 # templatekw.py - common changeset template keywords
#
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
Matt Mackall
Merge with stable
r10264 # GNU General Public License version 2 or any later version.
Patrick Mezard
cmdutil: replace showlist() closure with a function
r10053
Patrick Mezard
cmdutil: extract repo dependent closures in templatekw
r10055 from node import hex
Matt Mackall
help: consolidate topic hooks in help.py...
r14318 import patch, util, error
"Yann E. MORIN"
templates: add 'bisect' keyword to return a cset's bisect status...
r15155 import hbisect
Patrick Mezard
cmdutil: replace showlist() closure with a function
r10053
Matt Mackall
templating: make new-style templating features work with command line lists
r17631 # This helper class allows us to handle both:
# "{files}" (legacy command-line-specific list hack) and
# "{files % '{file}\n'}" (hgweb-style with inlining and function support)
Yuya Nishihara
templater: implement _hybrid.__contains__ so that ifcontains can accept dict...
r24240 # and to access raw values:
# "{ifcontains(file, files, ...)}", "{ifcontains(key, extras, ...)}"
Yuya Nishihara
templatekw: forward _hybrid.get to raw values so that get(extras, key) works...
r24241 # "{get(extras, key)}"
Matt Mackall
templating: make new-style templating features work with command line lists
r17631
class _hybrid(object):
Yuya Nishihara
templatekw: keep raw list or dict in _hybrid object...
r24239 def __init__(self, gen, values, makemap, joinfmt=None):
Matt Mackall
templating: make new-style templating features work with command line lists
r17631 self.gen = gen
self.values = values
Yuya Nishihara
templatekw: keep raw list or dict in _hybrid object...
r24239 self._makemap = makemap
Matt Mackall
templatekw: add default styles for hybrid types (issue3887)...
r18970 if joinfmt:
self.joinfmt = joinfmt
else:
self.joinfmt = lambda x: x.values()[0]
Matt Mackall
templating: make new-style templating features work with command line lists
r17631 def __iter__(self):
return self.gen
def __call__(self):
Yuya Nishihara
templatekw: keep raw list or dict in _hybrid object...
r24239 makemap = self._makemap
Matt Mackall
templating: make new-style templating features work with command line lists
r17631 for x in self.values:
Yuya Nishihara
templatekw: keep raw list or dict in _hybrid object...
r24239 yield makemap(x)
Yuya Nishihara
templater: implement _hybrid.__contains__ so that ifcontains can accept dict...
r24240 def __contains__(self, x):
return x in self.values
Anton Shestakov
templater: implement __len__ for _hybrid...
r22393 def __len__(self):
return len(self.values)
Yuya Nishihara
templatekw: forward _hybrid.get to raw values so that get(extras, key) works...
r24241 def __getattr__(self, name):
if name != 'get':
raise AttributeError(name)
return getattr(self.values, name)
Matt Mackall
templating: make new-style templating features work with command line lists
r17631
def showlist(name, values, plural=None, element=None, **args):
if not element:
element = name
f = _showlist(name, values, plural, **args)
Yuya Nishihara
templatekw: keep raw list or dict in _hybrid object...
r24239 return _hybrid(f, values, lambda x: {element: x})
Matt Mackall
templating: make new-style templating features work with command line lists
r17631
def _showlist(name, values, plural=None, **args):
Patrick Mezard
cmdutil: replace showlist() closure with a function
r10053 '''expand set of values.
name is name of key in template map.
values is list of strings or dicts.
plural is plural of name, if not simply name + 's'.
expansion works like this, given name 'foo'.
if values is empty, expand 'no_foos'.
if 'foo' not in template map, return values as a string,
joined by space.
expand 'start_foos'.
for each value, expand 'foo'. if 'last_foo' in template
map, expand it instead of 'foo' for last key.
expand 'end_foos'.
'''
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 templ = args['templ']
Matt Mackall
many, many trivial check-code fixups
r10282 if plural:
names = plural
Patrick Mezard
cmdutil: replace showlist() closure with a function
r10053 else: names = name + 's'
if not values:
noname = 'no_' + names
if noname in templ:
yield templ(noname, **args)
return
if name not in templ:
if isinstance(values[0], str):
yield ' '.join(values)
else:
for v in values:
yield dict(v, **args)
return
startname = 'start_' + names
if startname in templ:
yield templ(startname, **args)
vargs = args.copy()
def one(v, tag=name):
try:
vargs.update(v)
except (AttributeError, ValueError):
try:
for a, b in v:
vargs[a] = b
except ValueError:
vargs[name] = v
return templ(tag, **vargs)
lastname = 'last_' + name
if lastname in templ:
last = values.pop()
else:
last = None
for v in values:
yield one(v)
if last is not None:
yield one(last, tag=lastname)
endname = 'end_' + names
if endname in templ:
yield templ(endname, **args)
Patrick Mezard
cmdutil: extract file changes closures into templatekw
r10056 def getfiles(repo, ctx, revcache):
if 'files' not in revcache:
FUJIWARA Katsunori
templatekw: compare target context and its parent exactly (issue4690)...
r25392 revcache['files'] = repo.status(ctx.p1(), ctx)[:3]
Patrick Mezard
cmdutil: extract file changes closures into templatekw
r10056 return revcache['files']
Patrick Mezard
cmdutil: extract latest tags closures in templatekw
r10057 def getlatesttags(repo, ctx, cache):
'''return date, distance and name for the latest tag of rev'''
if 'latesttags' not in cache:
# Cache mapping from rev to a tuple with tag date, tag
# distance and tag name
cache['latesttags'] = {-1: (0, 0, 'null')}
latesttags = cache['latesttags']
rev = ctx.rev()
todo = [rev]
while todo:
rev = todo.pop()
if rev in latesttags:
continue
ctx = repo[rev]
Andrew Shadura
templatekw: allow tagtypes other than global in getlatesttags...
r20218 tags = [t for t in ctx.tags()
if (repo.tagtype(t) and repo.tagtype(t) != 'local')]
Patrick Mezard
cmdutil: extract latest tags closures in templatekw
r10057 if tags:
latesttags[rev] = ctx.date()[0], 0, ':'.join(sorted(tags))
continue
try:
# The tuples are laid out so the right one can be found by
# comparison.
pdate, pdist, ptag = max(
latesttags[p.rev()] for p in ctx.parents())
except KeyError:
# Cache miss - recurse
todo.append(rev)
todo.extend(p.rev() for p in ctx.parents())
continue
latesttags[rev] = pdate, pdist + 1, ptag
return latesttags[rev]
Patrick Mezard
templatekw: change {file_copies} behaviour, add {file_copies_switch}...
r10060 def getrenamedfn(repo, endrev=None):
rcache = {}
if endrev is None:
endrev = len(repo)
def getrenamed(fn, rev):
'''looks up all renames for a file (up to endrev) the first
time the file is given. It indexes on the changerev and only
parses the manifest if linkrev != changerev.
Returns rename info for fn at changerev rev.'''
if fn not in rcache:
rcache[fn] = {}
fl = repo.file(fn)
for i in fl:
lr = fl.linkrev(i)
renamed = fl.renamed(fl.node(i))
rcache[fn][lr] = renamed
if lr >= endrev:
break
if rev in rcache[fn]:
return rcache[fn][rev]
# If linkrev != rev (i.e. rev not found in rcache) fallback to
# filectx logic.
try:
return repo[rev][fn].renamed()
except error.LookupError:
return None
return getrenamed
Patrick Mezard
cmdutil: extract repo dependent closures in templatekw
r10055 def showauthor(repo, ctx, templ, **args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:author: String. The unmodified author of the changeset."""
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 return ctx.user()
"Yann E. MORIN"
templates: add 'bisect' keyword to return a cset's bisect status...
r15155 def showbisect(repo, ctx, templ, **args):
""":bisect: String. The changeset bisection status."""
return hbisect.label(repo, ctx.node())
Eric Eisner
template: add showbranch template for {branch}...
r13156 def showbranch(**args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:branch: String. The name of the branch on which the changeset was
committed.
"""
Eric Eisner
template: add showbranch template for {branch}...
r13156 return args['ctx'].branch()
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 def showbranches(**args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:branches: List of strings. The name of the branch on which the
changeset was committed. Will be empty if the branch name was
default.
"""
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 branch = args['ctx'].branch()
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 if branch != 'default':
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 return showlist('branch', [branch], plural='branches', **args)
Matt Mackall
templater: makes branches work correctly with stringify (issue4108)
r20076 return showlist('branch', [], plural='branches', **args)
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054
David Soria Parra
templater: add bookmarks to templates and default output...
r13386 def showbookmarks(**args):
Patrick Mezard
templates: document missing keywords or filters...
r13592 """:bookmarks: List of strings. Any bookmarks associated with the
Ryan McElroy
templatekw: introduce active subkeyword from bookmarks keyword...
r25348 changeset. Also sets 'active', the name of the active bookmark.
Patrick Mezard
templates: document missing keywords or filters...
r13592 """
Durham Goode
template: add 'current' to scope during {bookmarks % ...}...
r20520 repo = args['ctx']._repo
David Soria Parra
templater: add bookmarks to templates and default output...
r13386 bookmarks = args['ctx'].bookmarks()
Ryan McElroy
templatekw: introduce active subkeyword from bookmarks keyword...
r25348 active = repo._activebookmark
makemap = lambda v: {'bookmark': v, 'active': active, 'current': active}
Yuya Nishihara
templatekw: inline showlist() into showbookmarks()...
r24156 f = _showlist('bookmark', bookmarks, **args)
Yuya Nishihara
templatekw: keep raw list or dict in _hybrid object...
r24239 return _hybrid(f, bookmarks, makemap, lambda x: x['bookmark'])
David Soria Parra
templater: add bookmarks to templates and default output...
r13386
Jason Harris
templates: 'children' keyword...
r11655 def showchildren(**args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:children: List of strings. The children of the changeset."""
Jason Harris
templates: 'children' keyword...
r11655 ctx = args['ctx']
childrevs = ['%d:%s' % (cctx, cctx) for cctx in ctx.children()]
Matt Mackall
templating: make new-style templating features work with command line lists
r17631 return showlist('children', childrevs, element='child', **args)
Jason Harris
templates: 'children' keyword...
r11655
Ryan McElroy
templatekw: introduce activebookmark keyword...
r25013 # Deprecated, but kept alive for help generation a purpose.
FUJIWARA Katsunori
templatekw: add 'currentbookmark' keyword to show current bookmark easily...
r21896 def showcurrentbookmark(**args):
""":currentbookmark: String. The active bookmark, if it is
Ryan McElroy
templatekw: introduce activebookmark keyword...
r25013 associated with the changeset (DEPRECATED)"""
return showactivebookmark(**args)
def showactivebookmark(**args):
""":activetbookmark: String. The active bookmark, if it is
FUJIWARA Katsunori
templatekw: add 'currentbookmark' keyword to show current bookmark easily...
r21896 associated with the changeset"""
Ryan McElroy
templatekw: display active bookmark more consistently (issue4552) (BC)...
r25387 active = args['repo']._activebookmark
if active and active in args['ctx'].bookmarks():
return active
FUJIWARA Katsunori
templatekw: add 'currentbookmark' keyword to show current bookmark easily...
r21896 return ''
Patrick Mezard
cmdutil: extract repo dependent closures in templatekw
r10055 def showdate(repo, ctx, templ, **args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:date: Date information. The date when the changeset was committed."""
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 return ctx.date()
Patrick Mezard
cmdutil: extract repo dependent closures in templatekw
r10055 def showdescription(repo, ctx, templ, **args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:desc: String. The text of the changeset description."""
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 return ctx.description().strip()
Patrick Mezard
cmdutil: extract repo dependent closures in templatekw
r10055 def showdiffstat(repo, ctx, templ, **args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:diffstat: String. Statistics of changes with the following format:
"modified files: +added/-removed lines"
"""
Matt Mackall
templatekw: use diffstatsum in diffstat keyword
r14403 stats = patch.diffstatdata(util.iterlines(ctx.diff()))
Steven Brown
patch: restore the previous output of 'diff --stat'...
r14437 maxname, maxtotal, adds, removes, binary = patch.diffstatsum(stats)
Matt Mackall
templatekw: use diffstatsum in diffstat keyword
r14403 return '%s: +%s/-%s' % (len(stats), adds, removes)
Patrick Mezard
cmdutil: extract repo dependent closures in templatekw
r10055
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 def showextras(**args):
Matthew Turk
help: document about {extras} template keyword...
r20015 """:extras: List of dicts with key, value entries of the 'extras'
field of this changeset."""
Matthew Turk
template: modify showextras to return a hybrid...
r20183 extras = args['ctx'].extra()
Yuya Nishihara
templatekw: convert list of key/value pairs to sortdict...
r24237 extras = util.sortdict((k, extras[k]) for k in sorted(extras))
Yuya Nishihara
templatekw: give name to lambda that constructs variables map of templater...
r24238 makemap = lambda k: {'key': k, 'value': extras[k]}
c = [makemap(k) for k in extras]
Matthew Turk
template: modify showextras to return a hybrid...
r20183 f = _showlist('extra', c, plural='extras', **args)
Yuya Nishihara
templatekw: keep raw list or dict in _hybrid object...
r24239 return _hybrid(f, extras, makemap,
lambda x: '%s=%s' % (x['key'], x['value']))
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 def showfileadds(**args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:file_adds: List of strings. Files added by this changeset."""
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
Matt Mackall
templating: make new-style templating features work with command line lists
r17631 return showlist('file_add', getfiles(repo, ctx, revcache)[1],
element='file', **args)
Patrick Mezard
cmdutil: extract file changes closures into templatekw
r10056
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 def showfilecopies(**args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:file_copies: List of strings. Files copied in this changeset with
their sources.
"""
Benoit Boissinot
fix coding style (reported by pylint)
r10394 cache, ctx = args['cache'], args['ctx']
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 copies = args['revcache'].get('copies')
Patrick Mezard
templatekw: change {file_copies} behaviour, add {file_copies_switch}...
r10060 if copies is None:
if 'getrenamed' not in cache:
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 cache['getrenamed'] = getrenamedfn(args['repo'])
Patrick Mezard
templatekw: change {file_copies} behaviour, add {file_copies_switch}...
r10060 copies = []
getrenamed = cache['getrenamed']
for fn in ctx.files():
rename = getrenamed(fn, ctx.rev())
if rename:
copies.append((fn, rename[0]))
Matt Mackall
many, many trivial check-code fixups
r10282
Yuya Nishihara
templatekw: convert list of key/value pairs to sortdict...
r24237 copies = util.sortdict(copies)
Yuya Nishihara
templatekw: give name to lambda that constructs variables map of templater...
r24238 makemap = lambda k: {'name': k, 'source': copies[k]}
c = [makemap(k) for k in copies]
Matt Mackall
templater: properly handle file_copies with %
r18715 f = _showlist('file_copy', c, plural='file_copies', **args)
Yuya Nishihara
templatekw: keep raw list or dict in _hybrid object...
r24239 return _hybrid(f, copies, makemap,
lambda x: '%s (%s)' % (x['name'], x['source']))
Patrick Mezard
templatekw: change {file_copies} behaviour, add {file_copies_switch}...
r10060
# showfilecopiesswitch() displays file copies only if copy records are
# provided before calling the templater, usually with a --copies
# command line switch.
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 def showfilecopiesswitch(**args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:file_copies_switch: List of strings. Like "file_copies" but displayed
only if the --copied switch is set.
"""
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 copies = args['revcache'].get('copies') or []
Yuya Nishihara
templatekw: convert list of key/value pairs to sortdict...
r24237 copies = util.sortdict(copies)
Yuya Nishihara
templatekw: give name to lambda that constructs variables map of templater...
r24238 makemap = lambda k: {'name': k, 'source': copies[k]}
c = [makemap(k) for k in copies]
Matt Mackall
templater: properly handle file_copies with %
r18715 f = _showlist('file_copy', c, plural='file_copies', **args)
Yuya Nishihara
templatekw: keep raw list or dict in _hybrid object...
r24239 return _hybrid(f, copies, makemap,
lambda x: '%s (%s)' % (x['name'], x['source']))
Patrick Mezard
cmdutil: extract file copies closure into templatekw
r10058
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 def showfiledels(**args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:file_dels: List of strings. Files removed by this changeset."""
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
Matt Mackall
templating: make new-style templating features work with command line lists
r17631 return showlist('file_del', getfiles(repo, ctx, revcache)[2],
element='file', **args)
Patrick Mezard
cmdutil: extract file changes closures into templatekw
r10056
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 def showfilemods(**args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:file_mods: List of strings. Files modified by this changeset."""
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
Matt Mackall
templating: make new-style templating features work with command line lists
r17631 return showlist('file_mod', getfiles(repo, ctx, revcache)[0],
element='file', **args)
Patrick Mezard
cmdutil: extract file changes closures into templatekw
r10056
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 def showfiles(**args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:files: List of strings. All files modified, added, or removed by this
changeset.
"""
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 return showlist('file', args['ctx'].files(), **args)
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054
Patrick Mezard
cmdutil: extract latest tags closures in templatekw
r10057 def showlatesttag(repo, ctx, templ, cache, **args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:latesttag: String. Most recent global tag in the ancestors of this
changeset.
"""
Patrick Mezard
cmdutil: extract latest tags closures in templatekw
r10057 return getlatesttags(repo, ctx, cache)[2]
def showlatesttagdistance(repo, ctx, templ, cache, **args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:latesttagdistance: Integer. Longest path to the latest tag."""
Patrick Mezard
cmdutil: extract latest tags closures in templatekw
r10057 return getlatesttags(repo, ctx, cache)[1]
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 def showmanifest(**args):
repo, ctx, templ = args['repo'], args['ctx'], args['templ']
Yuya Nishihara
templatekw: have {manifest} use ctx.manifestnode() for consistency...
r24676 mnode = ctx.manifestnode()
Patrick Mezard
cmdutil: extract repo dependent closures in templatekw
r10055 args = args.copy()
Yuya Nishihara
templatekw: have {manifest} use ctx.manifestnode() for consistency...
r24676 args.update({'rev': repo.manifest.rev(mnode), 'node': hex(mnode)})
Patrick Mezard
cmdutil: extract repo dependent closures in templatekw
r10055 return templ('manifest', **args)
def shownode(repo, ctx, templ, **args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:node: String. The changeset identification hash, as a 40 hexadecimal
digit string.
"""
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 return ctx.hex()
epriestley
templatekw: add p1rev, p1node, p2rev, p2node keywords...
r17357 def showp1rev(repo, ctx, templ, **args):
""":p1rev: Integer. The repository-local revision number of the changeset's
first parent, or -1 if the changeset has no parents."""
return ctx.p1().rev()
epriestley
templatekw: add parent1, parent1node, parent2, parent2node keywords...
r17355
epriestley
templatekw: add p1rev, p1node, p2rev, p2node keywords...
r17357 def showp2rev(repo, ctx, templ, **args):
""":p2rev: Integer. The repository-local revision number of the changeset's
second parent, or -1 if the changeset has no second parent."""
return ctx.p2().rev()
epriestley
templatekw: add parent1, parent1node, parent2, parent2node keywords...
r17355
epriestley
templatekw: add p1rev, p1node, p2rev, p2node keywords...
r17357 def showp1node(repo, ctx, templ, **args):
""":p1node: String. The identification hash of the changeset's first parent,
as a 40 digit hexadecimal string. If the changeset has no parents, all
digits are 0."""
return ctx.p1().hex()
epriestley
templatekw: add parent1, parent1node, parent2, parent2node keywords...
r17355
epriestley
templatekw: add p1rev, p1node, p2rev, p2node keywords...
r17357 def showp2node(repo, ctx, templ, **args):
""":p2node: String. The identification hash of the changeset's second
parent, as a 40 digit hexadecimal string. If the changeset has no second
parent, all digits are 0."""
return ctx.p2().hex()
epriestley
templatekw: add parent1, parent1node, parent2, parent2node keywords...
r17355
Pierre-Yves David
phases: add a phase template keyword
r15422 def showphase(repo, ctx, templ, **args):
Wagner Bruna
templatekw: fix phase keywords
r15947 """:phase: String. The changeset phase name."""
Pierre-Yves David
phases: ``{phase}`` template keyword display the phase name...
r15823 return ctx.phasestr()
def showphaseidx(repo, ctx, templ, **args):
Wagner Bruna
templatekw: fix phase keywords
r15947 """:phaseidx: Integer. The changeset phase index."""
Pierre-Yves David
phases: add a phase template keyword
r15422 return ctx.phase()
Patrick Mezard
cmdutil: extract repo dependent closures in templatekw
r10055 def showrev(repo, ctx, templ, **args):
Patrick Mezard
templates: generate keyword help dynamically
r13585 """:rev: Integer. The repository-local changeset revision number."""
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 return ctx.rev()
FUJIWARA Katsunori
templatekw: add 'subrepos' keyword to show updated subrepositories...
r21897 def showsubrepos(**args):
""":subrepos: List of strings. Updated subrepositories in the changeset."""
ctx = args['ctx']
substate = ctx.substate
if not substate:
return showlist('subrepo', [], **args)
psubstate = ctx.parents()[0].substate or {}
subrepos = []
for sub in substate:
if sub not in psubstate or substate[sub] != psubstate[sub]:
subrepos.append(sub) # modified or newly added in ctx
for sub in psubstate:
if sub not in substate:
subrepos.append(sub) # removed in ctx
return showlist('subrepo', sorted(subrepos), **args)
Sean Farley
templatekw: add helper method to generate a template keyword for a namespace...
r23609 def shownames(namespace, **args):
"""helper method to generate a template keyword for a namespace"""
ctx = args['ctx']
Matt Harbison
templater: replace 'ctx._repo' with 'ctx.repo()'
r24337 repo = ctx.repo()
Sean Farley
templatekw: update namespace calls...
r23737 ns = repo.names[namespace]
names = ns.names(repo, ctx.node())
return showlist(ns.templatename, names, plural=namespace, **args)
Sean Farley
templatekw: add helper method to generate a template keyword for a namespace...
r23609
FUJIWARA Katsunori
templatekw: re-add showtags() to list tags keyword up in online help...
r23977 # don't remove "showtags" definition, even though namespaces will put
# a helper function for "tags" keyword into "keywords" map automatically,
# because online help text is built without namespaces initialization
def showtags(**args):
""":tags: List of strings. Any tags associated with the changeset."""
return shownames('tags', **args)
Patrick Mezard
templatekw: fix extras, manifest and showlist args (issue1989)...
r10260 # keywords are callables like:
# fn(repo, ctx, templ, cache, revcache, **args)
# with:
# repo - current repository instance
# ctx - the changectx being displayed
# templ - the templater instance
# cache - a cache dictionary for the whole templater run
# revcache - a cache dictionary for the current revision
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 keywords = {
Ryan McElroy
templatekw: introduce activebookmark keyword...
r25013 'activebookmark': showactivebookmark,
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 'author': showauthor,
"Yann E. MORIN"
templates: add 'bisect' keyword to return a cset's bisect status...
r15155 'bisect': showbisect,
Eric Eisner
template: add showbranch template for {branch}...
r13156 'branch': showbranch,
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 'branches': showbranches,
David Soria Parra
templater: add bookmarks to templates and default output...
r13386 'bookmarks': showbookmarks,
Jason Harris
templates: 'children' keyword...
r11655 'children': showchildren,
Ryan McElroy
templatekw: introduce activebookmark keyword...
r25013 # currentbookmark is deprecated
FUJIWARA Katsunori
templatekw: add 'currentbookmark' keyword to show current bookmark easily...
r21896 'currentbookmark': showcurrentbookmark,
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 'date': showdate,
'desc': showdescription,
Patrick Mezard
cmdutil: extract repo dependent closures in templatekw
r10055 'diffstat': showdiffstat,
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 'extras': showextras,
Patrick Mezard
cmdutil: extract file changes closures into templatekw
r10056 'file_adds': showfileadds,
Patrick Mezard
cmdutil: extract file copies closure into templatekw
r10058 'file_copies': showfilecopies,
Patrick Mezard
templatekw: change {file_copies} behaviour, add {file_copies_switch}...
r10060 'file_copies_switch': showfilecopiesswitch,
Patrick Mezard
cmdutil: extract file changes closures into templatekw
r10056 'file_dels': showfiledels,
'file_mods': showfilemods,
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 'files': showfiles,
Patrick Mezard
cmdutil: extract latest tags closures in templatekw
r10057 'latesttag': showlatesttag,
'latesttagdistance': showlatesttagdistance,
Patrick Mezard
cmdutil: extract repo dependent closures in templatekw
r10055 'manifest': showmanifest,
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 'node': shownode,
epriestley
templatekw: add p1rev, p1node, p2rev, p2node keywords...
r17357 'p1rev': showp1rev,
'p1node': showp1node,
'p2rev': showp2rev,
'p2node': showp2node,
Pierre-Yves David
phases: add a phase template keyword
r15422 'phase': showphase,
Pierre-Yves David
phases: ``{phase}`` template keyword display the phase name...
r15823 'phaseidx': showphaseidx,
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 'rev': showrev,
FUJIWARA Katsunori
templatekw: add 'subrepos' keyword to show updated subrepositories...
r21897 'subrepos': showsubrepos,
FUJIWARA Katsunori
templatekw: re-add showtags() to list tags keyword up in online help...
r23977 'tags': showtags,
Patrick Mezard
cmdutil: extract ctx dependent closures into templatekw
r10054 }
epriestley
templatekw/help: document the {parents} keyword...
r17187 def _showparents(**args):
""":parents: List of strings. The parents of the changeset in "rev:node"
format. If the changeset has only one "natural" parent (the predecessor
revision) nothing is shown."""
pass
dockeywords = {
'parents': _showparents,
}
dockeywords.update(keywords)
Matt Mackall
help: drop help for branches template keyword...
r20078 del dockeywords['branches']
epriestley
templatekw/help: document the {parents} keyword...
r17187
Patrick Mezard
templates: generate keyword help dynamically
r13585 # tell hggettext to extract docstrings from these functions:
epriestley
templatekw/help: document the {parents} keyword...
r17187 i18nfunctions = dockeywords.values()