# HG changeset patch # User Christian Ebert # Date 1276120230 -3600 # Node ID 1b077329846ec628ecf206e2abbf91d75a23be35 # Parent 81d8da31c542ff956405ca056e571d10a4bc498f# Parent c5badbf855dbfcaaa26b069915f390da81ab04e4 (stable) merge diff -r 81d8da31c542 -r 1b077329846e hgkw/keyword.py --- a/hgkw/keyword.py Mon Jun 07 20:03:32 2010 +0200 +++ b/hgkw/keyword.py Wed Jun 09 22:50:30 2010 +0100 @@ -189,15 +189,14 @@ Caveat: localrepository._link fails on Windows.''' return self.match(path) and not 'l' in flagfunc(path) - def overwrite(self, node, expand, candidates): + def overwrite(self, ctx, candidates, iswctx, expand): '''Overwrites selected files expanding/shrinking keywords.''' - ctx = self.repo[node] mf = ctx.manifest() - if node is not None: # commit, record + if self.record: candidates = [f for f in ctx.files() if f in mf] candidates = [f for f in candidates if self.iskwfile(f, ctx.flags)] if candidates: - self.restrict = True # do not expand when reading + self.restrict = True # do not expand when reading msg = (expand and _('overwriting %s expanding keywords\n') or _('overwriting %s shrinking keywords\n')) for f in candidates: @@ -208,7 +207,7 @@ if util.binary(data): continue if expand: - if node is None: + if iswctx: ctx = self.repo.filectx(f, fileid=mf[f]).changectx() data, found = self.substitute(data, f, ctx, self.re_kw.subn) @@ -217,8 +216,10 @@ if found: self.ui.note(msg % f) self.repo.wwrite(f, data, mf.flags(f)) - if node is None: + if iswctx: self.repo.dirstate.normal(f) + elif self.record: + self.repo.dirstate.normallookup(f) self.restrict = False def shrinktext(self, text): @@ -284,7 +285,8 @@ def _kwfwrite(ui, repo, expand, *pats, **opts): '''Selects files and passes them to kwtemplater.overwrite.''' - if len(repo[None].parents()) > 1: + wctx = repo[None] + if len(wctx.parents()) > 1: raise util.Abort(_('outstanding uncommitted merge')) kwt = kwtools['templater'] wlock = repo.wlock() @@ -293,7 +295,7 @@ modified, added, removed, deleted, unknown, ignored, clean = status if modified or added or removed or deleted: raise util.Abort(_('outstanding uncommitted changes')) - kwt.overwrite(None, expand, clean) + kwt.overwrite(wctx, clean, True, expand) finally: wlock.release() @@ -496,7 +498,8 @@ n = super(kwrepo, self).commitctx(ctx, error) # no lock needed, only called from repo.commit() which already locks if not kwt.record: - kwt.overwrite(n, True, None) + kwt.overwrite(self[n], sorted(ctx.added() + ctx.modified()), + False, True) return n # monkeypatches @@ -531,8 +534,9 @@ # therefore compare nodes before and after ctx = repo['.'] ret = orig(ui, repo, commitfunc, *pats, **opts) - if ctx != repo['.']: - kwt.overwrite('.', True, None) + recordctx = repo['.'] + if ctx != recordctx: + kwt.overwrite(recordctx, None, False, True) return ret finally: wlock.release() diff -r 81d8da31c542 -r 1b077329846e tests/test-keyword --- a/tests/test-keyword Mon Jun 07 20:03:32 2010 +0200 +++ b/tests/test-keyword Wed Jun 09 22:50:30 2010 +0100 @@ -142,7 +142,7 @@ echo % compare changenodes in a c cat a c -echo % record +echo % 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< msg +# do not use "hg record -m" here! +hg record -l msg -d '1 11'<