Mercurial > public > mercurial-scm > hg
comparison mercurial/formatter.py @ 45310:f3481e4fcc3a
templater: pass opened file-like object to templatespec
I think I said earlier that I planned to create a special templatespec
variant for built-in templates. That was true (I planned that), but I
ended up (in this patch) just adding a file-like object to the
`mapfile_templatespec()` variant instead.
Differential Revision: https://phab.mercurial-scm.org/D8893
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Tue, 04 Aug 2020 13:22:00 -0700 |
parents | 65a812ed9e9f |
children | 4aa484efc926 |
comparison
equal
deleted
inserted
replaced
45309:65a812ed9e9f | 45310:f3481e4fcc3a |
---|---|
538 class templatespec(object): | 538 class templatespec(object): |
539 ref = attr.ib() | 539 ref = attr.ib() |
540 tmpl = attr.ib() | 540 tmpl = attr.ib() |
541 mapfile = attr.ib() | 541 mapfile = attr.ib() |
542 refargs = attr.ib(default=None) | 542 refargs = attr.ib(default=None) |
543 fp = attr.ib(default=None) | |
543 | 544 |
544 | 545 |
545 def empty_templatespec(): | 546 def empty_templatespec(): |
546 return templatespec(None, None, None) | 547 return templatespec(None, None, None) |
547 | 548 |
554 if pycompat.ispy3: | 555 if pycompat.ispy3: |
555 assert not isinstance(tmpl, str), b'tmpl must not be a str' | 556 assert not isinstance(tmpl, str), b'tmpl must not be a str' |
556 return templatespec(b'', tmpl, None) | 557 return templatespec(b'', tmpl, None) |
557 | 558 |
558 | 559 |
559 def mapfile_templatespec(topic, mapfile): | 560 def mapfile_templatespec(topic, mapfile, fp=None): |
560 return templatespec(topic, None, mapfile) | 561 return templatespec(topic, None, mapfile, fp=fp) |
561 | 562 |
562 | 563 |
563 def lookuptemplate(ui, topic, tmpl): | 564 def lookuptemplate(ui, topic, tmpl): |
564 """Find the template matching the given -T/--template spec 'tmpl' | 565 """Find the template matching the given -T/--template spec 'tmpl' |
565 | 566 |
601 if not os.path.split(tmpl)[0]: | 602 if not os.path.split(tmpl)[0]: |
602 (mapname, fp) = templater.open_template( | 603 (mapname, fp) = templater.open_template( |
603 b'map-cmdline.' + tmpl | 604 b'map-cmdline.' + tmpl |
604 ) or templater.open_template(tmpl) | 605 ) or templater.open_template(tmpl) |
605 if mapname: | 606 if mapname: |
606 return mapfile_templatespec(topic, mapname) | 607 return mapfile_templatespec(topic, mapname, fp) |
607 | 608 |
608 # perhaps it's a reference to [templates] | 609 # perhaps it's a reference to [templates] |
609 if ui.config(b'templates', tmpl): | 610 if ui.config(b'templates', tmpl): |
610 return reference_templatespec(tmpl) | 611 return reference_templatespec(tmpl) |
611 | 612 |
643 """Create a templater from either a literal template or loading from | 644 """Create a templater from either a literal template or loading from |
644 a map file""" | 645 a map file""" |
645 assert not (spec.tmpl and spec.mapfile) | 646 assert not (spec.tmpl and spec.mapfile) |
646 if spec.mapfile: | 647 if spec.mapfile: |
647 return templater.templater.frommapfile( | 648 return templater.templater.frommapfile( |
648 spec.mapfile, defaults=defaults, resources=resources, cache=cache | 649 spec.mapfile, |
650 spec.fp, | |
651 defaults=defaults, | |
652 resources=resources, | |
653 cache=cache, | |
649 ) | 654 ) |
650 return maketemplater( | 655 return maketemplater( |
651 ui, spec.tmpl, defaults=defaults, resources=resources, cache=cache | 656 ui, spec.tmpl, defaults=defaults, resources=resources, cache=cache |
652 ) | 657 ) |
653 | 658 |