annotate mercurial/templatekw.py @ 34328:dd28b1f55eb8

templatekw: just pass underlying value (or key) to joinfmt() function Before, iter(hybrid) was proxied to hybrid.gen, which generated formatted strings. That's why we had to apply joinfmt() to the dicts generated by hybrid.itermaps(). Since this weird API was fixed at a0f2d83f8083, we can get rid of the makemap() calls from join().
author Yuya Nishihara <yuya@tcha.org>
date Sun, 24 Sep 2017 15:22:46 +0900
parents 4647e0a8d3d7
children 89aec1834a86
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
1 # templatekw.py - common changeset template keywords
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
2 #
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com>
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
4 #
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
5 # This software may be used and distributed according to the terms of the
10264
d6512b3e9ac0 Merge with stable
Matt Mackall <mpm@selenic.com>
parents: 10260
diff changeset
6 # GNU General Public License version 2 or any later version.
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
7
25984
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
8 from __future__ import absolute_import
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
9
31807
e6eb86b154c5 templater: provide loop counter as "index" keyword
Yuya Nishihara <yuya@tcha.org>
parents: 31699
diff changeset
10 from .i18n import _
32658
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32656
diff changeset
11 from .node import (
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32656
diff changeset
12 hex,
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32656
diff changeset
13 nullid,
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32656
diff changeset
14 )
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32656
diff changeset
15
25984
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
16 from . import (
28239
7279e0132347 templatekw: workaround for utf-8 round-trip of {desc}
Yuya Nishihara <yuya@tcha.org>
parents: 28178
diff changeset
17 encoding,
25984
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
18 error,
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
19 hbisect,
32879
1858fc2327ef template: add predecessors template
Boris Feld <boris.feld@octobus.net>
parents: 32658
diff changeset
20 obsutil,
25984
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
21 patch,
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
22 pycompat,
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
23 registrar,
25984
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
24 scmutil,
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
25 util,
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
26 )
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
27
31879
868ec199cad0 templater: rewrite doc of _hybrid class as docstring
Yuya Nishihara <yuya@tcha.org>
parents: 31850
diff changeset
28 class _hybrid(object):
868ec199cad0 templater: rewrite doc of _hybrid class as docstring
Yuya Nishihara <yuya@tcha.org>
parents: 31850
diff changeset
29 """Wrapper for list or dict to support legacy template
17631
0b241d7a8c62 templating: make new-style templating features work with command line lists
Matt Mackall <mpm@selenic.com>
parents: 17358
diff changeset
30
31879
868ec199cad0 templater: rewrite doc of _hybrid class as docstring
Yuya Nishihara <yuya@tcha.org>
parents: 31850
diff changeset
31 This class allows us to handle both:
868ec199cad0 templater: rewrite doc of _hybrid class as docstring
Yuya Nishihara <yuya@tcha.org>
parents: 31850
diff changeset
32 - "{files}" (legacy command-line-specific list hack) and
868ec199cad0 templater: rewrite doc of _hybrid class as docstring
Yuya Nishihara <yuya@tcha.org>
parents: 31850
diff changeset
33 - "{files % '{file}\n'}" (hgweb-style with inlining and function support)
868ec199cad0 templater: rewrite doc of _hybrid class as docstring
Yuya Nishihara <yuya@tcha.org>
parents: 31850
diff changeset
34 and to access raw values:
868ec199cad0 templater: rewrite doc of _hybrid class as docstring
Yuya Nishihara <yuya@tcha.org>
parents: 31850
diff changeset
35 - "{ifcontains(file, files, ...)}", "{ifcontains(key, extras, ...)}"
868ec199cad0 templater: rewrite doc of _hybrid class as docstring
Yuya Nishihara <yuya@tcha.org>
parents: 31850
diff changeset
36 - "{get(extras, key)}"
31882
ba5b74f780d5 templater: make _hybrid provide more list/dict-like methods
Yuya Nishihara <yuya@tcha.org>
parents: 31881
diff changeset
37 - "{files|json}"
31879
868ec199cad0 templater: rewrite doc of _hybrid class as docstring
Yuya Nishihara <yuya@tcha.org>
parents: 31850
diff changeset
38 """
868ec199cad0 templater: rewrite doc of _hybrid class as docstring
Yuya Nishihara <yuya@tcha.org>
parents: 31850
diff changeset
39
29669
bdc81970853d templatekw: change joinfmt to a mandatory argument of _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 29624
diff changeset
40 def __init__(self, gen, values, makemap, joinfmt):
31923
68c910fa9ee2 templatekw: add default implementation of _hybrid.gen
Yuya Nishihara <yuya@tcha.org>
parents: 31882
diff changeset
41 if gen is not None:
68c910fa9ee2 templatekw: add default implementation of _hybrid.gen
Yuya Nishihara <yuya@tcha.org>
parents: 31882
diff changeset
42 self.gen = gen
31881
31dad7a5b4ed templater: hide private variable of _hybrid
Yuya Nishihara <yuya@tcha.org>
parents: 31880
diff changeset
43 self._values = values
24239
31f9b1b16d1e templatekw: keep raw list or dict in _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 24238
diff changeset
44 self._makemap = makemap
29669
bdc81970853d templatekw: change joinfmt to a mandatory argument of _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 29624
diff changeset
45 self.joinfmt = joinfmt
31923
68c910fa9ee2 templatekw: add default implementation of _hybrid.gen
Yuya Nishihara <yuya@tcha.org>
parents: 31882
diff changeset
46 @util.propertycache
68c910fa9ee2 templatekw: add default implementation of _hybrid.gen
Yuya Nishihara <yuya@tcha.org>
parents: 31882
diff changeset
47 def gen(self):
68c910fa9ee2 templatekw: add default implementation of _hybrid.gen
Yuya Nishihara <yuya@tcha.org>
parents: 31882
diff changeset
48 return self._defaultgen()
68c910fa9ee2 templatekw: add default implementation of _hybrid.gen
Yuya Nishihara <yuya@tcha.org>
parents: 31882
diff changeset
49 def _defaultgen(self):
68c910fa9ee2 templatekw: add default implementation of _hybrid.gen
Yuya Nishihara <yuya@tcha.org>
parents: 31882
diff changeset
50 """Generator to stringify this as {join(self, ' ')}"""
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
51 for i, x in enumerate(self._values):
31923
68c910fa9ee2 templatekw: add default implementation of _hybrid.gen
Yuya Nishihara <yuya@tcha.org>
parents: 31882
diff changeset
52 if i > 0:
68c910fa9ee2 templatekw: add default implementation of _hybrid.gen
Yuya Nishihara <yuya@tcha.org>
parents: 31882
diff changeset
53 yield ' '
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
54 yield self.joinfmt(x)
27891
ac8c0ee5c3b8 templater: make _hybrid not callable to avoid conflicting semantics
Yuya Nishihara <yuya@tcha.org>
parents: 27215
diff changeset
55 def itermaps(self):
24239
31f9b1b16d1e templatekw: keep raw list or dict in _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 24238
diff changeset
56 makemap = self._makemap
31881
31dad7a5b4ed templater: hide private variable of _hybrid
Yuya Nishihara <yuya@tcha.org>
parents: 31880
diff changeset
57 for x in self._values:
24239
31f9b1b16d1e templatekw: keep raw list or dict in _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 24238
diff changeset
58 yield makemap(x)
24240
bd504d90588d templater: implement _hybrid.__contains__ so that ifcontains can accept dict
Yuya Nishihara <yuya@tcha.org>
parents: 24239
diff changeset
59 def __contains__(self, x):
31881
31dad7a5b4ed templater: hide private variable of _hybrid
Yuya Nishihara <yuya@tcha.org>
parents: 31880
diff changeset
60 return x in self._values
33414
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
61 def __getitem__(self, key):
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
62 return self._values[key]
22393
293930a1fa0a templater: implement __len__ for _hybrid
Anton Shestakov <engored@ya.ru>
parents: 21897
diff changeset
63 def __len__(self):
31881
31dad7a5b4ed templater: hide private variable of _hybrid
Yuya Nishihara <yuya@tcha.org>
parents: 31880
diff changeset
64 return len(self._values)
31882
ba5b74f780d5 templater: make _hybrid provide more list/dict-like methods
Yuya Nishihara <yuya@tcha.org>
parents: 31881
diff changeset
65 def __iter__(self):
ba5b74f780d5 templater: make _hybrid provide more list/dict-like methods
Yuya Nishihara <yuya@tcha.org>
parents: 31881
diff changeset
66 return iter(self._values)
24241
e7baf88c29c3 templatekw: forward _hybrid.get to raw values so that get(extras, key) works
Yuya Nishihara <yuya@tcha.org>
parents: 24240
diff changeset
67 def __getattr__(self, name):
31882
ba5b74f780d5 templater: make _hybrid provide more list/dict-like methods
Yuya Nishihara <yuya@tcha.org>
parents: 31881
diff changeset
68 if name not in ('get', 'items', 'iteritems', 'iterkeys', 'itervalues',
ba5b74f780d5 templater: make _hybrid provide more list/dict-like methods
Yuya Nishihara <yuya@tcha.org>
parents: 31881
diff changeset
69 'keys', 'values'):
24241
e7baf88c29c3 templatekw: forward _hybrid.get to raw values so that get(extras, key) works
Yuya Nishihara <yuya@tcha.org>
parents: 24240
diff changeset
70 raise AttributeError(name)
31881
31dad7a5b4ed templater: hide private variable of _hybrid
Yuya Nishihara <yuya@tcha.org>
parents: 31880
diff changeset
71 return getattr(self._values, name)
17631
0b241d7a8c62 templating: make new-style templating features work with command line lists
Matt Mackall <mpm@selenic.com>
parents: 17358
diff changeset
72
31925
5b2241e84982 templatekw: add public function to wrap a dict by _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 31924
diff changeset
73 def hybriddict(data, key='key', value='value', fmt='%s=%s', gen=None):
5b2241e84982 templatekw: add public function to wrap a dict by _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 31924
diff changeset
74 """Wrap data to support both dict-like and string-like operations"""
5b2241e84982 templatekw: add public function to wrap a dict by _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 31924
diff changeset
75 return _hybrid(gen, data, lambda k: {key: k, value: data[k]},
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
76 lambda k: fmt % (k, data[k]))
31925
5b2241e84982 templatekw: add public function to wrap a dict by _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 31924
diff changeset
77
31924
21f129354dd0 templatekw: add public function to wrap a list by _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 31923
diff changeset
78 def hybridlist(data, name, fmt='%s', gen=None):
21f129354dd0 templatekw: add public function to wrap a list by _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 31923
diff changeset
79 """Wrap data to support both list-like and string-like operations"""
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
80 return _hybrid(gen, data, lambda x: {name: x}, lambda x: fmt % x)
31924
21f129354dd0 templatekw: add public function to wrap a list by _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 31923
diff changeset
81
31880
a0f2d83f8083 templater: remove __iter__() from _hybrid, resolve it explicitly
Yuya Nishihara <yuya@tcha.org>
parents: 31879
diff changeset
82 def unwraphybrid(thing):
a0f2d83f8083 templater: remove __iter__() from _hybrid, resolve it explicitly
Yuya Nishihara <yuya@tcha.org>
parents: 31879
diff changeset
83 """Return an object which can be stringified possibly by using a legacy
a0f2d83f8083 templater: remove __iter__() from _hybrid, resolve it explicitly
Yuya Nishihara <yuya@tcha.org>
parents: 31879
diff changeset
84 template"""
a0f2d83f8083 templater: remove __iter__() from _hybrid, resolve it explicitly
Yuya Nishihara <yuya@tcha.org>
parents: 31879
diff changeset
85 if not util.safehasattr(thing, 'gen'):
a0f2d83f8083 templater: remove __iter__() from _hybrid, resolve it explicitly
Yuya Nishihara <yuya@tcha.org>
parents: 31879
diff changeset
86 return thing
a0f2d83f8083 templater: remove __iter__() from _hybrid, resolve it explicitly
Yuya Nishihara <yuya@tcha.org>
parents: 31879
diff changeset
87 return thing.gen
a0f2d83f8083 templater: remove __iter__() from _hybrid, resolve it explicitly
Yuya Nishihara <yuya@tcha.org>
parents: 31879
diff changeset
88
32038
3920b5970f95 templatekw: factor out showdict() helper
Yuya Nishihara <yuya@tcha.org>
parents: 32037
diff changeset
89 def showdict(name, data, mapping, plural=None, key='key', value='value',
3920b5970f95 templatekw: factor out showdict() helper
Yuya Nishihara <yuya@tcha.org>
parents: 32037
diff changeset
90 fmt='%s=%s', separator=' '):
3920b5970f95 templatekw: factor out showdict() helper
Yuya Nishihara <yuya@tcha.org>
parents: 32037
diff changeset
91 c = [{key: k, value: v} for k, v in data.iteritems()]
3920b5970f95 templatekw: factor out showdict() helper
Yuya Nishihara <yuya@tcha.org>
parents: 32037
diff changeset
92 f = _showlist(name, c, mapping, plural, separator)
3920b5970f95 templatekw: factor out showdict() helper
Yuya Nishihara <yuya@tcha.org>
parents: 32037
diff changeset
93 return hybriddict(data, key=key, value=value, fmt=fmt, gen=f)
3920b5970f95 templatekw: factor out showdict() helper
Yuya Nishihara <yuya@tcha.org>
parents: 32037
diff changeset
94
32037
e5eab0fe69ee templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32036
diff changeset
95 def showlist(name, values, mapping, plural=None, element=None, separator=' '):
17631
0b241d7a8c62 templating: make new-style templating features work with command line lists
Matt Mackall <mpm@selenic.com>
parents: 17358
diff changeset
96 if not element:
0b241d7a8c62 templating: make new-style templating features work with command line lists
Matt Mackall <mpm@selenic.com>
parents: 17358
diff changeset
97 element = name
32036
8bcc8c9b4e9f templatekw: change _showlist() to take mapping dict with no **kwargs expansion
Yuya Nishihara <yuya@tcha.org>
parents: 32035
diff changeset
98 f = _showlist(name, values, mapping, plural, separator)
31924
21f129354dd0 templatekw: add public function to wrap a list by _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 31923
diff changeset
99 return hybridlist(values, name=element, gen=f)
17631
0b241d7a8c62 templating: make new-style templating features work with command line lists
Matt Mackall <mpm@selenic.com>
parents: 17358
diff changeset
100
32036
8bcc8c9b4e9f templatekw: change _showlist() to take mapping dict with no **kwargs expansion
Yuya Nishihara <yuya@tcha.org>
parents: 32035
diff changeset
101 def _showlist(name, values, mapping, plural=None, separator=' '):
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
102 '''expand set of values.
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
103 name is name of key in template map.
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
104 values is list of strings or dicts.
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
105 plural is plural of name, if not simply name + 's'.
25726
b44e483726d3 templatekw: allow the caller of showlist() to specify the join() separator
Matt Harbison <matt_harbison@yahoo.com>
parents: 25724
diff changeset
106 separator is used to join values as a string
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
107
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
108 expansion works like this, given name 'foo'.
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
109
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
110 if values is empty, expand 'no_foos'.
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
111
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
112 if 'foo' not in template map, return values as a string,
25726
b44e483726d3 templatekw: allow the caller of showlist() to specify the join() separator
Matt Harbison <matt_harbison@yahoo.com>
parents: 25724
diff changeset
113 joined by 'separator'.
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
114
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
115 expand 'start_foos'.
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
116
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
117 for each value, expand 'foo'. if 'last_foo' in template
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
118 map, expand it instead of 'foo' for last key.
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
119
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
120 expand 'end_foos'.
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
121 '''
32035
f4ba33454b28 templatekw: rename 'args' to 'mapping' in showlist()
Yuya Nishihara <yuya@tcha.org>
parents: 32034
diff changeset
122 templ = mapping['templ']
33017
c31d45623304 py3: convert kwargs' keys' to str using pycompat.strkwargs()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33015
diff changeset
123 strmapping = pycompat.strkwargs(mapping)
32034
579bbcb4322b templatekw: eliminate unnecessary temporary variable 'names' from _showlist()
Yuya Nishihara <yuya@tcha.org>
parents: 31925
diff changeset
124 if not plural:
579bbcb4322b templatekw: eliminate unnecessary temporary variable 'names' from _showlist()
Yuya Nishihara <yuya@tcha.org>
parents: 31925
diff changeset
125 plural = name + 's'
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
126 if not values:
32034
579bbcb4322b templatekw: eliminate unnecessary temporary variable 'names' from _showlist()
Yuya Nishihara <yuya@tcha.org>
parents: 31925
diff changeset
127 noname = 'no_' + plural
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
128 if noname in templ:
33017
c31d45623304 py3: convert kwargs' keys' to str using pycompat.strkwargs()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33015
diff changeset
129 yield templ(noname, **strmapping)
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
130 return
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
131 if name not in templ:
32970
11c0bb4ccc76 py3: replace str with bytes in isinstance()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32911
diff changeset
132 if isinstance(values[0], bytes):
25726
b44e483726d3 templatekw: allow the caller of showlist() to specify the join() separator
Matt Harbison <matt_harbison@yahoo.com>
parents: 25724
diff changeset
133 yield separator.join(values)
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
134 else:
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
135 for v in values:
33017
c31d45623304 py3: convert kwargs' keys' to str using pycompat.strkwargs()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33015
diff changeset
136 yield dict(v, **strmapping)
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
137 return
32034
579bbcb4322b templatekw: eliminate unnecessary temporary variable 'names' from _showlist()
Yuya Nishihara <yuya@tcha.org>
parents: 31925
diff changeset
138 startname = 'start_' + plural
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
139 if startname in templ:
33017
c31d45623304 py3: convert kwargs' keys' to str using pycompat.strkwargs()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33015
diff changeset
140 yield templ(startname, **strmapping)
32035
f4ba33454b28 templatekw: rename 'args' to 'mapping' in showlist()
Yuya Nishihara <yuya@tcha.org>
parents: 32034
diff changeset
141 vmapping = mapping.copy()
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
142 def one(v, tag=name):
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
143 try:
32035
f4ba33454b28 templatekw: rename 'args' to 'mapping' in showlist()
Yuya Nishihara <yuya@tcha.org>
parents: 32034
diff changeset
144 vmapping.update(v)
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
145 except (AttributeError, ValueError):
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
146 try:
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
147 for a, b in v:
32035
f4ba33454b28 templatekw: rename 'args' to 'mapping' in showlist()
Yuya Nishihara <yuya@tcha.org>
parents: 32034
diff changeset
148 vmapping[a] = b
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
149 except ValueError:
32035
f4ba33454b28 templatekw: rename 'args' to 'mapping' in showlist()
Yuya Nishihara <yuya@tcha.org>
parents: 32034
diff changeset
150 vmapping[name] = v
33017
c31d45623304 py3: convert kwargs' keys' to str using pycompat.strkwargs()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33015
diff changeset
151 return templ(tag, **pycompat.strkwargs(vmapping))
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
152 lastname = 'last_' + name
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
153 if lastname in templ:
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
154 last = values.pop()
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
155 else:
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
156 last = None
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
157 for v in values:
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
158 yield one(v)
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
159 if last is not None:
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
160 yield one(last, tag=lastname)
32034
579bbcb4322b templatekw: eliminate unnecessary temporary variable 'names' from _showlist()
Yuya Nishihara <yuya@tcha.org>
parents: 31925
diff changeset
161 endname = 'end_' + plural
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
162 if endname in templ:
33017
c31d45623304 py3: convert kwargs' keys' to str using pycompat.strkwargs()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33015
diff changeset
163 yield templ(endname, **strmapping)
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
164
10056
1a114aca93fa cmdutil: extract file changes closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10055
diff changeset
165 def getfiles(repo, ctx, revcache):
1a114aca93fa cmdutil: extract file changes closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10055
diff changeset
166 if 'files' not in revcache:
25392
ed18f4acf435 templatekw: compare target context and its parent exactly (issue4690)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24676
diff changeset
167 revcache['files'] = repo.status(ctx.p1(), ctx)[:3]
10056
1a114aca93fa cmdutil: extract file changes closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10055
diff changeset
168 return revcache['files']
1a114aca93fa cmdutil: extract file changes closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10055
diff changeset
169
26482
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
170 def getlatesttags(repo, ctx, cache, pattern=None):
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
171 '''return date, distance and name for the latest tag of rev'''
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
172
26482
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
173 cachename = 'latesttags'
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
174 if pattern is not None:
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
175 cachename += '-' + pattern
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
176 match = util.stringmatcher(pattern)[2]
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
177 else:
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
178 match = util.always
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
179
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
180 if cachename not in cache:
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
181 # Cache mapping from rev to a tuple with tag date, tag
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
182 # distance and tag name
26482
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
183 cache[cachename] = {-1: (0, 0, ['null'])}
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
184 latesttags = cache[cachename]
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
185
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
186 rev = ctx.rev()
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
187 todo = [rev]
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
188 while todo:
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
189 rev = todo.pop()
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
190 if rev in latesttags:
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
191 continue
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
192 ctx = repo[rev]
20218
0c22257388d6 templatekw: allow tagtypes other than global in getlatesttags
Andrew Shadura <andrew@shadura.me>
parents: 20183
diff changeset
193 tags = [t for t in ctx.tags()
26482
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
194 if (repo.tagtype(t) and repo.tagtype(t) != 'local'
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
195 and match(t))]
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
196 if tags:
25700
0fca47b206f6 templatekw: use a list of tags in getlatesttags() instead of joining them
Matt Harbison <matt_harbison@yahoo.com>
parents: 25663
diff changeset
197 latesttags[rev] = ctx.date()[0], 0, [t for t in sorted(tags)]
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
198 continue
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
199 try:
33862
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
200 ptags = [latesttags[p.rev()] for p in ctx.parents()]
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
201 if len(ptags) > 1:
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
202 if ptags[0][2] == ptags[1][2]:
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
203 # The tuples are laid out so the right one can be found by
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
204 # comparison in this case.
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
205 pdate, pdist, ptag = max(ptags)
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
206 else:
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
207 def key(x):
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
208 changessincetag = len(repo.revs('only(%d, %s)',
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
209 ctx.rev(), x[2][0]))
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
210 # Smallest number of changes since tag wins. Date is
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
211 # used as tiebreaker.
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
212 return [-changessincetag, x[0]]
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
213 pdate, pdist, ptag = max(ptags, key=key)
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
214 else:
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
215 pdate, pdist, ptag = ptags[0]
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
216 except KeyError:
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
217 # Cache miss - recurse
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
218 todo.append(rev)
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
219 todo.extend(p.rev() for p in ctx.parents())
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
220 continue
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
221 latesttags[rev] = pdate, pdist + 1, ptag
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
222 return latesttags[rev]
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
223
10060
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
224 def getrenamedfn(repo, endrev=None):
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
225 rcache = {}
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
226 if endrev is None:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
227 endrev = len(repo)
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
228
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
229 def getrenamed(fn, rev):
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
230 '''looks up all renames for a file (up to endrev) the first
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
231 time the file is given. It indexes on the changerev and only
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
232 parses the manifest if linkrev != changerev.
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
233 Returns rename info for fn at changerev rev.'''
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
234 if fn not in rcache:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
235 rcache[fn] = {}
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
236 fl = repo.file(fn)
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
237 for i in fl:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
238 lr = fl.linkrev(i)
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
239 renamed = fl.renamed(fl.node(i))
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
240 rcache[fn][lr] = renamed
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
241 if lr >= endrev:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
242 break
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
243 if rev in rcache[fn]:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
244 return rcache[fn][rev]
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
245
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
246 # If linkrev != rev (i.e. rev not found in rcache) fallback to
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
247 # filectx logic.
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
248 try:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
249 return repo[rev][fn].renamed()
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
250 except error.LookupError:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
251 return None
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
252
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
253 return getrenamed
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
254
31171
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
255 # default templates internally used for rendering of lists
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
256 defaulttempl = {
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
257 'parent': '{rev}:{node|formatnode} ',
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
258 'manifest': '{rev}:{node|formatnode}',
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
259 'file_copy': '{name} ({source})',
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
260 'envvar': '{key}={value}',
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
261 'extra': '{key}={value|stringescape}'
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
262 }
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
263 # filecopy is preserved for compatibility reasons
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
264 defaulttempl['filecopy'] = defaulttempl['file_copy']
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
265
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
266 # keywords are callables like:
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
267 # fn(repo, ctx, templ, cache, revcache, **args)
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
268 # with:
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
269 # repo - current repository instance
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
270 # ctx - the changectx being displayed
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
271 # templ - the templater instance
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
272 # cache - a cache dictionary for the whole templater run
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
273 # revcache - a cache dictionary for the current revision
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
274 keywords = {}
10060
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
275
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
276 templatekeyword = registrar.templatekeyword(keywords)
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
277
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
278 @templatekeyword('author')
10055
e400a511e63a cmdutil: extract repo dependent closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10054
diff changeset
279 def showauthor(repo, ctx, templ, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
280 """String. The unmodified author of the changeset."""
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
281 return ctx.user()
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
282
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
283 @templatekeyword('bisect')
15155
f4a8d754cd0a templates: add 'bisect' keyword to return a cset's bisect status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 14437
diff changeset
284 def showbisect(repo, ctx, templ, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
285 """String. The changeset bisection status."""
15155
f4a8d754cd0a templates: add 'bisect' keyword to return a cset's bisect status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 14437
diff changeset
286 return hbisect.label(repo, ctx.node())
f4a8d754cd0a templates: add 'bisect' keyword to return a cset's bisect status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 14437
diff changeset
287
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
288 @templatekeyword('branch')
13156
d79fdff55627 template: add showbranch template for {branch}
Eric Eisner <ede@mit.edu>
parents: 13114
diff changeset
289 def showbranch(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
290 """String. The name of the branch on which the changeset was
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
291 committed.
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
292 """
32973
20ca19e6c74e py3: use r'' to access values from kwargs where keys are str
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32972
diff changeset
293 return args[r'ctx'].branch()
13156
d79fdff55627 template: add showbranch template for {branch}
Eric Eisner <ede@mit.edu>
parents: 13114
diff changeset
294
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
295 @templatekeyword('branches')
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
296 def showbranches(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
297 """List of strings. The name of the branch on which the
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
298 changeset was committed. Will be empty if the branch name was
26437
4628b26f040e templatekw: hide help of "branches" by DEPRECATED marker
Yuya Nishihara <yuya@tcha.org>
parents: 26436
diff changeset
299 default. (DEPRECATED)
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
300 """
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
301 args = pycompat.byteskwargs(args)
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
302 branch = args['ctx'].branch()
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
303 if branch != 'default':
32037
e5eab0fe69ee templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32036
diff changeset
304 return showlist('branch', [branch], args, plural='branches')
e5eab0fe69ee templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32036
diff changeset
305 return showlist('branch', [], args, plural='branches')
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
306
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
307 @templatekeyword('bookmarks')
13386
f78bc5ddbe4f templater: add bookmarks to templates and default output
David Soria Parra <dsp@php.net>
parents: 13156
diff changeset
308 def showbookmarks(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
309 """List of strings. Any bookmarks associated with the
25348
f26efa4f0eff templatekw: introduce active subkeyword from bookmarks keyword
Ryan McElroy <rmcelroy@fb.com>
parents: 25013
diff changeset
310 changeset. Also sets 'active', the name of the active bookmark.
13592
ad2ee188f4a5 templates: document missing keywords or filters
Patrick Mezard <pmezard@gmail.com>
parents: 13585
diff changeset
311 """
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
312 args = pycompat.byteskwargs(args)
20520
5c65ee4193e1 template: add 'current' to scope during {bookmarks % ...}
Durham Goode <durham@fb.com>
parents: 20218
diff changeset
313 repo = args['ctx']._repo
13386
f78bc5ddbe4f templater: add bookmarks to templates and default output
David Soria Parra <dsp@php.net>
parents: 13156
diff changeset
314 bookmarks = args['ctx'].bookmarks()
25348
f26efa4f0eff templatekw: introduce active subkeyword from bookmarks keyword
Ryan McElroy <rmcelroy@fb.com>
parents: 25013
diff changeset
315 active = repo._activebookmark
f26efa4f0eff templatekw: introduce active subkeyword from bookmarks keyword
Ryan McElroy <rmcelroy@fb.com>
parents: 25013
diff changeset
316 makemap = lambda v: {'bookmark': v, 'active': active, 'current': active}
32036
8bcc8c9b4e9f templatekw: change _showlist() to take mapping dict with no **kwargs expansion
Yuya Nishihara <yuya@tcha.org>
parents: 32035
diff changeset
317 f = _showlist('bookmark', bookmarks, args)
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
318 return _hybrid(f, bookmarks, makemap, pycompat.identity)
13386
f78bc5ddbe4f templater: add bookmarks to templates and default output
David Soria Parra <dsp@php.net>
parents: 13156
diff changeset
319
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
320 @templatekeyword('children')
11655
6faf015e0ba0 templates: 'children' keyword
Jason Harris <jason@jasonfharris.com>
parents: 10394
diff changeset
321 def showchildren(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
322 """List of strings. The children of the changeset."""
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
323 args = pycompat.byteskwargs(args)
11655
6faf015e0ba0 templates: 'children' keyword
Jason Harris <jason@jasonfharris.com>
parents: 10394
diff changeset
324 ctx = args['ctx']
6faf015e0ba0 templates: 'children' keyword
Jason Harris <jason@jasonfharris.com>
parents: 10394
diff changeset
325 childrevs = ['%d:%s' % (cctx, cctx) for cctx in ctx.children()]
32037
e5eab0fe69ee templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32036
diff changeset
326 return showlist('children', childrevs, args, element='child')
11655
6faf015e0ba0 templates: 'children' keyword
Jason Harris <jason@jasonfharris.com>
parents: 10394
diff changeset
327
25013
277aba2c151a templatekw: introduce activebookmark keyword
Ryan McElroy <rmcelroy@fb.com>
parents: 25012
diff changeset
328 # Deprecated, but kept alive for help generation a purpose.
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
329 @templatekeyword('currentbookmark')
21896
2b41ee1b5ea1 templatekw: add 'currentbookmark' keyword to show current bookmark easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20683
diff changeset
330 def showcurrentbookmark(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
331 """String. The active bookmark, if it is
25013
277aba2c151a templatekw: introduce activebookmark keyword
Ryan McElroy <rmcelroy@fb.com>
parents: 25012
diff changeset
332 associated with the changeset (DEPRECATED)"""
277aba2c151a templatekw: introduce activebookmark keyword
Ryan McElroy <rmcelroy@fb.com>
parents: 25012
diff changeset
333 return showactivebookmark(**args)
277aba2c151a templatekw: introduce activebookmark keyword
Ryan McElroy <rmcelroy@fb.com>
parents: 25012
diff changeset
334
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
335 @templatekeyword('activebookmark')
25013
277aba2c151a templatekw: introduce activebookmark keyword
Ryan McElroy <rmcelroy@fb.com>
parents: 25012
diff changeset
336 def showactivebookmark(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
337 """String. The active bookmark, if it is
21896
2b41ee1b5ea1 templatekw: add 'currentbookmark' keyword to show current bookmark easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20683
diff changeset
338 associated with the changeset"""
32973
20ca19e6c74e py3: use r'' to access values from kwargs where keys are str
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32972
diff changeset
339 active = args[r'repo']._activebookmark
20ca19e6c74e py3: use r'' to access values from kwargs where keys are str
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32972
diff changeset
340 if active and active in args[r'ctx'].bookmarks():
25387
390a10b7843b templatekw: display active bookmark more consistently (issue4552) (BC)
Ryan McElroy <rmcelroy@fb.com>
parents: 25348
diff changeset
341 return active
21896
2b41ee1b5ea1 templatekw: add 'currentbookmark' keyword to show current bookmark easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20683
diff changeset
342 return ''
2b41ee1b5ea1 templatekw: add 'currentbookmark' keyword to show current bookmark easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20683
diff changeset
343
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
344 @templatekeyword('date')
10055
e400a511e63a cmdutil: extract repo dependent closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10054
diff changeset
345 def showdate(repo, ctx, templ, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
346 """Date information. The date when the changeset was committed."""
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
347 return ctx.date()
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
348
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
349 @templatekeyword('desc')
10055
e400a511e63a cmdutil: extract repo dependent closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10054
diff changeset
350 def showdescription(repo, ctx, templ, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
351 """String. The text of the changeset description."""
28239
7279e0132347 templatekw: workaround for utf-8 round-trip of {desc}
Yuya Nishihara <yuya@tcha.org>
parents: 28178
diff changeset
352 s = ctx.description()
7279e0132347 templatekw: workaround for utf-8 round-trip of {desc}
Yuya Nishihara <yuya@tcha.org>
parents: 28178
diff changeset
353 if isinstance(s, encoding.localstr):
7279e0132347 templatekw: workaround for utf-8 round-trip of {desc}
Yuya Nishihara <yuya@tcha.org>
parents: 28178
diff changeset
354 # try hard to preserve utf-8 bytes
7279e0132347 templatekw: workaround for utf-8 round-trip of {desc}
Yuya Nishihara <yuya@tcha.org>
parents: 28178
diff changeset
355 return encoding.tolocal(encoding.fromlocal(s).strip())
7279e0132347 templatekw: workaround for utf-8 round-trip of {desc}
Yuya Nishihara <yuya@tcha.org>
parents: 28178
diff changeset
356 else:
7279e0132347 templatekw: workaround for utf-8 round-trip of {desc}
Yuya Nishihara <yuya@tcha.org>
parents: 28178
diff changeset
357 return s.strip()
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
358
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
359 @templatekeyword('diffstat')
10055
e400a511e63a cmdutil: extract repo dependent closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10054
diff changeset
360 def showdiffstat(repo, ctx, templ, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
361 """String. Statistics of changes with the following format:
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
362 "modified files: +added/-removed lines"
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
363 """
30811
cf1e15f91c90 templatekw: force noprefix=False to insure diffstat consistency (issue4755)
Matthieu Laneuville <mlaneuville@protonmail.com>
parents: 30712
diff changeset
364 stats = patch.diffstatdata(util.iterlines(ctx.diff(noprefix=False)))
14437
cbe13e6bdc34 patch: restore the previous output of 'diff --stat'
Steven Brown <StevenGBrown@gmail.com>
parents: 14403
diff changeset
365 maxname, maxtotal, adds, removes, binary = patch.diffstatsum(stats)
14403
2c9f5897d4b7 templatekw: use diffstatsum in diffstat keyword
Matt Mackall <mpm@selenic.com>
parents: 14318
diff changeset
366 return '%s: +%s/-%s' % (len(stats), adds, removes)
10055
e400a511e63a cmdutil: extract repo dependent closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10054
diff changeset
367
30833
bd5e9647f646 templater: add '{envvars}' to access environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents: 30811
diff changeset
368 @templatekeyword('envvars')
bd5e9647f646 templater: add '{envvars}' to access environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents: 30811
diff changeset
369 def showenvvars(repo, **args):
bd5e9647f646 templater: add '{envvars}' to access environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents: 30811
diff changeset
370 """A dictionary of environment variables. (EXPERIMENTAL)"""
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
371 args = pycompat.byteskwargs(args)
30833
bd5e9647f646 templater: add '{envvars}' to access environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents: 30811
diff changeset
372 env = repo.ui.exportableenviron()
bd5e9647f646 templater: add '{envvars}' to access environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents: 30811
diff changeset
373 env = util.sortdict((k, env[k]) for k in sorted(env))
32038
3920b5970f95 templatekw: factor out showdict() helper
Yuya Nishihara <yuya@tcha.org>
parents: 32037
diff changeset
374 return showdict('envvar', env, args, plural='envvars')
30833
bd5e9647f646 templater: add '{envvars}' to access environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents: 30811
diff changeset
375
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
376 @templatekeyword('extras')
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
377 def showextras(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
378 """List of dicts with key, value entries of the 'extras'
20015
ad27cdacc743 help: document about {extras} template keyword
Matthew Turk <matthewturk@gmail.com>
parents: 18970
diff changeset
379 field of this changeset."""
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
380 args = pycompat.byteskwargs(args)
20183
de7e6c489412 template: modify showextras to return a hybrid
Matthew Turk <matthewturk@gmail.com>
parents: 20079
diff changeset
381 extras = args['ctx'].extra()
24237
9ad02823dc5b templatekw: convert list of key/value pairs to sortdict
Yuya Nishihara <yuya@tcha.org>
parents: 24157
diff changeset
382 extras = util.sortdict((k, extras[k]) for k in sorted(extras))
24238
49cee6d8573d templatekw: give name to lambda that constructs variables map of templater
Yuya Nishihara <yuya@tcha.org>
parents: 24237
diff changeset
383 makemap = lambda k: {'key': k, 'value': extras[k]}
49cee6d8573d templatekw: give name to lambda that constructs variables map of templater
Yuya Nishihara <yuya@tcha.org>
parents: 24237
diff changeset
384 c = [makemap(k) for k in extras]
32036
8bcc8c9b4e9f templatekw: change _showlist() to take mapping dict with no **kwargs expansion
Yuya Nishihara <yuya@tcha.org>
parents: 32035
diff changeset
385 f = _showlist('extra', c, args, plural='extras')
24239
31f9b1b16d1e templatekw: keep raw list or dict in _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 24238
diff changeset
386 return _hybrid(f, extras, makemap,
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
387 lambda k: '%s=%s' % (k, util.escapestr(extras[k])))
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
388
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
389 @templatekeyword('file_adds')
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
390 def showfileadds(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
391 """List of strings. Files added by this changeset."""
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
392 args = pycompat.byteskwargs(args)
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
393 repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
32037
e5eab0fe69ee templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32036
diff changeset
394 return showlist('file_add', getfiles(repo, ctx, revcache)[1], args,
e5eab0fe69ee templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32036
diff changeset
395 element='file')
10056
1a114aca93fa cmdutil: extract file changes closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10055
diff changeset
396
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
397 @templatekeyword('file_copies')
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
398 def showfilecopies(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
399 """List of strings. Files copied in this changeset with
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
400 their sources.
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
401 """
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
402 args = pycompat.byteskwargs(args)
10394
4612cded5176 fix coding style (reported by pylint)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10282
diff changeset
403 cache, ctx = args['cache'], args['ctx']
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
404 copies = args['revcache'].get('copies')
10060
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
405 if copies is None:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
406 if 'getrenamed' not in cache:
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
407 cache['getrenamed'] = getrenamedfn(args['repo'])
10060
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
408 copies = []
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
409 getrenamed = cache['getrenamed']
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
410 for fn in ctx.files():
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
411 rename = getrenamed(fn, ctx.rev())
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
412 if rename:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
413 copies.append((fn, rename[0]))
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
414
24237
9ad02823dc5b templatekw: convert list of key/value pairs to sortdict
Yuya Nishihara <yuya@tcha.org>
parents: 24157
diff changeset
415 copies = util.sortdict(copies)
32038
3920b5970f95 templatekw: factor out showdict() helper
Yuya Nishihara <yuya@tcha.org>
parents: 32037
diff changeset
416 return showdict('file_copy', copies, args, plural='file_copies',
3920b5970f95 templatekw: factor out showdict() helper
Yuya Nishihara <yuya@tcha.org>
parents: 32037
diff changeset
417 key='name', value='source', fmt='%s (%s)')
10060
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
418
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
419 # showfilecopiesswitch() displays file copies only if copy records are
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
420 # provided before calling the templater, usually with a --copies
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
421 # command line switch.
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
422 @templatekeyword('file_copies_switch')
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
423 def showfilecopiesswitch(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
424 """List of strings. Like "file_copies" but displayed
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
425 only if the --copied switch is set.
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
426 """
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
427 args = pycompat.byteskwargs(args)
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
428 copies = args['revcache'].get('copies') or []
24237
9ad02823dc5b templatekw: convert list of key/value pairs to sortdict
Yuya Nishihara <yuya@tcha.org>
parents: 24157
diff changeset
429 copies = util.sortdict(copies)
32038
3920b5970f95 templatekw: factor out showdict() helper
Yuya Nishihara <yuya@tcha.org>
parents: 32037
diff changeset
430 return showdict('file_copy', copies, args, plural='file_copies',
3920b5970f95 templatekw: factor out showdict() helper
Yuya Nishihara <yuya@tcha.org>
parents: 32037
diff changeset
431 key='name', value='source', fmt='%s (%s)')
10058
c829563b3118 cmdutil: extract file copies closure into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10057
diff changeset
432
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
433 @templatekeyword('file_dels')
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
434 def showfiledels(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
435 """List of strings. Files removed by this changeset."""
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
436 args = pycompat.byteskwargs(args)
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
437 repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
32037
e5eab0fe69ee templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32036
diff changeset
438 return showlist('file_del', getfiles(repo, ctx, revcache)[2], args,
e5eab0fe69ee templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32036
diff changeset
439 element='file')
10056
1a114aca93fa cmdutil: extract file changes closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10055
diff changeset
440
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
441 @templatekeyword('file_mods')
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
442 def showfilemods(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
443 """List of strings. Files modified by this changeset."""
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
444 args = pycompat.byteskwargs(args)
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
445 repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
32037
e5eab0fe69ee templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32036
diff changeset
446 return showlist('file_mod', getfiles(repo, ctx, revcache)[0], args,
e5eab0fe69ee templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32036
diff changeset
447 element='file')
10056
1a114aca93fa cmdutil: extract file changes closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10055
diff changeset
448
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
449 @templatekeyword('files')
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
450 def showfiles(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
451 """List of strings. All files modified, added, or removed by this
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
452 changeset.
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
453 """
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
454 args = pycompat.byteskwargs(args)
32037
e5eab0fe69ee templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32036
diff changeset
455 return showlist('file', args['ctx'].files(), args)
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
456
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
457 @templatekeyword('graphnode')
27214
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
458 def showgraphnode(repo, ctx, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
459 """String. The character representing the changeset node in
27214
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
460 an ASCII revision graph"""
27215
5b8da5643a8a templatekw: avoid slow creation of changectx objects in showgraphnode()
Yuya Nishihara <yuya@tcha.org>
parents: 27214
diff changeset
461 wpnodes = repo.dirstate.parents()
5b8da5643a8a templatekw: avoid slow creation of changectx objects in showgraphnode()
Yuya Nishihara <yuya@tcha.org>
parents: 27214
diff changeset
462 if wpnodes[1] == nullid:
5b8da5643a8a templatekw: avoid slow creation of changectx objects in showgraphnode()
Yuya Nishihara <yuya@tcha.org>
parents: 27214
diff changeset
463 wpnodes = wpnodes[:1]
27214
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
464 if ctx.node() in wpnodes:
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
465 return '@'
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
466 elif ctx.obsolete():
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
467 return 'x'
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
468 elif ctx.closesbranch():
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
469 return '_'
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
470 else:
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
471 return 'o'
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
472
33858
6f6c87888b22 log: add a "graphwidth" template variable
Danny Hooper <hooper@google.com>
parents: 33851
diff changeset
473 @templatekeyword('graphwidth')
6f6c87888b22 log: add a "graphwidth" template variable
Danny Hooper <hooper@google.com>
parents: 33851
diff changeset
474 def showgraphwidth(repo, ctx, templ, **args):
6f6c87888b22 log: add a "graphwidth" template variable
Danny Hooper <hooper@google.com>
parents: 33851
diff changeset
475 """Integer. The width of the graph drawn by 'log --graph' or zero."""
6f6c87888b22 log: add a "graphwidth" template variable
Danny Hooper <hooper@google.com>
parents: 33851
diff changeset
476 # The value args['graphwidth'] will be this function, so we use an internal
6f6c87888b22 log: add a "graphwidth" template variable
Danny Hooper <hooper@google.com>
parents: 33851
diff changeset
477 # name to pass the value through props into this function.
6f6c87888b22 log: add a "graphwidth" template variable
Danny Hooper <hooper@google.com>
parents: 33851
diff changeset
478 return args.get('_graphwidth', 0)
6f6c87888b22 log: add a "graphwidth" template variable
Danny Hooper <hooper@google.com>
parents: 33851
diff changeset
479
31807
e6eb86b154c5 templater: provide loop counter as "index" keyword
Yuya Nishihara <yuya@tcha.org>
parents: 31699
diff changeset
480 @templatekeyword('index')
e6eb86b154c5 templater: provide loop counter as "index" keyword
Yuya Nishihara <yuya@tcha.org>
parents: 31699
diff changeset
481 def showindex(**args):
e6eb86b154c5 templater: provide loop counter as "index" keyword
Yuya Nishihara <yuya@tcha.org>
parents: 31699
diff changeset
482 """Integer. The current iteration of the loop. (0 indexed)"""
e6eb86b154c5 templater: provide loop counter as "index" keyword
Yuya Nishihara <yuya@tcha.org>
parents: 31699
diff changeset
483 # just hosts documentation; should be overridden by template mapping
e6eb86b154c5 templater: provide loop counter as "index" keyword
Yuya Nishihara <yuya@tcha.org>
parents: 31699
diff changeset
484 raise error.Abort(_("can't use index in this context"))
e6eb86b154c5 templater: provide loop counter as "index" keyword
Yuya Nishihara <yuya@tcha.org>
parents: 31699
diff changeset
485
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
486 @templatekeyword('latesttag')
25727
b8245386ab40 templatekw: make {latesttag} a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents: 25726
diff changeset
487 def showlatesttag(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
488 """List of strings. The global tags on the most recent globally
31850
f0d719e513fc templatekw: clarify the result of {latesttag} when no tag exists
Matt Harbison <matt_harbison@yahoo.com>
parents: 31807
diff changeset
489 tagged ancestor of this changeset. If no such tags exist, the list
f0d719e513fc templatekw: clarify the result of {latesttag} when no tag exists
Matt Harbison <matt_harbison@yahoo.com>
parents: 31807
diff changeset
490 consists of the single string "null".
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
491 """
26486
8a732c322ca7 templatekw: add {changes}, {distance} and {tag} to the {latesttag} keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 26484
diff changeset
492 return showlatesttags(None, **args)
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
493
26484
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
494 def showlatesttags(pattern, **args):
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
495 """helper method for the latesttag keyword and function"""
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
496 args = pycompat.byteskwargs(args)
26484
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
497 repo, ctx = args['repo'], args['ctx']
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
498 cache = args['cache']
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
499 latesttags = getlatesttags(repo, ctx, cache, pattern)
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
500
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
501 # latesttag[0] is an implementation detail for sorting csets on different
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
502 # branches in a stable manner- it is the date the tagged cset was created,
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
503 # not the date the tag was created. Therefore it isn't made visible here.
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
504 makemap = lambda v: {
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
505 'changes': _showchangessincetag,
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
506 'distance': latesttags[1],
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
507 'latesttag': v, # BC with {latesttag % '{latesttag}'}
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
508 'tag': v
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
509 }
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
510
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
511 tags = latesttags[2]
32036
8bcc8c9b4e9f templatekw: change _showlist() to take mapping dict with no **kwargs expansion
Yuya Nishihara <yuya@tcha.org>
parents: 32035
diff changeset
512 f = _showlist('latesttag', tags, args, separator=':')
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
513 return _hybrid(f, tags, makemap, pycompat.identity)
26484
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
514
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
515 @templatekeyword('latesttagdistance')
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
516 def showlatesttagdistance(repo, ctx, templ, cache, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
517 """Integer. Longest path to the latest tag."""
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
518 return getlatesttags(repo, ctx, cache)[1]
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
519
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
520 @templatekeyword('changessincelatesttag')
25724
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
521 def showchangessincelatesttag(repo, ctx, templ, cache, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
522 """Integer. All ancestors not in the latest tag."""
25724
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
523 latesttag = getlatesttags(repo, ctx, cache)[2][0]
26483
e94f93043a4e templatekw: factor out the changessincetag calculation to a private method
Matt Harbison <matt_harbison@yahoo.com>
parents: 26482
diff changeset
524
e94f93043a4e templatekw: factor out the changessincetag calculation to a private method
Matt Harbison <matt_harbison@yahoo.com>
parents: 26482
diff changeset
525 return _showchangessincetag(repo, ctx, tag=latesttag, **args)
e94f93043a4e templatekw: factor out the changessincetag calculation to a private method
Matt Harbison <matt_harbison@yahoo.com>
parents: 26482
diff changeset
526
e94f93043a4e templatekw: factor out the changessincetag calculation to a private method
Matt Harbison <matt_harbison@yahoo.com>
parents: 26482
diff changeset
527 def _showchangessincetag(repo, ctx, **args):
25724
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
528 offset = 0
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
529 revs = [ctx.rev()]
32973
20ca19e6c74e py3: use r'' to access values from kwargs where keys are str
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32972
diff changeset
530 tag = args[r'tag']
25724
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
531
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
532 # The only() revset doesn't currently support wdir()
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
533 if ctx.rev() is None:
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
534 offset = 1
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
535 revs = [p.rev() for p in ctx.parents()]
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
536
26483
e94f93043a4e templatekw: factor out the changessincetag calculation to a private method
Matt Harbison <matt_harbison@yahoo.com>
parents: 26482
diff changeset
537 return len(repo.revs('only(%ld, %s)', revs, tag)) + offset
25724
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
538
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
539 @templatekeyword('manifest')
10260
fe699ca08a45 templatekw: fix extras, manifest and showlist args (issue1989)
Patrick Mezard <pmezard@gmail.com>
parents: 10060
diff changeset
540 def showmanifest(**args):
32973
20ca19e6c74e py3: use r'' to access values from kwargs where keys are str
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32972
diff changeset
541 repo, ctx, templ = args[r'repo'], args[r'ctx'], args[r'templ']
24676
13c42a883e8b templatekw: have {manifest} use ctx.manifestnode() for consistency
Yuya Nishihara <yuya@tcha.org>
parents: 24337
diff changeset
542 mnode = ctx.manifestnode()
25736
8854ca3fa675 templatekw: apply manifest template only if ctx.manifestnode() exists
Yuya Nishihara <yuya@tcha.org>
parents: 25727
diff changeset
543 if mnode is None:
8854ca3fa675 templatekw: apply manifest template only if ctx.manifestnode() exists
Yuya Nishihara <yuya@tcha.org>
parents: 25727
diff changeset
544 # just avoid crash, we might want to use the 'ff...' hash in future
8854ca3fa675 templatekw: apply manifest template only if ctx.manifestnode() exists
Yuya Nishihara <yuya@tcha.org>
parents: 25727
diff changeset
545 return
10055
e400a511e63a cmdutil: extract repo dependent closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10054
diff changeset
546 args = args.copy()
32973
20ca19e6c74e py3: use r'' to access values from kwargs where keys are str
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32972
diff changeset
547 args.update({r'rev': repo.manifestlog._revlog.rev(mnode),
20ca19e6c74e py3: use r'' to access values from kwargs where keys are str
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32972
diff changeset
548 r'node': hex(mnode)})
10055
e400a511e63a cmdutil: extract repo dependent closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10054
diff changeset
549 return templ('manifest', **args)
e400a511e63a cmdutil: extract repo dependent closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10054
diff changeset
550
27893
b42b2e86ef02 templatekw: move shownames() helper to be sorted alphabetically
Yuya Nishihara <yuya@tcha.org>
parents: 27891
diff changeset
551 def shownames(namespace, **args):
b42b2e86ef02 templatekw: move shownames() helper to be sorted alphabetically
Yuya Nishihara <yuya@tcha.org>
parents: 27891
diff changeset
552 """helper method to generate a template keyword for a namespace"""
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
553 args = pycompat.byteskwargs(args)
27893
b42b2e86ef02 templatekw: move shownames() helper to be sorted alphabetically
Yuya Nishihara <yuya@tcha.org>
parents: 27891
diff changeset
554 ctx = args['ctx']
b42b2e86ef02 templatekw: move shownames() helper to be sorted alphabetically
Yuya Nishihara <yuya@tcha.org>
parents: 27891
diff changeset
555 repo = ctx.repo()
b42b2e86ef02 templatekw: move shownames() helper to be sorted alphabetically
Yuya Nishihara <yuya@tcha.org>
parents: 27891
diff changeset
556 ns = repo.names[namespace]
b42b2e86ef02 templatekw: move shownames() helper to be sorted alphabetically
Yuya Nishihara <yuya@tcha.org>
parents: 27891
diff changeset
557 names = ns.names(repo, ctx.node())
32037
e5eab0fe69ee templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32036
diff changeset
558 return showlist(ns.templatename, names, args, plural=namespace)
27893
b42b2e86ef02 templatekw: move shownames() helper to be sorted alphabetically
Yuya Nishihara <yuya@tcha.org>
parents: 27891
diff changeset
559
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
560 @templatekeyword('namespaces')
27894
a94f7eef3199 templatekw: add {namespaces} keyword
Yuya Nishihara <yuya@tcha.org>
parents: 27893
diff changeset
561 def shownamespaces(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
562 """Dict of lists. Names attached to this changeset per
27894
a94f7eef3199 templatekw: add {namespaces} keyword
Yuya Nishihara <yuya@tcha.org>
parents: 27893
diff changeset
563 namespace."""
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
564 args = pycompat.byteskwargs(args)
27894
a94f7eef3199 templatekw: add {namespaces} keyword
Yuya Nishihara <yuya@tcha.org>
parents: 27893
diff changeset
565 ctx = args['ctx']
a94f7eef3199 templatekw: add {namespaces} keyword
Yuya Nishihara <yuya@tcha.org>
parents: 27893
diff changeset
566 repo = ctx.repo()
33047
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
567
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
568 namespaces = util.sortdict()
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
569 colornames = {}
33048
46fa46608ca5 namespaces: record and expose whether namespace is built-in
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33047
diff changeset
570 builtins = {}
33047
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
571
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
572 for k, ns in repo.names.iteritems():
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
573 namespaces[k] = showlist('name', ns.names(repo, ctx.node()), args)
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
574 colornames[k] = ns.colorname
33048
46fa46608ca5 namespaces: record and expose whether namespace is built-in
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33047
diff changeset
575 builtins[k] = ns.builtin
33047
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
576
32036
8bcc8c9b4e9f templatekw: change _showlist() to take mapping dict with no **kwargs expansion
Yuya Nishihara <yuya@tcha.org>
parents: 32035
diff changeset
577 f = _showlist('namespace', list(namespaces), args)
33047
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
578
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
579 def makemap(ns):
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
580 return {
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
581 'namespace': ns,
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
582 'names': namespaces[ns],
33048
46fa46608ca5 namespaces: record and expose whether namespace is built-in
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33047
diff changeset
583 'builtin': builtins[ns],
33047
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
584 'colorname': colornames[ns],
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
585 }
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
586
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
587 return _hybrid(f, namespaces, makemap, pycompat.identity)
27894
a94f7eef3199 templatekw: add {namespaces} keyword
Yuya Nishihara <yuya@tcha.org>
parents: 27893
diff changeset
588
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
589 @templatekeyword('node')
10055
e400a511e63a cmdutil: extract repo dependent closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10054
diff changeset
590 def shownode(repo, ctx, templ, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
591 """String. The changeset identification hash, as a 40 hexadecimal
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
592 digit string.
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
593 """
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
594 return ctx.hex()
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
595
31699
568c4e7437b2 templatekw: add an "obsolete" keyword
Denis Laxalde <denis@laxalde.org>
parents: 31452
diff changeset
596 @templatekeyword('obsolete')
568c4e7437b2 templatekw: add an "obsolete" keyword
Denis Laxalde <denis@laxalde.org>
parents: 31452
diff changeset
597 def showobsolete(repo, ctx, templ, **args):
568c4e7437b2 templatekw: add an "obsolete" keyword
Denis Laxalde <denis@laxalde.org>
parents: 31452
diff changeset
598 """String. Whether the changeset is obsolete.
568c4e7437b2 templatekw: add an "obsolete" keyword
Denis Laxalde <denis@laxalde.org>
parents: 31452
diff changeset
599 """
568c4e7437b2 templatekw: add an "obsolete" keyword
Denis Laxalde <denis@laxalde.org>
parents: 31452
diff changeset
600 if ctx.obsolete():
568c4e7437b2 templatekw: add an "obsolete" keyword
Denis Laxalde <denis@laxalde.org>
parents: 31452
diff changeset
601 return 'obsolete'
568c4e7437b2 templatekw: add an "obsolete" keyword
Denis Laxalde <denis@laxalde.org>
parents: 31452
diff changeset
602 return ''
568c4e7437b2 templatekw: add an "obsolete" keyword
Denis Laxalde <denis@laxalde.org>
parents: 31452
diff changeset
603
33414
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
604 @templatekeyword('peerpaths')
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
605 def showpeerpaths(repo, **args):
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
606 """A dictionary of repository locations defined in the [paths] section
33476
c0d8de2724ce templatekw: hide {peerpaths} keyword for 4.3
Yuya Nishihara <yuya@tcha.org>
parents: 33414
diff changeset
607 of your configuration file. (EXPERIMENTAL)"""
33414
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
608 # see commands.paths() for naming of dictionary keys
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
609 paths = util.sortdict()
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
610 for k, p in sorted(repo.ui.paths.iteritems()):
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
611 d = util.sortdict()
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
612 d['url'] = p.rawloc
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
613 d.update((o, v) for o, v in sorted(p.suboptions.iteritems()))
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
614 def f():
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
615 yield d['url']
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
616 paths[k] = hybriddict(d, gen=f())
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
617
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
618 # no hybriddict() since d['path'] can't be formatted as a string. perhaps
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
619 # hybriddict() should call templatefilters.stringify(d[value]).
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
620 return _hybrid(None, paths, lambda k: {'name': k, 'path': paths[k]},
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
621 lambda k: '%s=%s' % (k, paths[k]['url']))
33414
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
622
32879
1858fc2327ef template: add predecessors template
Boris Feld <boris.feld@octobus.net>
parents: 32658
diff changeset
623 @templatekeyword("predecessors")
1858fc2327ef template: add predecessors template
Boris Feld <boris.feld@octobus.net>
parents: 32658
diff changeset
624 def showpredecessors(repo, ctx, **args):
1858fc2327ef template: add predecessors template
Boris Feld <boris.feld@octobus.net>
parents: 32658
diff changeset
625 """Returns the list if the closest visible successors
1858fc2327ef template: add predecessors template
Boris Feld <boris.feld@octobus.net>
parents: 32658
diff changeset
626 """
1858fc2327ef template: add predecessors template
Boris Feld <boris.feld@octobus.net>
parents: 32658
diff changeset
627 predecessors = sorted(obsutil.closestpredecessors(repo, ctx.node()))
1858fc2327ef template: add predecessors template
Boris Feld <boris.feld@octobus.net>
parents: 32658
diff changeset
628 predecessors = map(hex, predecessors)
1858fc2327ef template: add predecessors template
Boris Feld <boris.feld@octobus.net>
parents: 32658
diff changeset
629
32910
498e9dcc5fa9 templatekw: populate all keywords depending on predecessor in map operation
Yuya Nishihara <yuya@tcha.org>
parents: 32909
diff changeset
630 return _hybrid(None, predecessors,
498e9dcc5fa9 templatekw: populate all keywords depending on predecessor in map operation
Yuya Nishihara <yuya@tcha.org>
parents: 32909
diff changeset
631 lambda x: {'ctx': repo[x], 'revcache': {}},
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
632 lambda x: scmutil.formatchangeid(repo[x]))
32879
1858fc2327ef template: add predecessors template
Boris Feld <boris.feld@octobus.net>
parents: 32658
diff changeset
633
33276
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
634 @templatekeyword("successorssets")
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
635 def showsuccessorssets(repo, ctx, **args):
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
636 """Returns a string of sets of successors for a changectx
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
637
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
638 Format used is: [ctx1, ctx2], [ctx3] if ctx has been splitted into ctx1 and
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
639 ctx2 while also diverged into ctx3"""
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
640 if not ctx.obsolete():
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
641 return ''
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
642 args = pycompat.byteskwargs(args)
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
643
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
644 ssets = obsutil.successorssets(repo, ctx.node(), closest=True)
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
645 ssets = [[hex(n) for n in ss] for ss in ssets]
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
646
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
647 data = []
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
648 for ss in ssets:
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
649 h = _hybrid(None, ss, lambda x: {'ctx': repo[x], 'revcache': {}},
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
650 lambda x: scmutil.formatchangeid(repo[x]))
33276
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
651 data.append(h)
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
652
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
653 # Format the successorssets
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
654 def render(d):
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
655 t = []
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
656 for i in d.gen:
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
657 t.append(i)
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
658 return "".join(t)
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
659
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
660 def gen(data):
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
661 yield "; ".join(render(d) for d in data)
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
662
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
663 return _hybrid(gen(data), data, lambda x: {'successorset': x},
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
664 pycompat.identity)
33276
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
665
33912
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
666 @templatekeyword("succsandmarkers")
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
667 def showsuccsandmarkers(repo, ctx, **args):
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
668 """Returns a list of dict for each final successor of ctx.
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
669
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
670 The dict contains successors node id in "successors" keys and the list of
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
671 obs-markers from ctx to the set of successors in "markers"
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
672
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
673 (EXPERIMENTAL)
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
674 """
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
675
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
676 values = obsutil.successorsandmarkers(repo, ctx)
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
677
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
678 if values is None:
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
679 values = []
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
680
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
681 # Format successors and markers to avoid exposing binary to templates
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
682 data = []
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
683 for i in values:
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
684 # Format successors
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
685 successors = i['successors']
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
686
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
687 successors = [hex(n) for n in successors]
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
688 successors = _hybrid(None, successors,
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
689 lambda x: {'ctx': repo[x], 'revcache': {}},
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
690 lambda x: scmutil.formatchangeid(repo[x]))
33912
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
691
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
692 # Format markers
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
693 finalmarkers = []
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
694 for m in i['markers']:
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
695 hexprec = hex(m[0])
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
696 hexsucs = tuple(hex(n) for n in m[1])
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
697 hexparents = None
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
698 if m[5] is not None:
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
699 hexparents = tuple(hex(n) for n in m[5])
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
700 newmarker = (hexprec, hexsucs) + m[2:5] + (hexparents,) + m[6:]
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
701 finalmarkers.append(newmarker)
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
702
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
703 data.append({'successors': successors, 'markers': finalmarkers})
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
704
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
705 f = _showlist('succsandmarkers', data, args)
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
706 return _hybrid(f, data, lambda x: x, pycompat.identity)
33912
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
707
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
708 @templatekeyword('p1rev')
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
709 def showp1rev(repo, ctx, templ, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
710 """Integer. The repository-local revision number of the changeset's
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
711 first parent, or -1 if the changeset has no parents."""
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
712 return ctx.p1().rev()
17355
c25531ed58b0 templatekw: add parent1, parent1node, parent2, parent2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
713
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
714 @templatekeyword('p2rev')
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
715 def showp2rev(repo, ctx, templ, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
716 """Integer. The repository-local revision number of the changeset's
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
717 second parent, or -1 if the changeset has no second parent."""
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
718 return ctx.p2().rev()
17355
c25531ed58b0 templatekw: add parent1, parent1node, parent2, parent2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
719
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
720 @templatekeyword('p1node')
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
721 def showp1node(repo, ctx, templ, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
722 """String. The identification hash of the changeset's first parent,
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
723 as a 40 digit hexadecimal string. If the changeset has no parents, all
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
724 digits are 0."""
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
725 return ctx.p1().hex()
17355
c25531ed58b0 templatekw: add parent1, parent1node, parent2, parent2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
726
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
727 @templatekeyword('p2node')
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
728 def showp2node(repo, ctx, templ, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
729 """String. The identification hash of the changeset's second
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
730 parent, as a 40 digit hexadecimal string. If the changeset has no second
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
731 parent, all digits are 0."""
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
732 return ctx.p2().hex()
17355
c25531ed58b0 templatekw: add parent1, parent1node, parent2, parent2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
733
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
734 @templatekeyword('parents')
26435
882b170ae616 templatekw: port implementation of showparents() from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 26434
diff changeset
735 def showparents(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
736 """List of strings. The parents of the changeset in "rev:node"
26434
0a823de8d7b7 templatekw: reorder stub of showparents() function
Yuya Nishihara <yuya@tcha.org>
parents: 26234
diff changeset
737 format. If the changeset has only one "natural" parent (the predecessor
0a823de8d7b7 templatekw: reorder stub of showparents() function
Yuya Nishihara <yuya@tcha.org>
parents: 26234
diff changeset
738 revision) nothing is shown."""
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
739 args = pycompat.byteskwargs(args)
26435
882b170ae616 templatekw: port implementation of showparents() from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 26434
diff changeset
740 repo = args['repo']
882b170ae616 templatekw: port implementation of showparents() from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 26434
diff changeset
741 ctx = args['ctx']
28270
650c9f69a744 templatekw: switch ctx of list expression to rev of {parents} (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 28239
diff changeset
742 pctxs = scmutil.meaningfulparents(repo, ctx)
32974
8779d35c168d py3: use pycompat.bytestr() in place of str()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32973
diff changeset
743 # ifcontains() needs a list of str
33015
f66be4caeaab py3: use "%d" % val for int rather than pycompat.bytestr
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32974
diff changeset
744 prevs = ["%d" % p.rev() for p in pctxs]
26435
882b170ae616 templatekw: port implementation of showparents() from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 26434
diff changeset
745 parents = [[('rev', p.rev()),
882b170ae616 templatekw: port implementation of showparents() from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 26434
diff changeset
746 ('node', p.hex()),
882b170ae616 templatekw: port implementation of showparents() from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 26434
diff changeset
747 ('phase', p.phasestr())]
28270
650c9f69a744 templatekw: switch ctx of list expression to rev of {parents} (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 28239
diff changeset
748 for p in pctxs]
32036
8bcc8c9b4e9f templatekw: change _showlist() to take mapping dict with no **kwargs expansion
Yuya Nishihara <yuya@tcha.org>
parents: 32035
diff changeset
749 f = _showlist('parent', parents, args)
29624
1a129dd05b7d templatekw: fix join format of parents keyword (issue5292)
Yuya Nishihara <yuya@tcha.org>
parents: 29623
diff changeset
750 return _hybrid(f, prevs, lambda x: {'ctx': repo[int(x)], 'revcache': {}},
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
751 lambda x: scmutil.formatchangeid(repo[int(x)]))
26434
0a823de8d7b7 templatekw: reorder stub of showparents() function
Yuya Nishihara <yuya@tcha.org>
parents: 26234
diff changeset
752
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
753 @templatekeyword('phase')
15422
042e11c4e416 phases: add a phase template keyword
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 15155
diff changeset
754 def showphase(repo, ctx, templ, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
755 """String. The changeset phase name."""
15823
a1f818a2b50d phases: ``{phase}`` template keyword display the phase name
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 15422
diff changeset
756 return ctx.phasestr()
a1f818a2b50d phases: ``{phase}`` template keyword display the phase name
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 15422
diff changeset
757
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
758 @templatekeyword('phaseidx')
15823
a1f818a2b50d phases: ``{phase}`` template keyword display the phase name
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 15422
diff changeset
759 def showphaseidx(repo, ctx, templ, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
760 """Integer. The changeset phase index."""
15422
042e11c4e416 phases: add a phase template keyword
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 15155
diff changeset
761 return ctx.phase()
042e11c4e416 phases: add a phase template keyword
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 15155
diff changeset
762
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
763 @templatekeyword('rev')
10055
e400a511e63a cmdutil: extract repo dependent closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10054
diff changeset
764 def showrev(repo, ctx, templ, **args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
765 """Integer. The repository-local changeset revision number."""
32656
4bec8cce6a09 scmutil: pass ctx object to intrev()
Yuya Nishihara <yuya@tcha.org>
parents: 32038
diff changeset
766 return scmutil.intrev(ctx)
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
767
26234
e4609ec959f8 templater: switch ctx of list expression to rev of revset() (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 25984
diff changeset
768 def showrevslist(name, revs, **args):
e4609ec959f8 templater: switch ctx of list expression to rev of revset() (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 25984
diff changeset
769 """helper to generate a list of revisions in which a mapped template will
e4609ec959f8 templater: switch ctx of list expression to rev of revset() (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 25984
diff changeset
770 be evaluated"""
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
771 args = pycompat.byteskwargs(args)
26234
e4609ec959f8 templater: switch ctx of list expression to rev of revset() (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 25984
diff changeset
772 repo = args['ctx'].repo()
32974
8779d35c168d py3: use pycompat.bytestr() in place of str()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32973
diff changeset
773 # ifcontains() needs a list of str
33015
f66be4caeaab py3: use "%d" % val for int rather than pycompat.bytestr
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32974
diff changeset
774 revs = ["%d" % r for r in revs]
32036
8bcc8c9b4e9f templatekw: change _showlist() to take mapping dict with no **kwargs expansion
Yuya Nishihara <yuya@tcha.org>
parents: 32035
diff changeset
775 f = _showlist(name, revs, args)
26234
e4609ec959f8 templater: switch ctx of list expression to rev of revset() (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 25984
diff changeset
776 return _hybrid(f, revs,
29623
33bf8bd8c5b9 templatekw: fix join format of revset() function
Yuya Nishihara <yuya@tcha.org>
parents: 28539
diff changeset
777 lambda x: {name: x, 'ctx': repo[int(x)], 'revcache': {}},
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
778 pycompat.identity)
26234
e4609ec959f8 templater: switch ctx of list expression to rev of revset() (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 25984
diff changeset
779
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
780 @templatekeyword('subrepos')
21897
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
781 def showsubrepos(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
782 """List of strings. Updated subrepositories in the changeset."""
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
783 args = pycompat.byteskwargs(args)
21897
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
784 ctx = args['ctx']
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
785 substate = ctx.substate
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
786 if not substate:
32037
e5eab0fe69ee templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32036
diff changeset
787 return showlist('subrepo', [], args)
21897
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
788 psubstate = ctx.parents()[0].substate or {}
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
789 subrepos = []
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
790 for sub in substate:
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
791 if sub not in psubstate or substate[sub] != psubstate[sub]:
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
792 subrepos.append(sub) # modified or newly added in ctx
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
793 for sub in psubstate:
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
794 if sub not in substate:
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
795 subrepos.append(sub) # removed in ctx
32037
e5eab0fe69ee templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32036
diff changeset
796 return showlist('subrepo', sorted(subrepos), args)
21897
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
797
23977
0870bb93573c templatekw: re-add showtags() to list tags keyword up in online help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23737
diff changeset
798 # don't remove "showtags" definition, even though namespaces will put
0870bb93573c templatekw: re-add showtags() to list tags keyword up in online help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23737
diff changeset
799 # a helper function for "tags" keyword into "keywords" map automatically,
0870bb93573c templatekw: re-add showtags() to list tags keyword up in online help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23737
diff changeset
800 # because online help text is built without namespaces initialization
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
801 @templatekeyword('tags')
23977
0870bb93573c templatekw: re-add showtags() to list tags keyword up in online help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23737
diff changeset
802 def showtags(**args):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
803 """List of strings. Any tags associated with the changeset."""
23977
0870bb93573c templatekw: re-add showtags() to list tags keyword up in online help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23737
diff changeset
804 return shownames('tags', **args)
0870bb93573c templatekw: re-add showtags() to list tags keyword up in online help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23737
diff changeset
805
28538
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28270
diff changeset
806 def loadkeyword(ui, extname, registrarobj):
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28270
diff changeset
807 """Load template keyword from specified registrarobj
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28270
diff changeset
808 """
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28270
diff changeset
809 for name, func in registrarobj._table.iteritems():
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28270
diff changeset
810 keywords[name] = func
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28270
diff changeset
811
30088
d1f5f158768e template: provide a termwidth keyword (issue5395)
Simon Farnsworth <simonfar@fb.com>
parents: 29669
diff changeset
812 @templatekeyword('termwidth')
33850
84a3e04e35b5 templatekw: rename termwidth() per convention
Yuya Nishihara <yuya@tcha.org>
parents: 33782
diff changeset
813 def showtermwidth(repo, ctx, templ, **args):
30088
d1f5f158768e template: provide a termwidth keyword (issue5395)
Simon Farnsworth <simonfar@fb.com>
parents: 29669
diff changeset
814 """Integer. The width of the current terminal."""
d1f5f158768e template: provide a termwidth keyword (issue5395)
Simon Farnsworth <simonfar@fb.com>
parents: 29669
diff changeset
815 return repo.ui.termwidth()
d1f5f158768e template: provide a termwidth keyword (issue5395)
Simon Farnsworth <simonfar@fb.com>
parents: 29669
diff changeset
816
30712
5dde81de1e6d templatekw: add a "troubles" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30375
diff changeset
817 @templatekeyword('troubles')
33709
511d6ae462f3 template: rename troubles templatekw into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33476
diff changeset
818 def showtroubles(repo, **args):
30712
5dde81de1e6d templatekw: add a "troubles" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30375
diff changeset
819 """List of strings. Evolution troubles affecting the changeset.
5dde81de1e6d templatekw: add a "troubles" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30375
diff changeset
820
33709
511d6ae462f3 template: rename troubles templatekw into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33476
diff changeset
821 (DEPRECATED)
511d6ae462f3 template: rename troubles templatekw into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33476
diff changeset
822 """
511d6ae462f3 template: rename troubles templatekw into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33476
diff changeset
823 msg = ("'troubles' is deprecated, "
511d6ae462f3 template: rename troubles templatekw into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33476
diff changeset
824 "use 'instabilities'")
511d6ae462f3 template: rename troubles templatekw into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33476
diff changeset
825 repo.ui.deprecwarn(msg, '4.4')
511d6ae462f3 template: rename troubles templatekw into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33476
diff changeset
826
511d6ae462f3 template: rename troubles templatekw into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33476
diff changeset
827 return showinstabilities(repo=repo, **args)
511d6ae462f3 template: rename troubles templatekw into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33476
diff changeset
828
511d6ae462f3 template: rename troubles templatekw into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33476
diff changeset
829 @templatekeyword('instabilities')
511d6ae462f3 template: rename troubles templatekw into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33476
diff changeset
830 def showinstabilities(**args):
511d6ae462f3 template: rename troubles templatekw into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33476
diff changeset
831 """List of strings. Evolution instabilities affecting the changeset.
511d6ae462f3 template: rename troubles templatekw into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33476
diff changeset
832
30712
5dde81de1e6d templatekw: add a "troubles" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30375
diff changeset
833 (EXPERIMENTAL)
5dde81de1e6d templatekw: add a "troubles" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30375
diff changeset
834 """
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
835 args = pycompat.byteskwargs(args)
33851
7827fbbd0b06 templatekw: specify plural form of instability
Yuya Nishihara <yuya@tcha.org>
parents: 33850
diff changeset
836 return showlist('instability', args['ctx'].instabilities(), args,
7827fbbd0b06 templatekw: specify plural form of instability
Yuya Nishihara <yuya@tcha.org>
parents: 33850
diff changeset
837 plural='instabilities')
30712
5dde81de1e6d templatekw: add a "troubles" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30375
diff changeset
838
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
839 # tell hggettext to extract docstrings from these functions:
26436
a2291c9c85a1 templatekw: remove dockeywords hack
Yuya Nishihara <yuya@tcha.org>
parents: 26435
diff changeset
840 i18nfunctions = keywords.values()