mercurial/templatekw.py
changeset 33017 c31d45623304
parent 33015 f66be4caeaab
child 33047 de8e3681c402
equal deleted inserted replaced
33016:4e6dc34b5d7a 33017:c31d45623304
   117     map, expand it instead of 'foo' for last key.
   117     map, expand it instead of 'foo' for last key.
   118 
   118 
   119     expand 'end_foos'.
   119     expand 'end_foos'.
   120     '''
   120     '''
   121     templ = mapping['templ']
   121     templ = mapping['templ']
       
   122     strmapping = pycompat.strkwargs(mapping)
   122     if not plural:
   123     if not plural:
   123         plural = name + 's'
   124         plural = name + 's'
   124     if not values:
   125     if not values:
   125         noname = 'no_' + plural
   126         noname = 'no_' + plural
   126         if noname in templ:
   127         if noname in templ:
   127             yield templ(noname, **mapping)
   128             yield templ(noname, **strmapping)
   128         return
   129         return
   129     if name not in templ:
   130     if name not in templ:
   130         if isinstance(values[0], bytes):
   131         if isinstance(values[0], bytes):
   131             yield separator.join(values)
   132             yield separator.join(values)
   132         else:
   133         else:
   133             for v in values:
   134             for v in values:
   134                 yield dict(v, **mapping)
   135                 yield dict(v, **strmapping)
   135         return
   136         return
   136     startname = 'start_' + plural
   137     startname = 'start_' + plural
   137     if startname in templ:
   138     if startname in templ:
   138         yield templ(startname, **mapping)
   139         yield templ(startname, **strmapping)
   139     vmapping = mapping.copy()
   140     vmapping = mapping.copy()
   140     def one(v, tag=name):
   141     def one(v, tag=name):
   141         try:
   142         try:
   142             vmapping.update(v)
   143             vmapping.update(v)
   143         except (AttributeError, ValueError):
   144         except (AttributeError, ValueError):
   144             try:
   145             try:
   145                 for a, b in v:
   146                 for a, b in v:
   146                     vmapping[a] = b
   147                     vmapping[a] = b
   147             except ValueError:
   148             except ValueError:
   148                 vmapping[name] = v
   149                 vmapping[name] = v
   149         return templ(tag, **vmapping)
   150         return templ(tag, **pycompat.strkwargs(vmapping))
   150     lastname = 'last_' + name
   151     lastname = 'last_' + name
   151     if lastname in templ:
   152     if lastname in templ:
   152         last = values.pop()
   153         last = values.pop()
   153     else:
   154     else:
   154         last = None
   155         last = None
   156         yield one(v)
   157         yield one(v)
   157     if last is not None:
   158     if last is not None:
   158         yield one(last, tag=lastname)
   159         yield one(last, tag=lastname)
   159     endname = 'end_' + plural
   160     endname = 'end_' + plural
   160     if endname in templ:
   161     if endname in templ:
   161         yield templ(endname, **mapping)
   162         yield templ(endname, **strmapping)
   162 
   163 
   163 def _formatrevnode(ctx):
   164 def _formatrevnode(ctx):
   164     """Format changeset as '{rev}:{node|formatnode}', which is the default
   165     """Format changeset as '{rev}:{node|formatnode}', which is the default
   165     template provided by cmdutil.changeset_templater"""
   166     template provided by cmdutil.changeset_templater"""
   166     repo = ctx.repo()
   167     repo = ctx.repo()