153 if n >= 2 or s == 1: |
153 if n >= 2 or s == 1: |
154 return fmt(t, n) |
154 return fmt(t, n) |
155 |
155 |
156 def stringify(thing): |
156 def stringify(thing): |
157 '''turn nested template iterator into string.''' |
157 '''turn nested template iterator into string.''' |
158 def flatten(thing): |
158 if hasattr(thing, '__iter__'): |
159 if hasattr(thing, '__iter__'): |
159 return "".join([stringify(t) for t in thing]) |
160 for t in thing: |
160 return str(thing) |
161 for i in flatten(t): |
|
162 yield i |
|
163 else: |
|
164 yield str(thing) |
|
165 return "".join(flatten(thing)) |
|
166 |
161 |
167 para_re = None |
162 para_re = None |
168 space_re = None |
163 space_re = None |
169 |
164 |
170 def fill(text, width): |
165 def fill(text, width): |
307 self.repo = repo |
302 self.repo = repo |
308 |
303 |
309 def use_template(self, t): |
304 def use_template(self, t): |
310 '''set template string to use''' |
305 '''set template string to use''' |
311 self.t.cache['changeset'] = t |
306 self.t.cache['changeset'] = t |
312 |
|
313 def write(self, thing, header=False): |
|
314 '''write expanded template. |
|
315 uses in-order recursive traverse of iterators.''' |
|
316 dest = self.dest or self.ui |
|
317 for t in thing: |
|
318 if hasattr(t, '__iter__'): |
|
319 self.write(t, header=header) |
|
320 elif header: |
|
321 dest.write_header(t) |
|
322 else: |
|
323 dest.write(t) |
|
324 |
|
325 def write_header(self, thing): |
|
326 self.write(thing, header=True) |
|
327 |
307 |
328 def show(self, rev=0, changenode=None, brinfo=None, copies=[], **props): |
308 def show(self, rev=0, changenode=None, brinfo=None, copies=[], **props): |
329 '''show a single changeset or file revision''' |
309 '''show a single changeset or file revision''' |
330 log = self.repo.changelog |
310 log = self.repo.changelog |
331 if changenode is None: |
311 if changenode is None: |
487 elif 'header' in self.t: |
468 elif 'header' in self.t: |
488 key = 'header' |
469 key = 'header' |
489 else: |
470 else: |
490 key = '' |
471 key = '' |
491 if key: |
472 if key: |
492 self.write_header(self.t(key, **props)) |
473 dest.write_header(stringify(self.t(key, **props))) |
493 if self.ui.debugflag and 'changeset_debug' in self.t: |
474 if self.ui.debugflag and 'changeset_debug' in self.t: |
494 key = 'changeset_debug' |
475 key = 'changeset_debug' |
495 elif self.ui.quiet and 'changeset_quiet' in self.t: |
476 elif self.ui.quiet and 'changeset_quiet' in self.t: |
496 key = 'changeset_quiet' |
477 key = 'changeset_quiet' |
497 elif self.ui.verbose and 'changeset_verbose' in self.t: |
478 elif self.ui.verbose and 'changeset_verbose' in self.t: |
498 key = 'changeset_verbose' |
479 key = 'changeset_verbose' |
499 else: |
480 else: |
500 key = 'changeset' |
481 key = 'changeset' |
501 self.write(self.t(key, **props)) |
482 dest.write(stringify(self.t(key, **props))) |
502 except KeyError, inst: |
483 except KeyError, inst: |
503 raise util.Abort(_("%s: no key named '%s'") % (self.t.mapfile, |
484 raise util.Abort(_("%s: no key named '%s'") % (self.t.mapfile, |
504 inst.args[0])) |
485 inst.args[0])) |
505 except SyntaxError, inst: |
486 except SyntaxError, inst: |
506 raise util.Abort(_('%s: %s') % (self.t.mapfile, inst.args[0])) |
487 raise util.Abort(_('%s: %s') % (self.t.mapfile, inst.args[0])) |