Show More
@@ -543,6 +543,10 b' def maketemplater(ui, tmpl, defaults=Non' | |||
|
543 | 543 | t.cache[''] = tmpl |
|
544 | 544 | return t |
|
545 | 545 | |
|
546 | # marker to denote a resource to be loaded on demand based on mapping values | |
|
547 | # (e.g. (ctx, path) -> fctx) | |
|
548 | _placeholder = object() | |
|
549 | ||
|
546 | 550 | class templateresources(templater.resourcemapper): |
|
547 | 551 | """Resource mapper designed for the default templatekw and function""" |
|
548 | 552 | |
@@ -563,7 +567,10 b' class templateresources(templater.resour' | |||
|
563 | 567 | def lookup(self, mapping, key): |
|
564 | 568 | if key not in self.knownkeys(): |
|
565 | 569 | return None |
|
566 |
|
|
|
570 | v = self._getsome(mapping, key) | |
|
571 | if v is _placeholder: | |
|
572 | v = mapping[key] = self._loadermap[key](self, mapping) | |
|
573 | return v | |
|
567 | 574 | |
|
568 | 575 | def populatemap(self, context, origmapping, newmapping): |
|
569 | 576 | mapping = {} |
@@ -572,6 +579,10 b' class templateresources(templater.resour' | |||
|
572 | 579 | if self._hasnodespec(origmapping) and self._hasnodespec(newmapping): |
|
573 | 580 | orignode = templateutil.runsymbol(context, origmapping, 'node') |
|
574 | 581 | mapping['originalnode'] = orignode |
|
582 | # put marker to override 'fctx' in mapping if any, and flag | |
|
583 | # its existence to be reported by availablekeys() | |
|
584 | if 'fctx' not in newmapping and self._hasliteral(newmapping, 'path'): | |
|
585 | mapping['fctx'] = _placeholder | |
|
575 | 586 | return mapping |
|
576 | 587 | |
|
577 | 588 | def _getsome(self, mapping, key): |
@@ -580,10 +591,35 b' class templateresources(templater.resour' | |||
|
580 | 591 | return v |
|
581 | 592 | return self._resmap.get(key) |
|
582 | 593 | |
|
594 | def _hasliteral(self, mapping, key): | |
|
595 | """Test if a literal value is set or unset in the given mapping""" | |
|
596 | return key in mapping and not callable(mapping[key]) | |
|
597 | ||
|
598 | def _getliteral(self, mapping, key): | |
|
599 | """Return value of the given name if it is a literal""" | |
|
600 | v = mapping.get(key) | |
|
601 | if callable(v): | |
|
602 | return None | |
|
603 | return v | |
|
604 | ||
|
583 | 605 | def _hasnodespec(self, mapping): |
|
584 | 606 | """Test if context revision is set or unset in the given mapping""" |
|
585 | 607 | return 'node' in mapping or 'ctx' in mapping |
|
586 | 608 | |
|
609 | def _loadfctx(self, mapping): | |
|
610 | ctx = self._getsome(mapping, 'ctx') | |
|
611 | path = self._getliteral(mapping, 'path') | |
|
612 | if ctx is None or path is None: | |
|
613 | return None | |
|
614 | try: | |
|
615 | return ctx[path] | |
|
616 | except error.LookupError: | |
|
617 | return None # maybe removed file? | |
|
618 | ||
|
619 | _loadermap = { | |
|
620 | 'fctx': _loadfctx, | |
|
621 | } | |
|
622 | ||
|
587 | 623 | def formatter(ui, out, topic, opts): |
|
588 | 624 | template = opts.get("template", "") |
|
589 | 625 | if template == "json": |
General Comments 0
You need to be logged in to leave comments.
Login now