mercurial/templatekw.py
changeset 34581 ee0d74083a22
parent 34541 0a0a72c043ac
child 34656 eb7fffdc6e5b
equal deleted inserted replaced
34580:7259f0ddfc0f 34581:ee0d74083a22
    35     - "{ifcontains(file, files, ...)}", "{ifcontains(key, extras, ...)}"
    35     - "{ifcontains(file, files, ...)}", "{ifcontains(key, extras, ...)}"
    36     - "{get(extras, key)}"
    36     - "{get(extras, key)}"
    37     - "{files|json}"
    37     - "{files|json}"
    38     """
    38     """
    39 
    39 
    40     def __init__(self, gen, values, makemap, joinfmt):
    40     def __init__(self, gen, values, makemap, joinfmt, keytype=None):
    41         if gen is not None:
    41         if gen is not None:
    42             self.gen = gen  # generator or function returning generator
    42             self.gen = gen  # generator or function returning generator
    43         self._values = values
    43         self._values = values
    44         self._makemap = makemap
    44         self._makemap = makemap
    45         self.joinfmt = joinfmt
    45         self.joinfmt = joinfmt
       
    46         self.keytype = keytype  # hint for 'x in y' where type(x) is unresolved
    46     def gen(self):
    47     def gen(self):
    47         """Default generator to stringify this as {join(self, ' ')}"""
    48         """Default generator to stringify this as {join(self, ' ')}"""
    48         for i, x in enumerate(self._values):
    49         for i, x in enumerate(self._values):
    49             if i > 0:
    50             if i > 0:
    50                 yield ' '
    51                 yield ' '
   786     revision) nothing is shown."""
   787     revision) nothing is shown."""
   787     args = pycompat.byteskwargs(args)
   788     args = pycompat.byteskwargs(args)
   788     repo = args['repo']
   789     repo = args['repo']
   789     ctx = args['ctx']
   790     ctx = args['ctx']
   790     pctxs = scmutil.meaningfulparents(repo, ctx)
   791     pctxs = scmutil.meaningfulparents(repo, ctx)
   791     # ifcontains() needs a list of str
   792     prevs = [p.rev() for p in pctxs]
   792     prevs = ["%d" % p.rev() for p in pctxs]
       
   793     parents = [[('rev', p.rev()),
   793     parents = [[('rev', p.rev()),
   794                 ('node', p.hex()),
   794                 ('node', p.hex()),
   795                 ('phase', p.phasestr())]
   795                 ('phase', p.phasestr())]
   796                for p in pctxs]
   796                for p in pctxs]
   797     f = _showlist('parent', parents, args)
   797     f = _showlist('parent', parents, args)
   798     return _hybrid(f, prevs, lambda x: {'ctx': repo[int(x)], 'revcache': {}},
   798     return _hybrid(f, prevs, lambda x: {'ctx': repo[x], 'revcache': {}},
   799                    lambda x: scmutil.formatchangeid(repo[int(x)]))
   799                    lambda x: scmutil.formatchangeid(repo[x]), keytype=int)
   800 
   800 
   801 @templatekeyword('phase')
   801 @templatekeyword('phase')
   802 def showphase(repo, ctx, templ, **args):
   802 def showphase(repo, ctx, templ, **args):
   803     """String. The changeset phase name."""
   803     """String. The changeset phase name."""
   804     return ctx.phasestr()
   804     return ctx.phasestr()
   816 def showrevslist(name, revs, **args):
   816 def showrevslist(name, revs, **args):
   817     """helper to generate a list of revisions in which a mapped template will
   817     """helper to generate a list of revisions in which a mapped template will
   818     be evaluated"""
   818     be evaluated"""
   819     args = pycompat.byteskwargs(args)
   819     args = pycompat.byteskwargs(args)
   820     repo = args['ctx'].repo()
   820     repo = args['ctx'].repo()
   821     # ifcontains() needs a list of str
   821     f = _showlist(name, ['%d' % r for r in revs], args)
   822     revs = ["%d" % r for r in revs]
       
   823     f = _showlist(name, revs, args)
       
   824     return _hybrid(f, revs,
   822     return _hybrid(f, revs,
   825                    lambda x: {name: x, 'ctx': repo[int(x)], 'revcache': {}},
   823                    lambda x: {name: x, 'ctx': repo[x], 'revcache': {}},
   826                    pycompat.identity)
   824                    pycompat.identity, keytype=int)
   827 
   825 
   828 @templatekeyword('subrepos')
   826 @templatekeyword('subrepos')
   829 def showsubrepos(**args):
   827 def showsubrepos(**args):
   830     """List of strings. Updated subrepositories in the changeset."""
   828     """List of strings. Updated subrepositories in the changeset."""
   831     args = pycompat.byteskwargs(args)
   829     args = pycompat.byteskwargs(args)