Show More
@@ -82,7 +82,7 b' from mercurial import commands, cmdutil,' | |||
|
82 | 82 | from mercurial import patch, localrepo, templater, templatefilters, util |
|
83 | 83 | from mercurial.node import * |
|
84 | 84 | from mercurial.i18n import _ |
|
85 |
import re, shutil, |
|
|
85 | import re, shutil, tempfile, time | |
|
86 | 86 | |
|
87 | 87 | commands.optionalrepo += ' kwdemo' |
|
88 | 88 | |
@@ -99,7 +99,30 b' def utcdate(date):' | |||
|
99 | 99 | return time.strftime('%Y/%m/%d %H:%M:%S', time.gmtime(date[0])) |
|
100 | 100 | |
|
101 | 101 | |
|
102 | _kwtemplater = None | |
|
102 | _kwtemplater, _cmd, _cmdoptions = None, None, None | |
|
103 | ||
|
104 | # store originals of monkeypatches | |
|
105 | _patchfile_init = patch.patchfile.__init__ | |
|
106 | _dispatch_parse = dispatch._parse | |
|
107 | ||
|
108 | def _kwpatchfile_init(self, ui, fname, missing=False): | |
|
109 | '''Monkeypatch/wrap patch.patchfile.__init__ to avoid | |
|
110 | rejects or conflicts due to expanded keywords in working dir.''' | |
|
111 | _patchfile_init(self, ui, fname, missing=missing) | |
|
112 | if _kwtemplater.matcher(self.fname): | |
|
113 | # shrink keywords read from working dir | |
|
114 | kwshrunk = _kwtemplater.shrink(''.join(self.lines)) | |
|
115 | self.lines = kwshrunk.splitlines(True) | |
|
116 | ||
|
117 | def _kwdispatch_parse(ui, args): | |
|
118 | '''Monkeypatch dispatch._parse to obtain | |
|
119 | current command and command options (global _cmd, _cmdoptions).''' | |
|
120 | global _cmd, _cmdoptions | |
|
121 | _cmd, func, args, options, _cmdoptions = _dispatch_parse(ui, args) | |
|
122 | return _cmd, func, args, options, _cmdoptions | |
|
123 | ||
|
124 | dispatch._parse = _kwdispatch_parse | |
|
125 | ||
|
103 | 126 | |
|
104 | 127 | class kwtemplater(object): |
|
105 | 128 | ''' |
@@ -211,21 +234,6 b' class kwfilelog(filelog.filelog):' | |||
|
211 | 234 | return t2 != text |
|
212 | 235 | return revlog.revlog.cmp(self, node, text) |
|
213 | 236 | |
|
214 | ||
|
215 | # store original patch.patchfile.__init__ | |
|
216 | _patchfile_init = patch.patchfile.__init__ | |
|
217 | ||
|
218 | def _kwpatchfile_init(self, ui, fname, missing=False): | |
|
219 | '''Monkeypatch/wrap patch.patchfile.__init__ to avoid | |
|
220 | rejects or conflicts due to expanded keywords in working dir.''' | |
|
221 | _patchfile_init(self, ui, fname, missing=missing) | |
|
222 | ||
|
223 | if _kwtemplater.matcher(self.fname): | |
|
224 | # shrink keywords read from working dir | |
|
225 | kwshrunk = _kwtemplater.shrink(''.join(self.lines)) | |
|
226 | self.lines = kwshrunk.splitlines(True) | |
|
227 | ||
|
228 | ||
|
229 | 237 | def _iskwfile(f, link): |
|
230 | 238 | return not link(f) and _kwtemplater.matcher(f) |
|
231 | 239 | |
@@ -410,26 +418,17 b' def reposetup(ui, repo):' | |||
|
410 | 418 | This is done for local repos only, and only if there are |
|
411 | 419 | files configured at all for keyword substitution.''' |
|
412 | 420 | |
|
421 | global _kwtemplater | |
|
422 | hgcmd, hgcmdopts = _cmd, _cmdoptions | |
|
423 | ||
|
413 | 424 | try: |
|
414 |
if (not repo.local() or |
|
|
425 | if (not repo.local() or hgcmd in nokwcommands.split() | |
|
426 | or '.hg' in repo.root.split('/') | |
|
415 | 427 | or repo._url.startswith('bundle:')): |
|
416 | 428 | return |
|
417 | 429 | except AttributeError: |
|
418 | 430 | pass |
|
419 | 431 | |
|
420 | hgcmd, func, args, opts, cmdopts = dispatch._parse(ui, sys.argv[1:]) | |
|
421 | if hgcmd in nokwcommands.split(): | |
|
422 | return | |
|
423 | ||
|
424 | if hgcmd == 'diff': | |
|
425 | # only expand if comparing against working dir | |
|
426 | node1, node2 = cmdutil.revpair(repo, cmdopts.get('rev')) | |
|
427 | if node2 is not None: | |
|
428 | return | |
|
429 | # shrink if rev is not current node | |
|
430 | if node1 is not None and node1 != repo.changectx().node(): | |
|
431 | hgcmd = 'diff1' | |
|
432 | ||
|
433 | 432 | inc, exc = [], ['.hg*'] |
|
434 | 433 | for pat, opt in ui.configitems('keyword'): |
|
435 | 434 | if opt != 'ignore': |
@@ -439,7 +438,15 b' def reposetup(ui, repo):' | |||
|
439 | 438 | if not inc: |
|
440 | 439 | return |
|
441 | 440 | |
|
442 | global _kwtemplater | |
|
441 | if hgcmd == 'diff': | |
|
442 | # only expand if comparing against working dir | |
|
443 | node1, node2 = cmdutil.revpair(repo, hgcmdopts.get('rev')) | |
|
444 | if node2 is not None: | |
|
445 | return | |
|
446 | # shrink if rev is not current node | |
|
447 | if node1 is not None and node1 != repo.changectx().node(): | |
|
448 | hgcmd = 'diff1' | |
|
449 | ||
|
443 | 450 | restrict = hgcmd in restricted.split() |
|
444 | 451 | _kwtemplater = kwtemplater(ui, repo, inc, exc, restrict) |
|
445 | 452 |
General Comments 0
You need to be logged in to leave comments.
Login now