[kernel-sec-discuss] r4155 - scripts

Ben Hutchings benh at moszumanska.debian.org
Fri Feb 12 21:59:41 UTC 2016


Author: benh
Date: 2016-02-12 21:59:41 +0000 (Fri, 12 Feb 2016)
New Revision: 4155

Modified:
   scripts/filter-active.py
Log:
filter-active: Add optional colour-coding of status

Add options to enable/disable colour-coding, and enable by default if
writing to a terminal.


Modified: scripts/filter-active.py
===================================================================
--- scripts/filter-active.py	2016-02-12 21:29:19 UTC (rev 4154)
+++ scripts/filter-active.py	2016-02-12 21:59:41 UTC (rev 4155)
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 
-import os, re, sys
+import os, re, sys, curses
 from optparse import OptionParser
 from debian import deb822
 
@@ -94,6 +94,9 @@
     parser.add_option("-r", "--release", action="append")
     parser.add_option("-s", "--states", action="append")
     parser.add_option("-n", "--notstates", action="append")
+    parser.add_option("-c", "--color", "--colour", action="store_true")
+    parser.add_option("--no-color", "--no-colour",
+                      action="store_false", dest="color")
 
     (options, args) = parser.parse_args()
 
@@ -103,6 +106,24 @@
     if not options.states and not options.notstates:
         print('I: Excluding N/A, ignored and released issues')
         options.notstates = ['N/A', 'ignored', 'released']
+    if options.color is None:
+        options.color = sys.stdout.isatty()
+    if options.color:
+        curses.setupterm()
+        status_color = {"needed": curses.tparm(curses.tigetstr("setaf"),
+                                               curses.COLOR_RED),
+                        "ignored": curses.tparm(curses.tigetstr("setaf"),
+                                                curses.COLOR_YELLOW),
+                        "pending": curses.tparm(curses.tigetstr("setaf"),
+                                                curses.COLOR_MAGENTA),
+                        "released": curses.tparm(curses.tigetstr("setaf"),
+                                                 curses.COLOR_GREEN),
+                        "N/A": curses.tparm(curses.tigetstr("setaf"),
+                                            curses.COLOR_GREEN)}
+        color_off = curses.tparm(curses.tigetstr("op"))
+    else:
+        color_off = ''
+
     issues = []
     for d in options.dirs:
         issues = issues + get_issues(d)
@@ -130,6 +151,12 @@
     for i in issues:
         sys.stdout.write("  %s:" % i.name)
         for release in options.release:
-            sys.stdout.write(" %-*.*s " %
-                             (min_width, max_width, i.status(release) or "unknown"))
+            status = i.status(release) or "unknown"
+            status_short = status.split(' ')[0]
+            if options.color and status_color.has_key(status_short):
+                color_on = status_color[status_short]
+            else:
+                color_on = ''
+            sys.stdout.write(" %s%-*.*s%s " %
+                             (color_on, min_width, max_width, status, color_off))
         sys.stdout.write("\n")




More information about the kernel-sec-discuss mailing list