From 0190896b0b46c2d2960689b7fd9ab38b770cd2ea Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Fri, 16 Mar 2012 09:56:09 +0000 Subject: [PATCH 1/1] Handle less not existing. --- scripts/highlight.py | 65 ++++++++++++++++++++++++++++++------------ scripts/retracediff.py | 4 +-- scripts/tracediff2.py | 14 ++------- 3 files changed, 50 insertions(+), 33 deletions(-) diff --git a/scripts/highlight.py b/scripts/highlight.py index 1d49469..fa0e0ba 100644 --- a/scripts/highlight.py +++ b/scripts/highlight.py @@ -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) + diff --git a/scripts/retracediff.py b/scripts/retracediff.py index ee5730a..8a0837a 100755 --- a/scripts/retracediff.py +++ b/scripts/retracediff.py @@ -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') diff --git a/scripts/tracediff2.py b/scripts/tracediff2.py index cfa38d2..bba4ebe 100755 --- a/scripts/tracediff2.py +++ b/scripts/tracediff2.py @@ -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__': -- 2.43.0