templater: add new docheader/footer components for XML (issue4135)

The existing header/footer components were templated per-changeset,
and thus couldn't be correctly printed for an empty log
This commit is contained in:
Matt Mackall 2015-08-26 16:27:14 -05:00
parent 0dd6c0c729
commit 5b498724ca
3 changed files with 19 additions and 3 deletions

View File

@ -1422,7 +1422,8 @@ class changeset_templater(changeset_printer):
(self.ui.debugflag, 'debug'),
]
self._parts = {'header': '', 'footer': '', 'changeset': 'changeset'}
self._parts = {'header': '', 'footer': '', 'changeset': 'changeset',
'docheader': '', 'docfooter': ''}
for mode, postfix in tmplmodes:
for t in self._parts:
cur = t
@ -1431,6 +1432,16 @@ class changeset_templater(changeset_printer):
if mode and cur in self.t:
self._parts[t] = cur
if self._parts['docheader']:
self.ui.write(templater.stringify(self.t(self._parts['docheader'])))
def close(self):
if self._parts['docfooter']:
if not self.footer:
self.footer = ""
self.footer += templater.stringify(self.t(self._parts['docfooter']))
return super(changeset_templater, self).close()
def _show(self, ctx, copies, matchfn, props):
'''show a single changeset or file revision'''

View File

@ -1,5 +1,5 @@
header = '<?xml version="1.0"?>\n<log>\n'
footer = '</log>\n'
docheader = '<?xml version="1.0"?>\n<log>\n'
docfooter = '</log>\n'
changeset = '<logentry revision="{rev}" node="{node}">\n{branches}{bookmarks}{tags}{parents}<author email="{author|email|xmlescape}">{author|person|xmlescape}</author>\n<date>{date|rfc3339date}</date>\n<msg xml:space="preserve">{desc|xmlescape}</msg>\n</logentry>\n'
changeset_verbose = '<logentry revision="{rev}" node="{node}">\n{branches}{bookmarks}{tags}{parents}<author email="{author|email|xmlescape}">{author|person|xmlescape}</author>\n<date>{date|rfc3339date}</date>\n<msg xml:space="preserve">{desc|xmlescape}</msg>\n<paths>\n{file_adds}{file_dels}{file_mods}</paths>\n{file_copies}</logentry>\n'

View File

@ -343,6 +343,11 @@ Compact style works:
Test xml styles:
$ hg log --style xml -r 'not all()'
<?xml version="1.0"?>
<log>
</log>
$ hg log --style xml
<?xml version="1.0"?>
<log>