--- a/mercurial/templater.py Mon Nov 13 13:26:57 2006 -0600
+++ b/mercurial/templater.py Mon Nov 13 13:26:57 2006 -0600
@@ -8,7 +8,7 @@
from demandload import demandload
from i18n import gettext as _
from node import *
-demandload(globals(), "cStringIO cgi re sys os time urllib util textwrap")
+demandload(globals(), "cgi re sys os time urllib util textwrap")
def parsestring(s, quoted=True):
'''parse a string using simple c-like syntax.
@@ -290,204 +290,3 @@
if (name and os.path.exists(p)) or os.path.isdir(p):
return os.path.normpath(p)
-class changeset_templater(object):
- '''format changeset information.'''
-
- def __init__(self, ui, repo, mapfile, dest=None):
- self.t = templater(mapfile, common_filters,
- cache={'parent': '{rev}:{node|short} ',
- 'manifest': '{rev}:{node|short}',
- 'filecopy': '{name} ({source})'})
- self.ui = ui
- self.dest = dest
- self.repo = repo
-
- def use_template(self, t):
- '''set template string to use'''
- self.t.cache['changeset'] = t
-
- def show(self, rev=0, changenode=None, brinfo=None, copies=[], **props):
- '''show a single changeset or file revision'''
- log = self.repo.changelog
- if changenode is None:
- changenode = log.node(rev)
- elif not rev:
- rev = log.rev(changenode)
-
- changes = log.read(changenode)
-
- def showlist(name, values, plural=None, **args):
- '''expand set of values.
- name is name of key in template map.
- values is list of strings or dicts.
- plural is plural of name, if not simply name + 's'.
-
- expansion works like this, given name 'foo'.
-
- if values is empty, expand 'no_foos'.
-
- if 'foo' not in template map, return values as a string,
- joined by space.
-
- expand 'start_foos'.
-
- for each value, expand 'foo'. if 'last_foo' in template
- map, expand it instead of 'foo' for last key.
-
- expand 'end_foos'.
- '''
- if plural: names = plural
- else: names = name + 's'
- if not values:
- noname = 'no_' + names
- if noname in self.t:
- yield self.t(noname, **args)
- return
- if name not in self.t:
- if isinstance(values[0], str):
- yield ' '.join(values)
- else:
- for v in values:
- yield dict(v, **args)
- return
- startname = 'start_' + names
- if startname in self.t:
- yield self.t(startname, **args)
- vargs = args.copy()
- def one(v, tag=name):
- try:
- vargs.update(v)
- except (AttributeError, ValueError):
- try:
- for a, b in v:
- vargs[a] = b
- except ValueError:
- vargs[name] = v
- return self.t(tag, **vargs)
- lastname = 'last_' + name
- if lastname in self.t:
- last = values.pop()
- else:
- last = None
- for v in values:
- yield one(v)
- if last is not None:
- yield one(last, tag=lastname)
- endname = 'end_' + names
- if endname in self.t:
- yield self.t(endname, **args)
-
- def showbranches(**args):
- branch = changes[5].get("branch")
- if branch:
- yield showlist('branch', [branch], plural='branches', **args)
- # add old style branches if requested
- if brinfo and changenode in brinfo:
- yield showlist('branch', brinfo[changenode],
- plural='branches', **args)
-
- def showparents(**args):
- parents = [[('rev', log.rev(p)), ('node', hex(p))]
- for p in log.parents(changenode)
- if self.ui.debugflag or p != nullid]
- if (not self.ui.debugflag and len(parents) == 1 and
- parents[0][0][1] == rev - 1):
- return
- return showlist('parent', parents, **args)
-
- def showtags(**args):
- return showlist('tag', self.repo.nodetags(changenode), **args)
-
- def showextras(**args):
- extras = changes[5].items()
- extras.sort()
- for key, value in extras:
- args = args.copy()
- args.update(dict(key=key, value=value))
- yield self.t('extra', **args)
-
- def showcopies(**args):
- c = [{'name': x[0], 'source': x[1]} for x in copies]
- return showlist('file_copy', c, plural='file_copies', **args)
-
- if self.ui.debugflag:
- files = self.repo.status(log.parents(changenode)[0], changenode)[:3]
- def showfiles(**args):
- return showlist('file', files[0], **args)
- def showadds(**args):
- return showlist('file_add', files[1], **args)
- def showdels(**args):
- return showlist('file_del', files[2], **args)
- def showmanifest(**args):
- args = args.copy()
- args.update(dict(rev=self.repo.manifest.rev(changes[0]),
- node=hex(changes[0])))
- return self.t('manifest', **args)
- else:
- def showfiles(**args):
- yield showlist('file', changes[3], **args)
- showadds = ''
- showdels = ''
- showmanifest = ''
-
- defprops = {
- 'author': changes[1],
- 'branches': showbranches,
- 'date': changes[2],
- 'desc': changes[4],
- 'file_adds': showadds,
- 'file_dels': showdels,
- 'files': showfiles,
- 'file_copies': showcopies,
- 'manifest': showmanifest,
- 'node': hex(changenode),
- 'parents': showparents,
- 'rev': rev,
- 'tags': showtags,
- 'extras': showextras,
- }
- props = props.copy()
- props.update(defprops)
-
- try:
- dest = self.dest or self.ui
- if self.ui.debugflag and 'header_debug' in self.t:
- key = 'header_debug'
- elif self.ui.quiet and 'header_quiet' in self.t:
- key = 'header_quiet'
- elif self.ui.verbose and 'header_verbose' in self.t:
- key = 'header_verbose'
- elif 'header' in self.t:
- key = 'header'
- else:
- key = ''
- if key:
- dest.write_header(stringify(self.t(key, **props)))
- if self.ui.debugflag and 'changeset_debug' in self.t:
- key = 'changeset_debug'
- elif self.ui.quiet and 'changeset_quiet' in self.t:
- key = 'changeset_quiet'
- elif self.ui.verbose and 'changeset_verbose' in self.t:
- key = 'changeset_verbose'
- else:
- key = 'changeset'
- dest.write(stringify(self.t(key, **props)))
- except KeyError, inst:
- raise util.Abort(_("%s: no key named '%s'") % (self.t.mapfile,
- inst.args[0]))
- except SyntaxError, inst:
- raise util.Abort(_('%s: %s') % (self.t.mapfile, inst.args[0]))
-
-class stringio(object):
- '''wrap cStringIO for use by changeset_templater.'''
- def __init__(self):
- self.fp = cStringIO.StringIO()
-
- def write(self, *args):
- for a in args:
- self.fp.write(a)
-
- write_header = write
-
- def __getattr__(self, key):
- return getattr(self.fp, key)