##// END OF EJS Templates
use ui buffering in changeset printer...
Matt Mackall -
r3738:cb48cd27 default
parent child Browse files
Show More
@@ -9,7 +9,7 b' from demandload import demandload'
9 from node import *
9 from node import *
10 from i18n import gettext as _
10 from i18n import gettext as _
11 demandload(globals(), 'os sys')
11 demandload(globals(), 'os sys')
12 demandload(globals(), 'mdiff util templater cStringIO patch')
12 demandload(globals(), 'mdiff util templater patch')
13
13
14 revrangesep = ':'
14 revrangesep = ':'
15
15
@@ -196,45 +196,6 b' def addremove(repo, pats=[], opts={}, wl'
196 if not dry_run:
196 if not dry_run:
197 repo.copy(old, new, wlock=wlock)
197 repo.copy(old, new, wlock=wlock)
198
198
199 class uibuffer(object):
200 # Implement and delegate some ui protocol. Save hunks of
201 # output for later display in the desired order.
202 def __init__(self, ui):
203 self.ui = ui
204 self.hunk = {}
205 self.header = {}
206 self.quiet = ui.quiet
207 self.verbose = ui.verbose
208 self.debugflag = ui.debugflag
209 self.lastheader = None
210 def note(self, *args):
211 if self.verbose:
212 self.write(*args)
213 def status(self, *args):
214 if not self.quiet:
215 self.write(*args)
216 def debug(self, *args):
217 if self.debugflag:
218 self.write(*args)
219 def write(self, *args):
220 self.hunk.setdefault(self.rev, []).extend(args)
221 def write_header(self, *args):
222 self.header.setdefault(self.rev, []).extend(args)
223 def mark(self, rev):
224 self.rev = rev
225 def flush(self, rev):
226 if rev in self.header:
227 h = "".join(self.header[rev])
228 if h != self.lastheader:
229 self.lastheader = h
230 self.ui.write(h)
231 del self.header[rev]
232 if rev in self.hunk:
233 self.ui.write("".join(self.hunk[rev]))
234 del self.hunk[rev]
235 return 1
236 return 0
237
238 class changeset_printer(object):
199 class changeset_printer(object):
239 '''show changeset information when templating not requested.'''
200 '''show changeset information when templating not requested.'''
240
201
@@ -244,16 +205,33 b' class changeset_printer(object):'
244 self.buffered = buffered
205 self.buffered = buffered
245 self.patch = patch
206 self.patch = patch
246 self.brinfo = brinfo
207 self.brinfo = brinfo
247 if buffered:
208 self.header = {}
248 self.ui = uibuffer(ui)
209 self.hunk = {}
210 self.lastheader = None
249
211
250 def flush(self, rev):
212 def flush(self, rev):
251 return self.ui.flush(rev)
213 if rev in self.header:
214 h = self.header[rev]
215 if h != self.lastheader:
216 self.lastheader = h
217 self.ui.write(h)
218 del self.header[rev]
219 if rev in self.hunk:
220 self.ui.write(self.hunk[rev])
221 del self.hunk[rev]
222 return 1
223 return 0
252
224
253 def show(self, rev=0, changenode=None, copies=None):
225 def show(self, rev=0, changenode=None, copies=None, **props):
226 if self.buffered:
227 self.ui.pushbuffer()
228 self._show(rev, changenode, copies, props)
229 self.hunk[rev] = self.ui.popbuffer()
230 else:
231 self._show(rev, changenode, copies, props)
232
233 def _show(self, rev, changenode, copies, props):
254 '''show a single changeset or file revision'''
234 '''show a single changeset or file revision'''
255 if self.buffered:
256 self.ui.mark(rev)
257 log = self.repo.changelog
235 log = self.repo.changelog
258 if changenode is None:
236 if changenode is None:
259 changenode = log.node(rev)
237 changenode = log.node(rev)
@@ -352,10 +330,8 b' class changeset_templater(changeset_prin'
352 '''set template string to use'''
330 '''set template string to use'''
353 self.t.cache['changeset'] = t
331 self.t.cache['changeset'] = t
354
332
355 def show(self, rev=0, changenode=None, copies=[], **props):
333 def _show(self, rev, changenode, copies, props):
356 '''show a single changeset or file revision'''
334 '''show a single changeset or file revision'''
357 if self.buffered:
358 self.ui.mark(rev)
359 log = self.repo.changelog
335 log = self.repo.changelog
360 if changenode is None:
336 if changenode is None:
361 changenode = log.node(rev)
337 changenode = log.node(rev)
@@ -513,7 +489,7 b' class changeset_templater(changeset_prin'
513 if key:
489 if key:
514 h = templater.stringify(self.t(key, **props))
490 h = templater.stringify(self.t(key, **props))
515 if self.buffered:
491 if self.buffered:
516 self.ui.write_header(h)
492 self.header[rev] = h
517 else:
493 else:
518 self.ui.write(h)
494 self.ui.write(h)
519 if self.ui.debugflag and 'changeset_debug' in self.t:
495 if self.ui.debugflag and 'changeset_debug' in self.t:
@@ -532,20 +508,6 b' class changeset_templater(changeset_prin'
532 except SyntaxError, inst:
508 except SyntaxError, inst:
533 raise util.Abort(_('%s: %s') % (self.t.mapfile, inst.args[0]))
509 raise util.Abort(_('%s: %s') % (self.t.mapfile, inst.args[0]))
534
510
535 class stringio(object):
536 '''wrap cStringIO for use by changeset_templater.'''
537 def __init__(self):
538 self.fp = cStringIO.StringIO()
539
540 def write(self, *args):
541 for a in args:
542 self.fp.write(a)
543
544 write_header = write
545
546 def __getattr__(self, key):
547 return getattr(self.fp, key)
548
549 def show_changeset(ui, repo, opts, buffered=False):
511 def show_changeset(ui, repo, opts, buffered=False):
550 """show one changeset using template or regular display.
512 """show one changeset using template or regular display.
551
513
General Comments 0
You need to be logged in to leave comments. Login now