Author: Alexander Hesse <[email protected]>
Branch: quiet-rpython
Changeset: r60655:29f82492ab85
Date: 2013-01-28 17:15 +0100
http://bitbucket.org/pypy/pypy/changeset/29f82492ab85/

Log:    -q/--quiet option flag for rpython to make its output less spammy

diff --git a/rpython/tool/ansi_print.py b/rpython/tool/ansi_print.py
--- a/rpython/tool/ansi_print.py
+++ b/rpython/tool/ansi_print.py
@@ -4,7 +4,18 @@
 
 import sys
 from py.io import ansi_print
-from rpython.tool.ansi_mandelbrot import Driver
+from rpython.tool.ansi_mandelbrot import Driver as MandelbrotDriver
+
+class SpinningDriver(object):
+    def __init__(self):
+        self.states = ['|', '/', '-', '\\']
+        self.state = 0
+    def reset(self):
+        self.state = 0
+    def dot(self):
+        sys.stderr.write(self.states[self.state] + '\b')
+        self.state += 1
+        self.state %= len(self.states)
 
 class AnsiLog:
     wrote_dot = False # XXX sharing state with all instances
@@ -20,17 +31,32 @@
         'info': ((35,), False),
         'stub': ((34,), False),
     }
+    
+    log_on_quiet = [
+        "ERROR",
+        "Error",
+        "info",
+    ]
 
     def __init__(self, kw_to_color={}, file=None):
         self.kw_to_color = self.KW_TO_COLOR.copy()
         self.kw_to_color.update(kw_to_color)
         self.file = file
-        self.fancy = True
         self.isatty = getattr(sys.stderr, 'isatty', lambda: False)
-        if self.fancy and self.isatty(): 
-            self.mandelbrot_driver = Driver()
-        else:
-            self.mandelbrot_driver = None
+        self.driver = None
+        self.set_option(fancy=True, quiet=False)
+
+    def set_option(self, fancy=None, quiet=None):
+        if fancy is not None:
+            self.fancy = fancy
+        if quiet is not None:
+            self.quiet = quiet
+        
+        self.driver = None
+        if self.isatty and self.fancy:
+            self.driver = MandelbrotDriver()
+        if self.isatty and self.quiet:
+            self.driver = SpinningDriver()
 
     def __call__(self, msg):
         tty = self.isatty()
@@ -55,10 +81,10 @@
                 return
         elif 'dot' in keywords:
             if tty:
-                if self.fancy:
+                if self.driver is not None:
                     if not AnsiLog.wrote_dot:
-                        self.mandelbrot_driver.reset()
-                    self.mandelbrot_driver.dot()
+                        self.driver.reset()
+                    self.driver.dot()
                 else:
                     ansi_print(".", tuple(esc), file=self.file, newline=False, 
flush=flush)
                 AnsiLog.wrote_dot = True
@@ -67,8 +93,9 @@
             AnsiLog.wrote_dot = False
             sys.stderr.write("\n")
         esc = tuple(esc)
-        for line in msg.content().splitlines():
-            ansi_print("[%s] %s" %(":".join(keywords), line), esc, 
-                       file=self.file, newline=newline, flush=flush)
+        if not self.quiet or any([kw in self.log_on_quiet for kw in keywords]):
+            for line in msg.content().splitlines():
+                ansi_print("[%s] %s" %(":".join(keywords), line), esc, 
+                            file=self.file, newline=newline, flush=flush)
 
 ansi_log = AnsiLog()
diff --git a/rpython/translator/goal/translate.py 
b/rpython/translator/goal/translate.py
--- a/rpython/translator/goal/translate.py
+++ b/rpython/translator/goal/translate.py
@@ -74,6 +74,8 @@
                cmdline="-h --help", negation=False),
     BoolOption("fullhelp", "show full help message and exit", default=False,
                cmdline="--full-help", negation=False),
+    BoolOption("quiet", "be less verbose and don't paint fractals", 
default=False,
+               cmdline="-q --quiet", negation=False),
     ArbitraryOption("goals", "XXX",
                     defaultfactory=list),
     # xxx default goals ['annotate', 'rtype', 'backendopt', 'source', 
'compile']
@@ -117,6 +119,8 @@
 
     options, args = opt_parser.parse_args()
 
+    ansi_log.set_option(quiet=translateconfig.quiet)
+
     # set goals and skipped_goals
     reset = False
     for name, _, _, _ in GOALS:
diff --git a/rpython/translator/platform/__init__.py 
b/rpython/translator/platform/__init__.py
--- a/rpython/translator/platform/__init__.py
+++ b/rpython/translator/platform/__init__.py
@@ -7,7 +7,7 @@
 from rpython.tool.udir import udir
 
 log = py.log.Producer("platform")
-
+py.log.setconsumer("platform", ansi_log)
 
 class CompilationError(Exception):
     def __init__(self, out, err):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to