# HG changeset patch # User Christian Ebert # Date 1201786485 -3600 # Node ID ed06223f88fce9200f11cc760a129c60ea4a8fcc # Parent 4ac7e51443fee2cb69f3eb305692ce3216e1e05f (0.9.2compat) clean import handling when patchfile class available Change help and test output accordingly. diff -r 4ac7e51443fe -r ed06223f88fc hgkw/keyword.py --- a/hgkw/keyword.py Wed Jan 30 10:38:10 2008 +0100 +++ b/hgkw/keyword.py Thu Jan 31 14:34:45 2008 +0100 @@ -79,17 +79,25 @@ like CVS' $Log$, are not supported. A keyword template map "Log = {desc}" expands to the first line of the changeset description. -Caveat: "hg import" fails if the patch context contains an active - keyword. In that case run "hg kwshrink", and then reimport. +Caveat: With Mercurial versions prior to 4574925db5c0 "hg import" might + cause rejects if the patch context contains an active keyword. + In that case run "hg kwshrink", and then reimport. Or, better, use bundle/unbundle to share changes. ''' -from mercurial import commands, cmdutil, context, filelog, localrepo -from mercurial import patch, revlog, templater, util +from mercurial import commands, cmdutil, context, filelog +from mercurial import localrepo, revlog, templater, util from mercurial.node import * from mercurial.i18n import gettext as _ import os.path, re, shutil, tempfile, time +try: + # avoid spurious rejects if patchfile is available + from mercurial.patch import patchfile + _patchfile_init = patchfile.__init__ +except ImportError: + _patchfile_init = None + # backwards compatibility hacks def _normal(repo, files): @@ -549,7 +557,21 @@ finally: del _wlock, _lock - kwrepo._kwt = kwtemplater(ui, repo, inc, exc) + kwt = kwrepo._kwt = kwtemplater(ui, repo, inc, exc) + + if _patchfile_init: + + def kwpatchfile_init(self, ui, fname, missing=False): + '''Monkeypatch/wrap patch.patchfile.__init__ to avoid + rejects or conflicts due to expanded keywords in working dir.''' + _patchfile_init(self, ui, fname, missing=missing) + if kwt.matcher(self.fname): + # shrink keywords read from working dir + kwshrunk = kwt.shrink(''.join(self.lines)) + self.lines = kwshrunk.splitlines(True) + + patchfile.__init__ = kwpatchfile_init + repo.__class__ = kwrepo diff -r 4ac7e51443fe -r ed06223f88fc tests/test-keyword.out --- a/tests/test-keyword.out Wed Jan 30 10:38:10 2008 +0100 +++ b/tests/test-keyword.out Thu Jan 31 14:34:45 2008 +0100 @@ -30,8 +30,9 @@ Expansions spanning more than one line and incremental expansions, like CVS' $Log$, are not supported. A keyword template map "Log = {desc}" expands to the first line of the changeset description. -Caveat: "hg import" fails if the patch context contains an active - keyword. In that case run "hg kwshrink", and then reimport. +Caveat: With Mercurial versions prior to 4574925db5c0 "hg import" might + cause rejects if the patch context contains an active keyword. + In that case run "hg kwshrink", and then reimport. Or, better, use bundle/unbundle to share changes. kwcat output the current or given revision of files expanding keywords kwdemo print [keywordmaps] configuration and an expansion example