mercurial/formatter.py
changeset 37500 8bb3899a0f47
parent 37108 e7bc0667c521
child 37596 8c121a9837ca
--- a/mercurial/formatter.py	Sun Mar 18 23:36:52 2018 +0900
+++ b/mercurial/formatter.py	Thu Mar 15 22:27:16 2018 +0900
@@ -95,7 +95,7 @@
 >>> def subrepos(ui, fm):
 ...     fm.startitem()
 ...     fm.write(b'reponame', b'[%s]\\n', b'baz')
-...     files(ui, fm.nested(b'files'))
+...     files(ui, fm.nested(b'files', tmpl=b'{reponame}'))
 ...     fm.end()
 >>> show(subrepos)
 [baz]
@@ -138,6 +138,10 @@
     storecontext = False
 
     @staticmethod
+    def wrapnested(data, tmpl, sep):
+        '''wrap nested data by appropriate type'''
+        return data
+    @staticmethod
     def formatdate(date, fmt):
         '''convert date tuple to appropriate format'''
         return date
@@ -210,9 +214,10 @@
     def isplain(self):
         '''check for plain formatter usage'''
         return False
-    def nested(self, field):
+    def nested(self, field, tmpl=None, sep=''):
         '''sub formatter to store nested data in the specified field'''
-        self._item[field] = data = []
+        data = []
+        self._item[field] = self._converter.wrapnested(data, tmpl, sep)
         return _nestedformatter(self._ui, self._converter, data)
     def end(self):
         '''end output for the formatter'''
@@ -243,6 +248,9 @@
     storecontext = False
 
     @staticmethod
+    def wrapnested(data, tmpl, sep):
+        raise error.ProgrammingError('plainformatter should never be nested')
+    @staticmethod
     def formatdate(date, fmt):
         '''stringify date tuple in the given format'''
         return dateutil.datestr(date, fmt)
@@ -290,7 +298,7 @@
         self._write(text, **opts)
     def isplain(self):
         return True
-    def nested(self, field):
+    def nested(self, field, tmpl=None, sep=''):
         # nested data will be directly written to ui
         return self
     def end(self):
@@ -350,6 +358,10 @@
     storecontext = True
 
     @staticmethod
+    def wrapnested(data, tmpl, sep):
+        '''wrap nested data by templatable type'''
+        return templateutil.mappinglist(data, tmpl=tmpl, sep=sep)
+    @staticmethod
     def formatdate(date, fmt):
         '''return date tuple'''
         return date