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,