[PATCH 2 of 2] keyword: handle "hg record" more gracefully

Christian Ebert blacktrash at gmx.net
Sun Jan 13 14:16:06 CST 2008


# HG changeset patch
# User Christian Ebert <blacktrash at gmx.net>
# Date 1200251930 -3600
# Node ID 33028c8c4bebf0a7c616e222f9593f7eb9f43d27
# Parent  17a1ed371f07310ea4c930e2bbffedc80d6528b0
keyword: handle "hg record" more gracefully

Avoid additional hunks due to expanded keywords. However this is
still a compromise, as keyword expansions are not updated in
working directory because record should not overwrite files.

Mention above shortcomings and "hg kwexpand" workaround in help.

diff --git a/hgext/keyword.py b/hgext/keyword.py
--- a/hgext/keyword.py
+++ b/hgext/keyword.py
@@ -69,6 +69,10 @@ To force expansion after enabling it, or
 To force expansion after enabling it, or a configuration change, run
 "hg kwexpand".
 
+Also, when committing with the record extension, be aware that keywords
+cannot be updated. Again, run "hg kwexpand" on the files in question
+to update keyword expansions after all changes have been checked in.
+
 Expansions spanning more than one line and incremental expansions,
 like CVS' $Log$, are not supported. A keyword template map
 "Log = {desc}" expands to the first line of the changeset description.
@@ -103,10 +107,11 @@ class kwtemplater(object):
         'Header': '{root}/{file},v {node|short} {date|utcdate} {author|user}',
     }
 
-    def __init__(self, ui, repo, inc, exc):
+    def __init__(self, ui, repo, inc, exc, hgcmd):
         self.ui = ui
         self.repo = repo
         self.matcher = util.matcher(repo.root, inc=inc, exc=exc)[1]
+        self.hgcmd = hgcmd
         self.commitnode = None
         self.path = ''
 
@@ -144,7 +149,7 @@ class kwtemplater(object):
 
     def expand(self, node, data):
         '''Returns data with keywords expanded.'''
-        if util.binary(data):
+        if util.binary(data) or self.hgcmd == 'record':
             return data
         return self.substitute(node, data, self.re_kw.sub)
 
@@ -422,7 +427,7 @@ def reposetup(ui, repo):
         return
 
     global _kwtemplater
-    _kwtemplater = kwtemplater(ui, repo, inc, exc)
+    _kwtemplater = kwtemplater(ui, repo, inc, exc, hgcmd)
 
     class kwrepo(repo.__class__):
         def file(self, f, kwmatch=False):
@@ -434,7 +439,7 @@ def reposetup(ui, repo):
 
         def wread(self, filename):
             data = super(kwrepo, self).wread(filename)
-            if hgcmd == 'diff' and _kwtemplater.matcher(filename):
+            if hgcmd in ('diff', 'record') and _kwtemplater.matcher(filename):
                 return _kwtemplater.shrink(data)
             return data
 


More information about the Mercurial-devel mailing list