(0.9.2compat) clean import handling when patchfile class available
Change help and test output accordingly.
--- 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
--- 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