Mercurial > public > mercurial-scm > hg
comparison mercurial/templater.py @ 34715:f17a0e18c47e
templater: load aliases from [templatealias] section in map file
This seems sometimes useful as an alias can be a function, but a template
fragment can't.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 14 Oct 2017 18:06:42 +0900 |
parents | f4aeb952ab77 |
children | b13c95919ff5 |
comparison
equal
deleted
inserted
replaced
34714:f4aeb952ab77 | 34715:f17a0e18c47e |
---|---|
1342 conf = config.config(includepaths=templatepaths()) | 1342 conf = config.config(includepaths=templatepaths()) |
1343 conf.read(mapfile, remap={'': 'templates'}) | 1343 conf.read(mapfile, remap={'': 'templates'}) |
1344 | 1344 |
1345 cache = {} | 1345 cache = {} |
1346 tmap = {} | 1346 tmap = {} |
1347 aliases = [] | |
1347 | 1348 |
1348 val = conf.get('templates', '__base__') | 1349 val = conf.get('templates', '__base__') |
1349 if val and val[0] not in "'\"": | 1350 if val and val[0] not in "'\"": |
1350 # treat as a pointer to a base class for this style | 1351 # treat as a pointer to a base class for this style |
1351 path = util.normpath(os.path.join(base, val)) | 1352 path = util.normpath(os.path.join(base, val)) |
1360 p3 = util.normpath(os.path.join(p2, "map")) | 1361 p3 = util.normpath(os.path.join(p2, "map")) |
1361 if os.path.isfile(p3): | 1362 if os.path.isfile(p3): |
1362 path = p3 | 1363 path = p3 |
1363 break | 1364 break |
1364 | 1365 |
1365 cache, tmap = _readmapfile(path) | 1366 cache, tmap, aliases = _readmapfile(path) |
1366 | 1367 |
1367 for key, val in conf['templates'].items(): | 1368 for key, val in conf['templates'].items(): |
1368 if not val: | 1369 if not val: |
1369 raise error.ParseError(_('missing value'), | 1370 raise error.ParseError(_('missing value'), |
1370 conf.source('templates', key)) | 1371 conf.source('templates', key)) |
1376 elif key != '__base__': | 1377 elif key != '__base__': |
1377 val = 'default', val | 1378 val = 'default', val |
1378 if ':' in val[1]: | 1379 if ':' in val[1]: |
1379 val = val[1].split(':', 1) | 1380 val = val[1].split(':', 1) |
1380 tmap[key] = val[0], os.path.join(base, val[1]) | 1381 tmap[key] = val[0], os.path.join(base, val[1]) |
1381 return cache, tmap | 1382 aliases.extend(conf['templatealias'].items()) |
1383 return cache, tmap, aliases | |
1382 | 1384 |
1383 class TemplateNotFound(error.Abort): | 1385 class TemplateNotFound(error.Abort): |
1384 pass | 1386 pass |
1385 | 1387 |
1386 class templater(object): | 1388 class templater(object): |
1410 @classmethod | 1412 @classmethod |
1411 def frommapfile(cls, mapfile, filters=None, defaults=None, cache=None, | 1413 def frommapfile(cls, mapfile, filters=None, defaults=None, cache=None, |
1412 minchunk=1024, maxchunk=65536): | 1414 minchunk=1024, maxchunk=65536): |
1413 """Create templater from the specified map file""" | 1415 """Create templater from the specified map file""" |
1414 t = cls(filters, defaults, cache, [], minchunk, maxchunk) | 1416 t = cls(filters, defaults, cache, [], minchunk, maxchunk) |
1415 cache, tmap = _readmapfile(mapfile) | 1417 cache, tmap, aliases = _readmapfile(mapfile) |
1416 t.cache.update(cache) | 1418 t.cache.update(cache) |
1417 t.map = tmap | 1419 t.map = tmap |
1420 t._aliases = aliases | |
1418 return t | 1421 return t |
1419 | 1422 |
1420 def __contains__(self, key): | 1423 def __contains__(self, key): |
1421 return key in self.cache or key in self.map | 1424 return key in self.cache or key in self.map |
1422 | 1425 |