Mercurial > public > mercurial-scm > hg
comparison mercurial/templatefuncs.py @ 38428:aa98392eb5b0
templatefuncs: declare resource requirements for future use
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Thu, 14 Jun 2018 21:18:58 +0900 |
parents | 4b73f316ba0e |
children | dae829b4de78 |
comparison
equal
deleted
inserted
replaced
38427:4b73f316ba0e | 38428:aa98392eb5b0 |
---|---|
83 | 83 |
84 data.update((k, evalfuncarg(context, mapping, v)) | 84 data.update((k, evalfuncarg(context, mapping, v)) |
85 for k, v in args['kwargs'].iteritems()) | 85 for k, v in args['kwargs'].iteritems()) |
86 return templateutil.hybriddict(data) | 86 return templateutil.hybriddict(data) |
87 | 87 |
88 @templatefunc('diff([includepattern [, excludepattern]])') | 88 @templatefunc('diff([includepattern [, excludepattern]])', requires={'ctx'}) |
89 def diff(context, mapping, args): | 89 def diff(context, mapping, args): |
90 """Show a diff, optionally | 90 """Show a diff, optionally |
91 specifying files to include or exclude.""" | 91 specifying files to include or exclude.""" |
92 if len(args) > 2: | 92 if len(args) > 2: |
93 # i18n: "diff" is a keyword | 93 # i18n: "diff" is a keyword |
103 ctx = context.resource(mapping, 'ctx') | 103 ctx = context.resource(mapping, 'ctx') |
104 chunks = ctx.diff(match=ctx.match([], getpatterns(0), getpatterns(1))) | 104 chunks = ctx.diff(match=ctx.match([], getpatterns(0), getpatterns(1))) |
105 | 105 |
106 return ''.join(chunks) | 106 return ''.join(chunks) |
107 | 107 |
108 @templatefunc('extdata(source)', argspec='source') | 108 @templatefunc('extdata(source)', argspec='source', requires={'ctx', 'cache'}) |
109 def extdata(context, mapping, args): | 109 def extdata(context, mapping, args): |
110 """Show a text read from the specified extdata source. (EXPERIMENTAL)""" | 110 """Show a text read from the specified extdata source. (EXPERIMENTAL)""" |
111 if 'source' not in args: | 111 if 'source' not in args: |
112 # i18n: "extdata" is a keyword | 112 # i18n: "extdata" is a keyword |
113 raise error.ParseError(_('extdata expects one argument')) | 113 raise error.ParseError(_('extdata expects one argument')) |
126 data = cache[source] | 126 data = cache[source] |
127 else: | 127 else: |
128 data = cache[source] = scmutil.extdatasource(ctx.repo(), source) | 128 data = cache[source] = scmutil.extdatasource(ctx.repo(), source) |
129 return data.get(ctx.rev(), '') | 129 return data.get(ctx.rev(), '') |
130 | 130 |
131 @templatefunc('files(pattern)') | 131 @templatefunc('files(pattern)', requires={'ctx'}) |
132 def files(context, mapping, args): | 132 def files(context, mapping, args): |
133 """All files of the current changeset matching the pattern. See | 133 """All files of the current changeset matching the pattern. See |
134 :hg:`help patterns`.""" | 134 :hg:`help patterns`.""" |
135 if not len(args) == 1: | 135 if not len(args) == 1: |
136 # i18n: "files" is a keyword | 136 # i18n: "files" is a keyword |
164 except IndexError: | 164 except IndexError: |
165 pass | 165 pass |
166 | 166 |
167 return templatefilters.fill(text, width, initindent, hangindent) | 167 return templatefilters.fill(text, width, initindent, hangindent) |
168 | 168 |
169 @templatefunc('formatnode(node)') | 169 @templatefunc('formatnode(node)', requires={'ui'}) |
170 def formatnode(context, mapping, args): | 170 def formatnode(context, mapping, args): |
171 """Obtain the preferred form of a changeset hash. (DEPRECATED)""" | 171 """Obtain the preferred form of a changeset hash. (DEPRECATED)""" |
172 if len(args) != 1: | 172 if len(args) != 1: |
173 # i18n: "formatnode" is a keyword | 173 # i18n: "formatnode" is a keyword |
174 raise error.ParseError(_("formatnode expects one argument")) | 174 raise error.ParseError(_("formatnode expects one argument")) |
177 node = evalstring(context, mapping, args[0]) | 177 node = evalstring(context, mapping, args[0]) |
178 if ui.debugflag: | 178 if ui.debugflag: |
179 return node | 179 return node |
180 return templatefilters.short(node) | 180 return templatefilters.short(node) |
181 | 181 |
182 @templatefunc('mailmap(author)') | 182 @templatefunc('mailmap(author)', requires={'repo', 'cache'}) |
183 def mailmap(context, mapping, args): | 183 def mailmap(context, mapping, args): |
184 """Return the author, updated according to the value | 184 """Return the author, updated according to the value |
185 set in the .mailmap file""" | 185 set in the .mailmap file""" |
186 if len(args) != 1: | 186 if len(args) != 1: |
187 raise error.ParseError(_("mailmap expects one argument")) | 187 raise error.ParseError(_("mailmap expects one argument")) |
329 joiner = " " | 329 joiner = " " |
330 if len(args) > 1: | 330 if len(args) > 1: |
331 joiner = evalstring(context, mapping, args[1]) | 331 joiner = evalstring(context, mapping, args[1]) |
332 return joinset.join(context, mapping, joiner) | 332 return joinset.join(context, mapping, joiner) |
333 | 333 |
334 @templatefunc('label(label, expr)') | 334 @templatefunc('label(label, expr)', requires={'ui'}) |
335 def label(context, mapping, args): | 335 def label(context, mapping, args): |
336 """Apply a label to generated content. Content with | 336 """Apply a label to generated content. Content with |
337 a label applied can result in additional post-processing, such as | 337 a label applied can result in additional post-processing, such as |
338 automatic colorization.""" | 338 automatic colorization.""" |
339 if len(args) != 2: | 339 if len(args) != 2: |
502 except TypeError: | 502 except TypeError: |
503 # i18n: "obsfateverb" is a keyword | 503 # i18n: "obsfateverb" is a keyword |
504 errmsg = _("obsfateverb first argument should be countable") | 504 errmsg = _("obsfateverb first argument should be countable") |
505 raise error.ParseError(errmsg) | 505 raise error.ParseError(errmsg) |
506 | 506 |
507 @templatefunc('relpath(path)') | 507 @templatefunc('relpath(path)', requires={'repo'}) |
508 def relpath(context, mapping, args): | 508 def relpath(context, mapping, args): |
509 """Convert a repository-absolute path into a filesystem path relative to | 509 """Convert a repository-absolute path into a filesystem path relative to |
510 the current working directory.""" | 510 the current working directory.""" |
511 if len(args) != 1: | 511 if len(args) != 1: |
512 # i18n: "relpath" is a keyword | 512 # i18n: "relpath" is a keyword |
514 | 514 |
515 repo = context.resource(mapping, 'repo') | 515 repo = context.resource(mapping, 'repo') |
516 path = evalstring(context, mapping, args[0]) | 516 path = evalstring(context, mapping, args[0]) |
517 return repo.pathto(path) | 517 return repo.pathto(path) |
518 | 518 |
519 @templatefunc('revset(query[, formatargs...])') | 519 @templatefunc('revset(query[, formatargs...])', requires={'repo', 'cache'}) |
520 def revset(context, mapping, args): | 520 def revset(context, mapping, args): |
521 """Execute a revision set query. See | 521 """Execute a revision set query. See |
522 :hg:`help revset`.""" | 522 :hg:`help revset`.""" |
523 if not len(args) > 0: | 523 if not len(args) > 0: |
524 # i18n: "revset" is a keyword | 524 # i18n: "revset" is a keyword |
575 first = False | 575 first = False |
576 else: | 576 else: |
577 yield sep | 577 yield sep |
578 yield argstr | 578 yield argstr |
579 | 579 |
580 @templatefunc('shortest(node, minlength=4)') | 580 @templatefunc('shortest(node, minlength=4)', requires={'repo'}) |
581 def shortest(context, mapping, args): | 581 def shortest(context, mapping, args): |
582 """Obtain the shortest representation of | 582 """Obtain the shortest representation of |
583 a node.""" | 583 a node.""" |
584 if not (1 <= len(args) <= 2): | 584 if not (1 <= len(args) <= 2): |
585 # i18n: "shortest" is a keyword | 585 # i18n: "shortest" is a keyword |