changeset 11678:f5aa20e177c0 stable

keyword: move collecting of [keyword] patterns to reposetup (issue2303) When cloning, prevent [keyword] filename patterns configured locally in the source directory to persist during the update in the destination. a) move [keyword] retrieval (back) to reposetup b) remove the corresponding global kwtools attributes Add test cases.
author Christian Ebert <blacktrash@gmx.net>
date Sun, 25 Jul 2010 20:01:33 -0500
parents 8f8a7976f4bc
children c5e555e064d0 b6360a113478 52e4ac3e63f7
files hgext/keyword.py tests/test-keyword tests/test-keyword.out
diffstat 3 files changed, 42 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/keyword.py	Wed Jul 21 22:22:28 2010 +0200
+++ b/hgext/keyword.py	Sun Jul 25 20:01:33 2010 -0500
@@ -108,7 +108,7 @@
 svnutcdate = lambda x: util.datestr((x[0], 0), '%Y-%m-%d %H:%M:%SZ')
 
 # make keyword tools accessible
-kwtools = {'templater': None, 'hgcmd': '', 'inc': [], 'exc': ['.hg*']}
+kwtools = {'templater': None, 'hgcmd': ''}
 
 
 def _defaultkwmaps(ui):
@@ -141,11 +141,10 @@
     provides keyword substitution functions.
     '''
 
-    def __init__(self, ui, repo):
+    def __init__(self, ui, repo, inc, exc):
         self.ui = ui
         self.repo = repo
-        self.match = match.match(repo.root, '', [],
-                                 kwtools['inc'], kwtools['exc'])
+        self.match = match.match(repo.root, '', [], inc, exc)
         self.restrict = kwtools['hgcmd'] in restricted.split()
         self.record = kwtools['hgcmd'] in recordcommands.split()
 
@@ -438,23 +437,15 @@
 
 
 def uisetup(ui):
-    '''Collects [keyword] config in kwtools.
-    Monkeypatches dispatch._parse if needed.'''
-
-    for pat, opt in ui.configitems('keyword'):
-        if opt != 'ignore':
-            kwtools['inc'].append(pat)
-        else:
-            kwtools['exc'].append(pat)
+    ''' Monkeypatches dispatch._parse to retrieve user command.'''
 
-    if kwtools['inc']:
-        def kwdispatch_parse(orig, ui, args):
-            '''Monkeypatch dispatch._parse to obtain running hg command.'''
-            cmd, func, args, options, cmdoptions = orig(ui, args)
-            kwtools['hgcmd'] = cmd
-            return cmd, func, args, options, cmdoptions
+    def kwdispatch_parse(orig, ui, args):
+        '''Monkeypatch dispatch._parse to obtain running hg command.'''
+        cmd, func, args, options, cmdoptions = orig(ui, args)
+        kwtools['hgcmd'] = cmd
+        return cmd, func, args, options, cmdoptions
 
-        extensions.wrapfunction(dispatch, '_parse', kwdispatch_parse)
+    extensions.wrapfunction(dispatch, '_parse', kwdispatch_parse)
 
 def reposetup(ui, repo):
     '''Sets up repo as kwrepo for keyword substitution.
@@ -465,15 +456,23 @@
     Monkeypatches patch and webcommands.'''
 
     try:
-        if (not repo.local() or not kwtools['inc']
-            or kwtools['hgcmd'] in nokwcommands.split()
+        if (not repo.local() or kwtools['hgcmd'] in nokwcommands.split()
             or '.hg' in util.splitpath(repo.root)
             or repo._url.startswith('bundle:')):
             return
     except AttributeError:
         pass
 
-    kwtools['templater'] = kwt = kwtemplater(ui, repo)
+    inc, exc = [], ['.hg*']
+    for pat, opt in ui.configitems('keyword'):
+        if opt != 'ignore':
+            inc.append(pat)
+        else:
+            exc.append(pat)
+    if not inc:
+        return
+
+    kwtools['templater'] = kwt = kwtemplater(ui, repo, inc, exc)
 
     class kwrepo(repo.__class__):
         def file(self, f):
--- a/tests/test-keyword	Wed Jul 21 22:22:28 2010 +0200
+++ b/tests/test-keyword	Sun Jul 25 20:01:33 2010 -0500
@@ -283,8 +283,17 @@
 echo % cat a
 cat a
 
+echo % clone
+cd ..
+
+echo % expansion in dest
+hg --quiet clone Test globalconf
+cat globalconf/a
+echo % no expansion in dest
+hg --quiet --config 'keyword.**=ignore' clone Test localconf
+cat localconf/a
+
 echo % clone to test incoming
-cd ..
 hg clone -r1 Test Test-a
 cd Test-a
 cat <<EOF >> .hg/hgrc
--- a/tests/test-keyword.out	Wed Jul 21 22:22:28 2010 +0200
+++ b/tests/test-keyword.out	Sun Jul 25 20:01:33 2010 -0500
@@ -333,6 +333,17 @@
 do not process $Id:
 xxx $
 $Xinfo: User Name <user@example.com>: firstline $
+% clone
+% expansion in dest
+expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $
+do not process $Id:
+xxx $
+$Xinfo: User Name <user@example.com>: firstline $
+% no expansion in dest
+expand $Id$
+do not process $Id:
+xxx $
+$Xinfo$
 % clone to test incoming
 requesting all changes
 adding changesets