Merge with stable stable
authorChristian Ebert <blacktrash@gmx.net>
Wed, 13 Oct 2010 09:18:46 +0100
branchstable
changeset 839 908f0742e280
parent 834 5a6898736b1a (current diff)
parent 838 c793c1a87f1c (diff)
child 840 df93d61a7790
Merge with stable
--- a/hgkw/keyword.py	Sat Oct 09 16:27:10 2010 -0500
+++ b/hgkw/keyword.py	Wed Oct 13 09:18:46 2010 +0100
@@ -141,6 +141,15 @@
     Depending on subfunc also returns number of substitutions.'''
     return subfunc(r'$\1$', text)
 
+def _preselect(wstatus, changed):
+    '''Retrieves modfied and added files from a working directory state
+    and returns the subset of each contained in given changed files
+    retrieved from a change context.'''
+    modified, added = wstatus[:2]
+    modified = [f for f in modified if f in changed]
+    added = [f for f in added if f in changed]
+    return modified, added
+
 
 class kwtemplater(object):
     '''
@@ -194,7 +203,7 @@
         expansion are not symbolic links.'''
         return [f for f in cand if self.match(f) and not 'l' in ctx.flags(f)]
 
-    def overwrite(self, ctx, candidates, lookup, expand, recsubn=None):
+    def overwrite(self, ctx, candidates, lookup, expand, rekw=False):
         '''Overwrites selected files expanding/shrinking keywords.'''
         if self.restrict or lookup: # exclude kw_copy
             candidates = self.iskwfile(candidates, ctx)
@@ -204,8 +213,7 @@
         if self.restrict or expand and lookup:
             mf = ctx.manifest()
         fctx = ctx
-        subn = (self.restrict and self.re_kw.subn or
-                recsubn or self.re_kwexp.subn)
+        subn = (self.restrict or rekw) and self.re_kw.subn or self.re_kwexp.subn
         msg = (expand and _('overwriting %s expanding keywords\n')
                or _('overwriting %s shrinking keywords\n'))
         for f in candidates:
@@ -510,18 +518,16 @@
             return n
 
         def rollback(self, dryrun=False):
-            wlock = repo.wlock()
+            wlock = self.wlock()
             try:
                 if not dryrun:
                     changed = self['.'].files()
                 ret = super(kwrepo, self).rollback(dryrun)
                 if not dryrun:
                     ctx = self['.']
-                    modified, added = self[None].status()[:2]
-                    modified = [f for f in modified if f in changed]
-                    added = [f for f in added if f in changed]
+                    modified, added = _preselect(self[None].status(), changed)
+                    kwt.overwrite(ctx, modified, True, True)
                     kwt.overwrite(ctx, added, True, False)
-                    kwt.overwrite(ctx, modified, True, True)
                 return ret
             finally:
                 wlock.release()
@@ -570,15 +576,14 @@
             # therefore compare nodes before and after
             kwt.record = True
             ctx = repo['.']
-            modified, added = repo[None].status()[:2]
+            wstatus = repo[None].status()
             ret = orig(ui, repo, commitfunc, *pats, **opts)
             recctx = repo['.']
             if ctx != recctx:
-                modified = [f for f in modified if f in recctx]
-                added = [f for f in added if f in recctx]
+                modified, added = _preselect(wstatus, recctx.files())
                 kwt.restrict = False
-                kwt.overwrite(recctx, modified, False, True, kwt.re_kwexp.subn)
-                kwt.overwrite(recctx, added, False, True, kwt.re_kw.subn)
+                kwt.overwrite(recctx, modified, False, True)
+                kwt.overwrite(recctx, added, False, True, True)
                 kwt.restrict = True
             return ret
         finally:
--- a/tests/test-keyword.t	Sat Oct 09 16:27:10 2010 -0500
+++ b/tests/test-keyword.t	Wed Oct 13 09:18:46 2010 +0100
@@ -291,11 +291,16 @@
   $Id: c,v 40a904bbbe4c 1970/01/01 00:00:01 user $
   tests for different changenodes
 
+record
+
+  $ echo '$Id$' > r
+  $ hg add r
+
 record chunk
 
   $ python -c \
   > 'l=open("a").readlines();l.insert(1,"foo\n");l.append("bar\n");open("a","w").writelines(l);'
-  $ hg record -d '1 10' -m rectest<<EOF
+  $ hg record -d '1 10' -m rectest a<<EOF
   > y
   > y
   > n
@@ -319,6 +324,7 @@
   d17e03c92c97+ tip
   $ hg status
   M a
+  A r
 
 Cat modified file a
 
@@ -331,7 +337,7 @@
 
 Diff remaining chunk
 
-  $ hg diff
+  $ hg diff a
   diff -r d17e03c92c97 a
   --- a/a	Wed Dec 31 23:59:51 1969 -0000
   +++ b/a	* (glob)
@@ -350,7 +356,7 @@
 
  - do not use "hg record -m" here!
 
-  $ hg record -l msg -d '1 11'<<EOF
+  $ hg record -l msg -d '1 11' a<<EOF
   > y
   > y
   > y
@@ -415,13 +421,8 @@
   $ hg forget y z
   $ rm y z
 
-  $ hg update -C
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+record added file alone
 
-record added file
-
-  $ echo '$Id$' > r
-  $ hg add r
   $ hg -v record -l msg -d '1 12' r<<EOF
   > y
   > EOF
@@ -436,6 +437,8 @@
   overwriting r shrinking keywords
   $ hg forget r
   $ rm msg r
+  $ hg update -C
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
 Test patch queue repo