Mercurial > hg-stable
comparison hgext/keyword.py @ 11214:b05ec0cc063e
keyword: offer svn-like default keywordmaps
svn-like default keywords can be set in a new configuration section
called [keywordset] -- thanks to timeless for the name.
Move setup of default keywordmaps into dedicated function used by
kwtemplater.__init__ and demo.
HeadURL/URL is not supported (by default).
author | Christian Ebert <blacktrash@gmx.net> |
---|---|
date | Wed, 19 May 2010 00:45:50 +0200 |
parents | 3d61813a300e |
children | 56f306238256 |
comparison
equal
deleted
inserted
replaced
11213:3d61813a300e | 11214:b05ec0cc063e |
---|---|
33 | 33 |
34 Keywords are only expanded in local repositories and not stored in the | 34 Keywords are only expanded in local repositories and not stored in the |
35 change history. The mechanism can be regarded as a convenience for the | 35 change history. The mechanism can be regarded as a convenience for the |
36 current user or for archive distribution. | 36 current user or for archive distribution. |
37 | 37 |
38 Configuration is done in the [keyword] and [keywordmaps] sections of | 38 Configuration is done in the [keyword], [keywordset] and [keywordmaps] |
39 hgrc files. | 39 sections of hgrc files. |
40 | 40 |
41 Example:: | 41 Example:: |
42 | 42 |
43 [keyword] | 43 [keyword] |
44 # expand keywords in every python file except those matching "x*" | 44 # expand keywords in every python file except those matching "x*" |
45 **.py = | 45 **.py = |
46 x* = ignore | 46 x* = ignore |
47 | |
48 [keywordset] | |
49 # prefer svn- over cvs-like default keywordmaps | |
50 svn = True | |
47 | 51 |
48 NOTE: the more specific you are in your filename patterns the less you | 52 NOTE: the more specific you are in your filename patterns the less you |
49 lose speed in huge repositories. | 53 lose speed in huge repositories. |
50 | 54 |
51 For [keywordmaps] template mapping and expansion demonstration and | 55 For [keywordmaps] template mapping and expansion demonstration and |
106 | 110 |
107 # make keyword tools accessible | 111 # make keyword tools accessible |
108 kwtools = {'templater': None, 'hgcmd': '', 'inc': [], 'exc': ['.hg*']} | 112 kwtools = {'templater': None, 'hgcmd': '', 'inc': [], 'exc': ['.hg*']} |
109 | 113 |
110 | 114 |
111 class kwtemplater(object): | 115 def _defaultkwmaps(ui): |
112 ''' | 116 '''Returns default keywordmaps according to keywordset configuration.''' |
113 Sets up keyword templates, corresponding keyword regex, and | |
114 provides keyword substitution functions. | |
115 ''' | |
116 templates = { | 117 templates = { |
117 'Revision': '{node|short}', | 118 'Revision': '{node|short}', |
118 'Author': '{author|user}', | 119 'Author': '{author|user}', |
120 } | |
121 kwsets = ({ | |
119 'Date': '{date|utcdate}', | 122 'Date': '{date|utcdate}', |
120 'RCSfile': '{file|basename},v', | 123 'RCSfile': '{file|basename},v', |
121 'RCSFile': '{file|basename},v', # kept for backwards compatibility | 124 'RCSFile': '{file|basename},v', # kept for backwards compatibility |
122 # with hg-keyword | 125 # with hg-keyword |
123 'Source': '{root}/{file},v', | 126 'Source': '{root}/{file},v', |
124 'Id': '{file|basename},v {node|short} {date|utcdate} {author|user}', | 127 'Id': '{file|basename},v {node|short} {date|utcdate} {author|user}', |
125 'Header': '{root}/{file},v {node|short} {date|utcdate} {author|user}', | 128 'Header': '{root}/{file},v {node|short} {date|utcdate} {author|user}', |
126 } | 129 }, { |
130 'Date': '{date|svnisodate}', | |
131 'Id': '{file|basename},v {node|short} {date|svnutcdate} {author|user}', | |
132 'LastChangedRevision': '{node|short}', | |
133 'LastChangedBy': '{author|user}', | |
134 'LastChangedDate': '{date|svnisodate}', | |
135 }) | |
136 templates.update(kwsets[ui.configbool('keywordset', 'svn')]) | |
137 return templates | |
138 | |
139 class kwtemplater(object): | |
140 ''' | |
141 Sets up keyword templates, corresponding keyword regex, and | |
142 provides keyword substitution functions. | |
143 ''' | |
127 | 144 |
128 def __init__(self, ui, repo): | 145 def __init__(self, ui, repo): |
129 self.ui = ui | 146 self.ui = ui |
130 self.repo = repo | 147 self.repo = repo |
131 self.match = match.match(repo.root, '', [], | 148 self.match = match.match(repo.root, '', [], |
135 | 152 |
136 kwmaps = self.ui.configitems('keywordmaps') | 153 kwmaps = self.ui.configitems('keywordmaps') |
137 if kwmaps: # override default templates | 154 if kwmaps: # override default templates |
138 self.templates = dict((k, templater.parsestring(v, False)) | 155 self.templates = dict((k, templater.parsestring(v, False)) |
139 for k, v in kwmaps) | 156 for k, v in kwmaps) |
157 else: | |
158 self.templates = _defaultkwmaps(self.ui) | |
140 escaped = map(re.escape, self.templates.keys()) | 159 escaped = map(re.escape, self.templates.keys()) |
141 kwpat = r'\$(%s)(: [^$\n\r]*? )??\$' % '|'.join(escaped) | 160 kwpat = r'\$(%s)(: [^$\n\r]*? )??\$' % '|'.join(escaped) |
142 self.re_kw = re.compile(kwpat) | 161 self.re_kw = re.compile(kwpat) |
143 | 162 |
144 templatefilters.filters['utcdate'] = utcdate | 163 templatefilters.filters['utcdate'] = utcdate |
320 fp.close() | 339 fp.close() |
321 ui.readconfig(repo.join('hgrc')) | 340 ui.readconfig(repo.join('hgrc')) |
322 kwmaps = dict(ui.configitems('keywordmaps')) | 341 kwmaps = dict(ui.configitems('keywordmaps')) |
323 elif opts.get('default'): | 342 elif opts.get('default'): |
324 ui.status(_('\n\tconfiguration using default keyword template maps\n')) | 343 ui.status(_('\n\tconfiguration using default keyword template maps\n')) |
325 kwmaps = kwtemplater.templates | 344 kwmaps = _defaultkwmaps(ui) |
326 if uikwmaps: | 345 if uikwmaps: |
327 ui.status(_('\tdisabling current template maps\n')) | 346 ui.status(_('\tdisabling current template maps\n')) |
328 for k, v in kwmaps.iteritems(): | 347 for k, v in kwmaps.iteritems(): |
329 ui.setconfig('keywordmaps', k, v) | 348 ui.setconfig('keywordmaps', k, v) |
330 else: | 349 else: |
331 ui.status(_('\n\tconfiguration using current keyword template maps\n')) | 350 ui.status(_('\n\tconfiguration using current keyword template maps\n')) |
332 kwmaps = dict(uikwmaps) or kwtemplater.templates | 351 kwmaps = dict(uikwmaps) or _defaultkwmaps(ui) |
333 | 352 |
334 uisetup(ui) | 353 uisetup(ui) |
335 reposetup(ui, repo) | 354 reposetup(ui, repo) |
336 ui.write('[extensions]\nkeyword =\n') | 355 ui.write('[extensions]\nkeyword =\n') |
337 demoitems('keyword', ui.configitems('keyword')) | 356 demoitems('keyword', ui.configitems('keyword')) |