--- a/hgkw/keyword.py Fri Apr 20 00:24:32 2007 +0200
+++ b/hgkw/keyword.py Fri Apr 20 14:41:35 2007 +0200
@@ -121,9 +121,11 @@
Sets up keyword templates, corresponding keyword regex, and
provides keyword substitution functions.
'''
- def __init__(self, ui, repo):
+ def __init__(self, ui, repo, path='', node=None):
self.ui = ui
self.repo = repo
+ self.path = path
+ self.node = node
templates = dict(ui.configitems('keywordmaps'))
if templates:
# parse templates here for less overhead in kwsub matchfunc
@@ -142,22 +144,22 @@
self.t = cmdutil.changeset_templater(ui, repo,
False, None, '', False)
- def kwsub(self, mobj, path, node):
+ def kwsub(self, mobj):
'''Substitutes keyword using corresponding template.'''
kw = mobj.group(1)
self.t.use_template(self.templates[kw])
self.ui.pushbuffer()
- self.t.show(changenode=node, root=self.repo.root, file=path)
+ self.t.show(changenode=self.node, root=self.repo.root, file=self.path)
keywordsub = templater.firstline(self.ui.popbuffer())
return '$%s: %s $' % (kw, keywordsub)
- def expand(self, path, node, filelog, data):
+ def expand(self, node, flog, data):
'''Returns data with expanded keywords.'''
if util.binary(data):
return data
- c = context.filectx(self.repo, path, fileid=node, filelog=filelog)
- cnode = c.node()
- return self.re_kw.sub(lambda m: self.kwsub(m, path, cnode), data)
+ c = context.filectx(self.repo, self.path, fileid=node, filelog=flog)
+ self.node = c.node()
+ return self.re_kw.sub(self.kwsub, data)
def shrink(self, text):
'''Returns text with all keyword substitutions removed.'''
@@ -165,14 +167,14 @@
return text
return self.re_kw.sub(r'$\1$', text)
- def overwrite(self, candidates, node):
+ def overwrite(self, candidates):
'''Overwrites candidates in working dir expanding keywords.'''
files = []
for f in candidates:
data = self.repo.wfile(f).read()
if not util.binary(data):
- data, kwct = self.re_kw.subn(lambda m:
- self.kwsub(m, f, node), data)
+ self.path = f
+ data, kwct = self.re_kw.subn(self.kwsub, data)
if kwct:
self.ui.debug(_('overwriting %s expanding keywords\n') % f)
self.repo.wfile(f, 'w').write(data)
@@ -193,7 +195,7 @@
def read(self, node):
'''Substitutes keywords when reading filelog.'''
data = super(kwfilelog, self).read(node)
- return self.kwtemplater.expand(self.path, node, self, data)
+ return self.kwtemplater.expand(node, self, data)
def add(self, text, meta, tr, link, p1=None, p2=None):
'''Removes keyword substitutions when adding to filelog.'''
@@ -244,7 +246,7 @@
f = f[1:]
# only use kwfilelog when needed
if self.kwfmatcher(f):
- kwt = kwtemplater(self.ui, self)
+ kwt = kwtemplater(self.ui, self, path=f)
return kwfilelog(self.sopener, f, kwt)
else:
return filelog.filelog(self.sopener, f)
@@ -275,8 +277,8 @@
if not candidates:
return node
- kwt = kwtemplater(self.ui, self)
- kwt.overwrite(candidates, node)
+ kwt = kwtemplater(self.ui, self, node=node)
+ kwt.overwrite(candidates)
return node
finally:
if wrelease: