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

Matt Mackall mpm at selenic.com
Wed Sep 9 23:08:27 UTC 2015


# HG changeset patch
# User Matt Mackall <mpm at selenic.com>
# Date 1440624434 18000
#      Wed Aug 26 16:27:14 2015 -0500
# Node ID 95b52a3f5cec3784d9b125d9b0038b1c4e8a327d
# Parent  ea489d94e1dc1fc3dc1dcbef1c86c18c49605ed1
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

diff -r ea489d94e1dc -r 95b52a3f5cec mercurial/cmdutil.py
--- a/mercurial/cmdutil.py	Sat Aug 22 17:08:37 2015 -0700
+++ b/mercurial/cmdutil.py	Wed Aug 26 16:27:14 2015 -0500
@@ -1422,7 +1422,8 @@
             (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 @@
                 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'''
 
diff -r ea489d94e1dc -r 95b52a3f5cec mercurial/templates/map-cmdline.xml
--- a/mercurial/templates/map-cmdline.xml	Sat Aug 22 17:08:37 2015 -0700
+++ b/mercurial/templates/map-cmdline.xml	Wed Aug 26 16:27:14 2015 -0500
@@ -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'
diff -r ea489d94e1dc -r 95b52a3f5cec tests/test-command-template.t
--- a/tests/test-command-template.t	Sat Aug 22 17:08:37 2015 -0700
+++ b/tests/test-command-template.t	Wed Aug 26 16:27:14 2015 -0500
@@ -343,6 +343,11 @@
 
 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>


More information about the Mercurial-devel mailing list