changeset 6051:1038b1458d7a

keyword: safeguards against erroneous behaviour or aborts prevent issues due to global [keyword] filename patterns: - add email to nokwcommands - protect everything under .hg from expansion (tested with qcommit) - exclude everything starting with .hg* just in case prevent abort when pulling from bundlerepo: - do not set up kwrepo for bundlerepo expansion inside a bundle is nonsense bundlerepo issue spotted and test case provided by pmezard.
author Christian Ebert <blacktrash@gmx.net>
date Wed, 06 Feb 2008 23:14:33 +0100
parents adf73753eb7d
children 75425961e955
files hgext/keyword.py tests/test-keyword tests/test-keyword.out
diffstat 3 files changed, 36 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/keyword.py	Thu Feb 07 15:56:20 2008 +0100
+++ b/hgext/keyword.py	Wed Feb 06 23:14:33 2008 +0100
@@ -88,7 +88,7 @@
 
 # hg commands that do not act on keywords
 nokwcommands = ('add addremove bundle copy export grep identify incoming init'
-                ' log outgoing push remove rename rollback tip convert')
+                ' log outgoing push remove rename rollback tip convert email')
 
 # hg commands that trigger expansion only when writing to working dir,
 # not when reading filelog, and unexpand when reading from working dir
@@ -410,8 +410,12 @@
     This is done for local repos only, and only if there are
     files configured at all for keyword substitution.'''
 
-    if not repo.local():
-        return
+    try:
+        if (not repo.local() or '.hg' in repo.root.split('/')
+            or repo._url.startswith('bundle:')):
+            return
+    except AttributeError:
+        pass
 
     hgcmd, func, args, opts, cmdopts = dispatch._parse(ui, sys.argv[1:])
     if hgcmd in nokwcommands.split():
@@ -426,7 +430,7 @@
         if node1 is not None and node1 != repo.changectx().node():
             hgcmd = 'diff1'
 
-    inc, exc = [], ['.hgtags']
+    inc, exc = [], ['.hg*']
     for pat, opt in ui.configitems('keyword'):
         if opt != 'ignore':
             inc.append(pat)
--- a/tests/test-keyword	Thu Feb 07 15:56:20 2008 +0100
+++ b/tests/test-keyword	Wed Feb 06 23:14:33 2008 +0100
@@ -24,8 +24,8 @@
 
 hg --quiet kwdemo "Branch = {branches}"
 
-hg init Test
-cd Test
+hg init Test-bndl
+cd Test-bndl
 
 echo % kwshrink should exit silently in empty/invalid repo
 hg kwshrink
@@ -69,6 +69,16 @@
 mv $HGRCPATH.nohook $HGRCPATH
 rm hooktest
 
+echo % bundle
+hg bundle --base null ../kw.hg
+
+cd ..
+hg init Test
+cd Test
+
+echo % pull from bundle
+hg pull -u ../kw.hg
+
 echo % touch
 touch a b
 echo % status
@@ -90,8 +100,12 @@
 echo % compare changenodes in a c
 cat a c
 
+echo % qinit -c
+hg qinit -c
 echo % qimport
 hg qimport -r tip -n mqtest.diff
+echo % qcommit
+hg qcommit -mqtest
 echo % keywords should not be expanded in patch
 cat .hg/patches/mqtest.diff
 echo % qpop
--- a/tests/test-keyword.out	Thu Feb 07 15:56:20 2008 +0100
+++ b/tests/test-keyword.out	Wed Feb 06 23:14:33 2008 +0100
@@ -138,6 +138,16 @@
 a
 % diff a hooktest
 % removing commit hook from config
+% bundle
+1 changesets found
+% pull from bundle
+pulling from ../kw.hg
+requesting all changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 3 changes to 3 files
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
 % touch
 % status
 % update
@@ -162,7 +172,9 @@
 xxx $
 $Id: c,v ba4426d1938e 1970/01/01 00:00:01 user $
 tests for different changenodes
+% qinit -c
 % qimport
+% qcommit
 % keywords should not be expanded in patch
 # HG changeset patch
 # User User Name <user@example.com>