]> git.cworth.org Git - apitrace/commitdiff
Handle less not existing.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 16 Mar 2012 09:56:09 +0000 (09:56 +0000)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 16 Mar 2012 09:56:09 +0000 (09:56 +0000)
scripts/highlight.py
scripts/retracediff.py
scripts/tracediff2.py

index 1d494690a1c8e5eb9e5f36fbb7263f3c890607db..fa0e0ba89a2bbdd752450f8ebdb23fb02c97f526 100644 (file)
@@ -1,6 +1,6 @@
 ##########################################################################
 #
-# Copyright 2011 Jose Fonseca
+# Copyright 2011-2012 Jose Fonseca
 # Copyright 2008-2009 VMware, Inc.
 # All Rights Reserved.
 #
@@ -25,8 +25,9 @@
 ##########################################################################/
 
 
-import sys
 import platform
+import subprocess
+import sys
 
 
 class PlainHighlighter:
@@ -41,7 +42,7 @@ class PlainHighlighter:
     cyan = None
     white = None
 
-    def __init__(self, stream):
+    def __init__(self, stream = sys.stdout):
         self.stream = stream
 
     def write(self, text):
@@ -56,7 +57,7 @@ class PlainHighlighter:
     def color(self, color):
         pass
 
-    def bold(self):
+    def bold(self, enable):
         pass
 
     def italic(self):
@@ -72,7 +73,6 @@ class AnsiHighlighter(PlainHighlighter):
     _csi = '\33['
 
     _normal = '0m'
-    _bold = '1m'
     _italic = '3m'
 
     black = 0
@@ -84,7 +84,7 @@ class AnsiHighlighter(PlainHighlighter):
     cyan = 6
     white = 7
 
-    def __init__(self, stream):
+    def __init__(self, stream = sys.stdout):
         PlainHighlighter.__init__(self, stream)
 
     def _escape(self, code):
@@ -134,7 +134,6 @@ class WindowsConsoleHighlighter(PlainHighlighter):
     COMMON_LVB_UNDERSCORE = 0x8000
 
     _normal = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED
-    _bold   = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY
     _italic = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED
 
     black   = 0
@@ -143,7 +142,7 @@ class WindowsConsoleHighlighter(PlainHighlighter):
     blue    = FOREGROUND_BLUE                                    
     white   = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED
 
-    def __init__(self, stream):
+    def __init__(self, stream = sys.stdout):
         PlainHighlighter.__init__(self, stream)
 
         if stream is sys.stdin:
@@ -176,23 +175,51 @@ class WindowsConsoleHighlighter(PlainHighlighter):
         intensity = self._attribute & self.FOREGROUND_INTENSITY
         self._setAttribute(color | intensity)
 
-    def bold(self):
-        self._setAttribute(self._attribute | self.FOREGROUND_INTENSITY)
+    def bold(self, enable):
+        if enable:
+            attribute = self._attribute | self.FOREGROUND_INTENSITY
+        else:
+            attribute = self._attribute & ~self.FOREGROUND_INTENSITY
+        self._setAttribute(attribute)
 
     def italic(self):
         pass
 
 
-def Highlighter(stream = sys.stdout, force = False):
-    if force or stream.isatty():
-        if platform.system() == 'Windows':
-            return WindowsConsoleHighlighter(stream)
-        else:
-            return AnsiHighlighter(stream)
+if platform.system() == 'Windows':
+    ColorHighlighter = WindowsConsoleHighlighter
+else:
+    ColorHighlighter = AnsiHighlighter
+
+
+def AutoHighlighter(stream = sys.stdout):
+    if stream.isatty():
+        return ColorHighlighter(stream)
     else:
         return PlainHighlighter(stream)
 
 
-__all__ = [
-    'Highlighter',
-]
+class _LessHighlighter(AnsiHighlighter):
+
+    def __init__(self, less):
+        AnsiHighlighter.__init__(self, less.stdin)
+        self.less = less
+
+    def __del__(self):
+        self.less.stdin.close()
+        self.less.wait()
+
+
+def LessHighlighter():
+    if sys.stdout.isatty():
+        try:
+            less = subprocess.Popen(
+                args = ['less', '-FRXn'],
+                stdin = subprocess.PIPE
+            )
+        except OSError:
+            return ColorHighlighter()
+        else:
+            return _LessHighlighter(less)
+    return PlainHighlighter(sys.stdout)
+
index ee5730ab4988178dba51e6f9a6feb1a6dac647e5..8a0837a82bf6a17d9e973c62db70cdbaf6b9860c 100755 (executable)
@@ -37,7 +37,7 @@ import sys
 from PIL import Image
 
 from snapdiff import Comparer
-from highlight import Highlighter
+from highlight import AutoHighlighter
 import jsondiff
 
 
@@ -178,7 +178,7 @@ def main():
     else:
         output = sys.stdout
 
-    highligher = Highlighter(output)
+    highligher = AutoHighlighter(output)
 
     highligher.write('call\tprecision\n')
 
index cfa38d2d03ccbeb5d5ad8567210e8611635c6831..bba4ebead1e3f287ff00f54b7b3d04ab142a84f0 100755 (executable)
@@ -32,7 +32,7 @@ import subprocess
 import sys
 
 from unpickle import Unpickler
-from highlight import Highlighter
+from highlight import LessHighlighter
 
 
 ignoredFunctionNames = set([
@@ -238,20 +238,10 @@ def main():
     ref_calls = readtrace(args[0])
     src_calls = readtrace(args[1])
 
-    if sys.stdout.isatty():
-        less = subprocess.Popen(
-            args = ['less', '-FRXn'],
-            stdin = subprocess.PIPE
-        )
-        highlighter = Highlighter(less.stdin, True)
-    else:
-        highlighter = Highlighter(sys.stdout)
+    highlighter = LessHighlighter()
 
     differ = SDiffer(ref_calls, src_calls, highlighter)
     differ.diff()
-    less.stdin.close()
-
-    less.wait()
 
 
 if __name__ == '__main__':