diff -r 75c13343cf38 -r 8bb3899a0f47 mercurial/formatter.py --- 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