color: handle non-standard stdout on win32
authorPatrick Mezard <pmezard@gmail.com>
Fri, 23 Apr 2010 14:29:44 +0200
changeset 10989 9fb09fc3ea3c
parent 10988 f2340d699e79
child 10991 11569b997f81
color: handle non-standard stdout on win32
hgext/color.py
--- a/hgext/color.py	Sun Apr 25 23:36:56 2010 +0200
+++ b/hgext/color.py	Fri Apr 23 14:29:44 2010 +0200
@@ -217,7 +217,7 @@
                             _("when to colorize (always, auto, or never)")))
 
 try:
-    import re
+    import re, pywintypes
     from win32console import *
 
     # http://msdn.microsoft.com/en-us/library/ms682088%28VS.85%29.aspx
@@ -243,7 +243,13 @@
     }
 
     stdout = GetStdHandle(STD_OUTPUT_HANDLE)
-    origattr = stdout.GetConsoleScreenBufferInfo()['Attributes']
+    try:
+        origattr = stdout.GetConsoleScreenBufferInfo()['Attributes']
+    except pywintypes.error:
+        # stdout may be defined but not support
+        # GetConsoleScreenBufferInfo(), when called from subprocess or
+        # redirected.
+        raise ImportError()
     ansire = re.compile('\033\[([^m]*)m([^\033]*)(.*)', re.MULTILINE | re.DOTALL)
 
     def win32print(text, orig, **opts):