mercurial/cmdutil.py
changeset 10152 56284451a22c
parent 10111 27457d31ae3f
child 10160 48653dea23dd
equal deleted inserted replaced
10151:c7355a0e1f39 10152:56284451a22c
   635         self.patch = patch
   635         self.patch = patch
   636         self.diffopts = diffopts
   636         self.diffopts = diffopts
   637         self.header = {}
   637         self.header = {}
   638         self.hunk = {}
   638         self.hunk = {}
   639         self.lastheader = None
   639         self.lastheader = None
       
   640         self.footer = None
   640 
   641 
   641     def flush(self, rev):
   642     def flush(self, rev):
   642         if rev in self.header:
   643         if rev in self.header:
   643             h = self.header[rev]
   644             h = self.header[rev]
   644             if h != self.lastheader:
   645             if h != self.lastheader:
   648         if rev in self.hunk:
   649         if rev in self.hunk:
   649             self.ui.write(self.hunk[rev])
   650             self.ui.write(self.hunk[rev])
   650             del self.hunk[rev]
   651             del self.hunk[rev]
   651             return 1
   652             return 1
   652         return 0
   653         return 0
       
   654 
       
   655     def close(self):
       
   656         if self.footer:
       
   657             self.ui.write(self.footer)
   653 
   658 
   654     def show(self, ctx, copies=None, **props):
   659     def show(self, ctx, copies=None, **props):
   655         if self.buffered:
   660         if self.buffered:
   656             self.ui.pushbuffer()
   661             self.ui.pushbuffer()
   657             self._show(ctx, copies, props)
   662             self._show(ctx, copies, props)
   815             (self.ui.verbose, 'verbose'),
   820             (self.ui.verbose, 'verbose'),
   816             (self.ui.quiet, 'quiet'),
   821             (self.ui.quiet, 'quiet'),
   817             (self.ui.debugflag, 'debug'),
   822             (self.ui.debugflag, 'debug'),
   818         ]
   823         ]
   819 
   824 
   820         types = {'header': '', 'changeset': 'changeset'}
   825         types = {'header': '', 'footer':'', 'changeset': 'changeset'}
   821         for mode, postfix  in tmplmodes:
   826         for mode, postfix  in tmplmodes:
   822             for type in types:
   827             for type in types:
   823                 cur = postfix and ('%s_%s' % (type, postfix)) or type
   828                 cur = postfix and ('%s_%s' % (type, postfix)) or type
   824                 if mode and cur in self.t:
   829                 if mode and cur in self.t:
   825                     types[type] = cur
   830                     types[type] = cur
   836 
   841 
   837             # write changeset metadata, then patch if requested
   842             # write changeset metadata, then patch if requested
   838             key = types['changeset']
   843             key = types['changeset']
   839             self.ui.write(templater.stringify(self.t(key, **props)))
   844             self.ui.write(templater.stringify(self.t(key, **props)))
   840             self.showpatch(ctx.node())
   845             self.showpatch(ctx.node())
       
   846 
       
   847             if types['header']:
       
   848                 if not self.footer:
       
   849                     self.footer = templater.stringify(self.t(types['footer'],
       
   850                                                       **props))
   841 
   851 
   842         except KeyError, inst:
   852         except KeyError, inst:
   843             msg = _("%s: no key named '%s'")
   853             msg = _("%s: no key named '%s'")
   844             raise util.Abort(msg % (self.t.mapfile, inst.args[0]))
   854             raise util.Abort(msg % (self.t.mapfile, inst.args[0]))
   845         except SyntaxError, inst:
   855         except SyntaxError, inst: