448 partnames = [p for p in self._parts.keys() if p != tmplspec.ref] |
447 partnames = [p for p in self._parts.keys() if p != tmplspec.ref] |
449 m = formatter.templatepartsmap(tmplspec, self.t, partnames) |
448 m = formatter.templatepartsmap(tmplspec, self.t, partnames) |
450 self._parts.update(m) |
449 self._parts.update(m) |
451 |
450 |
452 if self._parts['docheader']: |
451 if self._parts['docheader']: |
453 self.ui.write( |
452 self.ui.write(self.t.render(self._parts['docheader'], {})) |
454 templateutil.stringify(self.t(self._parts['docheader']))) |
|
455 |
453 |
456 def close(self): |
454 def close(self): |
457 if self._parts['docfooter']: |
455 if self._parts['docfooter']: |
458 if not self.footer: |
456 if not self.footer: |
459 self.footer = "" |
457 self.footer = "" |
460 self.footer += templateutil.stringify( |
458 self.footer += self.t.render(self._parts['docfooter'], {}) |
461 self.t(self._parts['docfooter'])) |
|
462 return super(changesettemplater, self).close() |
459 return super(changesettemplater, self).close() |
463 |
460 |
464 def _show(self, ctx, copies, props): |
461 def _show(self, ctx, copies, props): |
465 '''show a single changeset or file revision''' |
462 '''show a single changeset or file revision''' |
466 props = props.copy() |
463 props = props.copy() |
467 props['ctx'] = ctx |
464 props['ctx'] = ctx |
468 props['index'] = index = next(self._counter) |
465 props['index'] = index = next(self._counter) |
469 props['revcache'] = {'copies': copies} |
466 props['revcache'] = {'copies': copies} |
470 props = pycompat.strkwargs(props) |
|
471 |
467 |
472 # write separator, which wouldn't work well with the header part below |
468 # write separator, which wouldn't work well with the header part below |
473 # since there's inherently a conflict between header (across items) and |
469 # since there's inherently a conflict between header (across items) and |
474 # separator (per item) |
470 # separator (per item) |
475 if self._parts['separator'] and index > 0: |
471 if self._parts['separator'] and index > 0: |
476 self.ui.write( |
472 self.ui.write(self.t.render(self._parts['separator'], {})) |
477 templateutil.stringify(self.t(self._parts['separator']))) |
|
478 |
473 |
479 # write header |
474 # write header |
480 if self._parts['header']: |
475 if self._parts['header']: |
481 h = templateutil.stringify(self.t(self._parts['header'], **props)) |
476 h = self.t.render(self._parts['header'], props) |
482 if self.buffered: |
477 if self.buffered: |
483 self.header[ctx.rev()] = h |
478 self.header[ctx.rev()] = h |
484 else: |
479 else: |
485 if self.lastheader != h: |
480 if self.lastheader != h: |
486 self.lastheader = h |
481 self.lastheader = h |
487 self.ui.write(h) |
482 self.ui.write(h) |
488 |
483 |
489 # write changeset metadata, then patch if requested |
484 # write changeset metadata, then patch if requested |
490 key = self._parts[self._tref] |
485 key = self._parts[self._tref] |
491 self.ui.write(templateutil.stringify(self.t(key, **props))) |
486 self.ui.write(self.t.render(key, props)) |
492 self._showpatch(ctx) |
487 self._showpatch(ctx) |
493 |
488 |
494 if self._parts['footer']: |
489 if self._parts['footer']: |
495 if not self.footer: |
490 if not self.footer: |
496 self.footer = templateutil.stringify( |
491 self.footer = self.t.render(self._parts['footer'], props) |
497 self.t(self._parts['footer'], **props)) |
|
498 |
492 |
499 def templatespec(tmpl, mapfile): |
493 def templatespec(tmpl, mapfile): |
500 if mapfile: |
494 if mapfile: |
501 return formatter.templatespec('changeset', tmpl, mapfile) |
495 return formatter.templatespec('changeset', tmpl, mapfile) |
502 else: |
496 else: |