552 'repo': repo, |
552 'repo': repo, |
553 'ui': ui, |
553 'ui': ui, |
554 } |
554 } |
555 |
555 |
556 def availablekeys(self, mapping): |
556 def availablekeys(self, mapping): |
557 return {k for k, g in self._gettermap.iteritems() |
557 return {k for k in self.knownkeys() |
558 if g(self, mapping, k) is not None} |
558 if self._getsome(mapping, k) is not None} |
559 |
559 |
560 def knownkeys(self): |
560 def knownkeys(self): |
561 return self._knownkeys |
561 return {'cache', 'ctx', 'fctx', 'repo', 'revcache', 'ui'} |
562 |
562 |
563 def lookup(self, mapping, key): |
563 def lookup(self, mapping, key): |
564 get = self._gettermap.get(key) |
564 if key not in self.knownkeys(): |
565 if not get: |
|
566 return None |
565 return None |
567 return get(self, mapping, key) |
566 return self._getsome(mapping, key) |
568 |
567 |
569 def populatemap(self, context, origmapping, newmapping): |
568 def populatemap(self, context, origmapping, newmapping): |
570 mapping = {} |
569 mapping = {} |
571 if self._hasctx(newmapping): |
570 if self._hasctx(newmapping): |
572 mapping['revcache'] = {} # per-ctx cache |
571 mapping['revcache'] = {} # per-ctx cache |
582 return v |
581 return v |
583 return self._resmap.get(key) |
582 return self._resmap.get(key) |
584 |
583 |
585 def _hasctx(self, mapping): |
584 def _hasctx(self, mapping): |
586 return 'ctx' in mapping |
585 return 'ctx' in mapping |
587 |
|
588 _gettermap = { |
|
589 'cache': _getsome, |
|
590 'ctx': _getsome, |
|
591 'fctx': _getsome, |
|
592 'repo': _getsome, |
|
593 'revcache': _getsome, |
|
594 'ui': _getsome, |
|
595 } |
|
596 _knownkeys = set(_gettermap.keys()) |
|
597 |
586 |
598 def formatter(ui, out, topic, opts): |
587 def formatter(ui, out, topic, opts): |
599 template = opts.get("template", "") |
588 template = opts.get("template", "") |
600 if template == "json": |
589 if template == "json": |
601 return jsonformatter(ui, out, topic, opts) |
590 return jsonformatter(ui, out, topic, opts) |