[PATCH 1 of 2 V2] formatter: reserve _ prefixed keys as internal and don't render

Gregory Szorc gregory.szorc at gmail.com
Wed Mar 22 06:49:25 UTC 2017


# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1490164306 25200
#      Tue Mar 21 23:31:46 2017 -0700
# Node ID ae796e23fd42b036352b298f570af8949c2db2d9
# Parent  102f291807c92864a2231e5e925d6cd64783bb59
formatter: reserve _ prefixed keys as internal and don't render

As part of implementing `hg show`, Yuya noticed that JSON formatting
was rendering an internal-only key, which was unfortunate.

In this patch, I document new behavior on fm.data() that all
keys beginning with underscores are reserved. I change the behavior
of the JSON formatter to not render keys beginning with underscores.

I ran the test suite with fm.data() raising if any key with a leading
underscore was passed in and there were no test failures. So I think
it is safe to adopt this convention.

diff --git a/mercurial/formatter.py b/mercurial/formatter.py
--- a/mercurial/formatter.py
+++ b/mercurial/formatter.py
@@ -176,7 +176,11 @@ class baseformatter(object):
         '''insert context objects to be used to render template keywords'''
         pass
     def data(self, **data):
-        '''insert data into item that's not shown in default output'''
+        '''insert data into item that's not shown in default output
+
+        Keys beginning with '_' are designated as internal and may not be
+        rendered by all formatters.
+        '''
         self._item.update(data)
     def write(self, fields, deftext, *fielddata, **opts):
         '''do default text output while assigning data to item'''
@@ -315,6 +319,9 @@ class jsonformatter(baseformatter):
         self._out.write("\n {\n")
         first = True
         for k, v in sorted(self._item.items()):
+            # Don't format hidden elements.
+            if k.startswith('_'):
+                continue
             if first:
                 first = False
             else:


More information about the Mercurial-devel mailing list