# HG changeset patch # User Christian Ebert # Date 1286957926 -3600 # Node ID 908f0742e2801cdfc2b795069fd465b7a1d5a18b # Parent 5a6898736b1a7b909f84dbb6faa8f8e4e389c652# Parent c793c1a87f1cc203e4b8c4f790043a38400b7211 Merge with stable diff -r 5a6898736b1a -r 908f0742e280 hgkw/keyword.py --- 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: diff -r 5a6898736b1a -r 908f0742e280 tests/test-keyword.t --- 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< 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'< 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< 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