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() |