[pypy-commit] pypy default: Improve the output of "pypy --info" to follow the style output by

arigo noreply at buildbot.pypy.org
Wed May 9 09:04:38 CEST 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r54980:51326a2c5f7b
Date: 2012-05-09 09:02 +0200
http://bitbucket.org/pypy/pypy/changeset/51326a2c5f7b/

Log:	Improve the output of "pypy --info" to follow the style output by
	translate.py. It still prints all options instead of the non-
	default ones, but maybe it's not a bad idea anyway.

diff --git a/pypy/translator/goal/app_main.py b/pypy/translator/goal/app_main.py
--- a/pypy/translator/goal/app_main.py
+++ b/pypy/translator/goal/app_main.py
@@ -121,8 +121,18 @@
     else:
         optitems = options.items()
         optitems.sort()
-        for name, value in optitems:
-            print ' %51s: %s' % (name, value)
+        current = []
+        for key, value in optitems:
+            group = key.split('.')
+            name = group.pop()
+            n = 0
+            while n < min(len(current), len(group)) and current[n] == group[n]:
+                n += 1
+            while n < len(group):
+                print '%s[%s]' % ('    ' * n, group[n])
+                n += 1
+            print '%s%s = %r' % ('    ' * n, name, value)
+            current = group
     raise SystemExit
 
 def print_help(*args):
diff --git a/pypy/translator/goal/test2/test_app_main.py b/pypy/translator/goal/test2/test_app_main.py
--- a/pypy/translator/goal/test2/test_app_main.py
+++ b/pypy/translator/goal/test2/test_app_main.py
@@ -787,6 +787,37 @@
         assert data.startswith("15\xe2\x82\xac")
 
 
+class TestAppMain:
+    
+    def test_print_info(self):
+        from pypy.translator.goal import app_main
+        import sys, cStringIO
+        prev_so = sys.stdout
+        prev_ti = getattr(sys, 'pypy_translation_info', 'missing')
+        sys.pypy_translation_info = {
+            'translation.foo': True,
+            'translation.bar': 42,
+            'translation.egg.something': None,
+            'objspace.x': 'hello',
+        }
+        try:
+            sys.stdout = f = cStringIO.StringIO()
+            py.test.raises(SystemExit, app_main.print_info)
+        finally:
+            sys.stdout = prev_so
+            if prev_ti == 'missing':
+                del sys.pypy_translation_info
+            else:
+                sys.pypy_translation_info = prev_ti
+        assert f.getvalue() == ("[objspace]\n"
+                                "    x = 'hello'\n"
+                                "[translation]\n"
+                                "    bar = 42\n"
+                                "    [egg]\n"
+                                "        something = None\n"
+                                "    foo = True\n")
+
+
 class AppTestAppMain:
 
     def setup_class(self):


More information about the pypy-commit mailing list