Mercurial > hg
comparison hgext/keyword.py @ 6024:3121f0feefb4
keyword: nokwcommands, restricted string variables at top level
- prettier syntax conforming eg. to commands.norepo
- possibly easier to hook from outside
author | Christian Ebert <blacktrash@gmx.net> |
---|---|
date | Mon, 04 Feb 2008 21:08:45 +0100 |
parents | ee7df90d1daa |
children | b7f44f01a632 |
comparison
equal
deleted
inserted
replaced
6023:ee7df90d1daa | 6024:3121f0feefb4 |
---|---|
84 from mercurial.i18n import _ | 84 from mercurial.i18n import _ |
85 import re, shutil, sys, tempfile, time | 85 import re, shutil, sys, tempfile, time |
86 | 86 |
87 commands.optionalrepo += ' kwdemo' | 87 commands.optionalrepo += ' kwdemo' |
88 | 88 |
89 # hg commands that do not act on keywords | |
90 nokwcommands = ('add addremove bundle copy export grep identify incoming init' | |
91 'log outgoing push remove rename rollback tip convert') | |
92 | |
89 # hg commands that trigger expansion only when writing to working dir, | 93 # hg commands that trigger expansion only when writing to working dir, |
90 # not when reading filelog, and unexpand when reading from working dir | 94 # not when reading filelog, and unexpand when reading from working dir |
91 restricted = ('diff1', 'record', | 95 restricted = 'diff1 record qfold qimport qnew qpush qrefresh qrecord' |
92 'qfold', 'qimport', 'qnew', 'qpush', 'qrefresh', 'qrecord') | |
93 | 96 |
94 def utcdate(date): | 97 def utcdate(date): |
95 '''Returns hgdate in cvs-like UTC format.''' | 98 '''Returns hgdate in cvs-like UTC format.''' |
96 return time.strftime('%Y/%m/%d %H:%M:%S', time.gmtime(date[0])) | 99 return time.strftime('%Y/%m/%d %H:%M:%S', time.gmtime(date[0])) |
97 | 100 |
111 'Source': '{root}/{file},v', | 114 'Source': '{root}/{file},v', |
112 'Id': '{file|basename},v {node|short} {date|utcdate} {author|user}', | 115 'Id': '{file|basename},v {node|short} {date|utcdate} {author|user}', |
113 'Header': '{root}/{file},v {node|short} {date|utcdate} {author|user}', | 116 'Header': '{root}/{file},v {node|short} {date|utcdate} {author|user}', |
114 } | 117 } |
115 | 118 |
116 def __init__(self, ui, repo, inc, exc, hgcmd): | 119 def __init__(self, ui, repo, inc, exc, restricted): |
117 self.ui = ui | 120 self.ui = ui |
118 self.repo = repo | 121 self.repo = repo |
119 self.matcher = util.matcher(repo.root, inc=inc, exc=exc)[1] | 122 self.matcher = util.matcher(repo.root, inc=inc, exc=exc)[1] |
120 self.hgcmd = hgcmd | 123 self.restricted = restricted |
121 self.commitnode = None | 124 self.commitnode = None |
122 self.path = '' | 125 self.path = '' |
123 | 126 |
124 kwmaps = self.ui.configitems('keywordmaps') | 127 kwmaps = self.ui.configitems('keywordmaps') |
125 if kwmaps: # override default templates | 128 if kwmaps: # override default templates |
154 | 157 |
155 return subfunc(kwsub, data) | 158 return subfunc(kwsub, data) |
156 | 159 |
157 def expand(self, node, data): | 160 def expand(self, node, data): |
158 '''Returns data with keywords expanded.''' | 161 '''Returns data with keywords expanded.''' |
159 if util.binary(data) or self.hgcmd in restricted: | 162 if self.restricted or util.binary(data): |
160 return data | 163 return data |
161 return self.substitute(node, data, self.re_kw.sub) | 164 return self.substitute(node, data, self.re_kw.sub) |
162 | 165 |
163 def process(self, node, data, expand): | 166 def process(self, node, data, expand): |
164 '''Returns a tuple: data, count. | 167 '''Returns a tuple: data, count. |
408 files configured at all for keyword substitution.''' | 411 files configured at all for keyword substitution.''' |
409 | 412 |
410 if not repo.local(): | 413 if not repo.local(): |
411 return | 414 return |
412 | 415 |
413 nokwcommands = ('add', 'addremove', 'bundle', 'copy', 'export', 'grep', | |
414 'identify', 'incoming', 'init', 'log', 'outgoing', 'push', | |
415 'remove', 'rename', 'rollback', 'tip', | |
416 'convert') | |
417 hgcmd, func, args, opts, cmdopts = dispatch._parse(ui, sys.argv[1:]) | 416 hgcmd, func, args, opts, cmdopts = dispatch._parse(ui, sys.argv[1:]) |
418 if hgcmd in nokwcommands: | 417 if hgcmd in nokwcommands.split(): |
419 return | 418 return |
420 | 419 |
421 if hgcmd == 'diff': | 420 if hgcmd == 'diff': |
422 # only expand if comparing against working dir | 421 # only expand if comparing against working dir |
423 node1, node2 = cmdutil.revpair(repo, cmdopts.get('rev')) | 422 node1, node2 = cmdutil.revpair(repo, cmdopts.get('rev')) |
435 exc.append(pat) | 434 exc.append(pat) |
436 if not inc: | 435 if not inc: |
437 return | 436 return |
438 | 437 |
439 global _kwtemplater | 438 global _kwtemplater |
440 _kwtemplater = kwtemplater(ui, repo, inc, exc, hgcmd) | 439 _restricted = hgcmd in restricted.split() |
440 _kwtemplater = kwtemplater(ui, repo, inc, exc, _restricted) | |
441 | 441 |
442 class kwrepo(repo.__class__): | 442 class kwrepo(repo.__class__): |
443 def file(self, f, kwmatch=False): | 443 def file(self, f, kwmatch=False): |
444 if f[0] == '/': | 444 if f[0] == '/': |
445 f = f[1:] | 445 f = f[1:] |
447 return kwfilelog(self.sopener, f) | 447 return kwfilelog(self.sopener, f) |
448 return filelog.filelog(self.sopener, f) | 448 return filelog.filelog(self.sopener, f) |
449 | 449 |
450 def wread(self, filename): | 450 def wread(self, filename): |
451 data = super(kwrepo, self).wread(filename) | 451 data = super(kwrepo, self).wread(filename) |
452 if hgcmd in restricted and _kwtemplater.matcher(filename): | 452 if _restricted and _kwtemplater.matcher(filename): |
453 return _kwtemplater.shrink(data) | 453 return _kwtemplater.shrink(data) |
454 return data | 454 return data |
455 | 455 |
456 def commit(self, files=None, text='', user=None, date=None, | 456 def commit(self, files=None, text='', user=None, date=None, |
457 match=util.always, force=False, force_editor=False, | 457 match=util.always, force=False, force_editor=False, |