[PATCH 1 of 3] keyword: (bugfix) only set changenode for kwtemplater when committing

Christian Ebert blacktrash at gmx.net
Wed Jan 9 04:39:25 CST 2008


# HG changeset patch
# User Christian Ebert <blacktrash at gmx.net>
# Date 1199852330 -3600
# Node ID 733158aa2bea199559a898d1975c2ed5ab83f0a0
# Parent  5379497af641f87170c1eff2d0bb2a7df2189908
keyword: (bugfix) only set changenode for kwtemplater when committing

kwexpand must always obtain changenode from filectx,
otherwise current changenode is expanded in every file.

Also fixes "hg cat <more than 1 file>".

diff --git a/hgext/keyword.py b/hgext/keyword.py
--- a/hgext/keyword.py
+++ b/hgext/keyword.py
@@ -107,7 +107,7 @@ class kwtemplater(object):
         self.ui = ui
         self.repo = repo
         self.matcher = util.matcher(repo.root, inc=inc, exc=exc)[1]
-        self.node = None
+        self.commitnode = None
         self.path = ''
 
         kwmaps = self.ui.configitems('keywordmaps')
@@ -124,18 +124,20 @@ class kwtemplater(object):
                                               False, '', False)
 
     def substitute(self, node, data, subfunc):
-        '''Obtains node if missing, and calls given substitution function.'''
-        if not self.node:
+        '''Obtains file's changenode if commit node not given,
+        and calls given substitution function.'''
+        if self.commitnode:
+            fnode = self.commitnode
+        else:
             c = context.filectx(self.repo, self.path, fileid=node)
-            self.node = c.node()
+            fnode = c.node()
 
         def kwsub(mobj):
             '''Substitutes keyword using corresponding template.'''
             kw = mobj.group(1)
             self.ct.use_template(self.templates[kw])
             self.ui.pushbuffer()
-            self.ct.show(changenode=self.node,
-                         root=self.repo.root, file=self.path)
+            self.ct.show(changenode=fnode, root=self.repo.root, file=self.path)
             return '$%s: %s $' % (kw, templater.firstline(self.ui.popbuffer()))
 
         return subfunc(kwsub, data)
@@ -228,16 +230,16 @@ def _overwrite(ui, repo, node=None, expa
     '''Overwrites selected files expanding/shrinking keywords.'''
     ctx = repo.changectx(node)
     mf = ctx.manifest()
-    if files is None:
-        notify = ui.debug # commit
+    if node is not None:   # commit
+        _kwtemplater.commitnode = node
         files = [f for f in ctx.files() if mf.has_key(f)]
-    else:
-        notify = ui.note  # kwexpand/kwshrink
+        notify = ui.debug
+    else:                  # kwexpand/kwshrink
+        notify = ui.note
     candidates = [f for f in files if _iskwfile(f, mf.linkf)]
     if candidates:
         candidates.sort()
         action = expand and 'expanding' or 'shrinking'
-        _kwtemplater.node = node or ctx.node()
         for f in candidates:
             fp = repo.file(f, kwmatch=True)
             data, kwfound = fp.kwctread(mf[f], expand)


More information about the Mercurial-devel mailing list