From 99526f5624633e5fdc72fe8fb280b1279bea0636 Mon Sep 17 00:00:00 2001 From: Sahithi Yarlagadda Date: Sat, 16 Jun 2018 13:21:42 +0530 Subject: [PATCH] guix: Add coloring soft port. * guix/ui.scm (handle-string): New procedures. (colorful-build-output-port): New variable. guix: Added colorful-build-output-port to build.scm instead of default --- guix/scripts/build.scm | 4 +--- guix/ui.scm | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm index 4dd4fbccd..81ad255d8 100644 --- a/guix/scripts/build.scm +++ b/guix/scripts/build.scm @@ -733,9 +733,7 @@ needed." ;; Set the build options before we do anything else. (set-build-options-from-command-line store opts) - (parameterize ((current-build-output-port (if quiet? - (%make-void-port "w") - (current-error-port)))) + (parameterize ((current-build-output-port colorful-build-output-port)) (let* ((mode (assoc-ref opts 'build-mode)) (drv (options->derivations store opts)) (urls (map (cut string-append <> "/log") diff --git a/guix/ui.scm b/guix/ui.scm index 80f1a4d77..88e5fa6b7 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -109,7 +109,7 @@ warning info guix-main - colorize-string)) + colorful-build-output-port)) ;;; Commentary: ;;; @@ -1631,4 +1631,51 @@ be reset such that subsequent output will not have any colors in effect." str (color 'RESET))) +(define (handle-string str) + "Accepts input string(str) as argument and checks whether it matches with one +of the regular expressions specified. Upon matching, each substring is colorized +with corresponding colors and the modified colored string is returned. If the +input string fails match with the following conditionals it returns back the +unmodified input string." + (let ((message (or (and=> (string-match "^(starting phase)(.*)" str) + (lambda (m) + (string-append + (colorize-string (match:substring m 1) 'BLUE) + (colorize-string (match:substring m 2) 'GREEN)))) + + (and=> (string-match "^(phase)(.*)(succeeded after)(.*)(seconds)" str) + (lambda (m) + (string-append + (colorize-string (match:substring m 1) 'BLUE) + (colorize-string (match:substring m 2) 'GREEN) + (colorize-string (match:substring m 3) 'BLUE) + (colorize-string (match:substring m 4) 'GREEN) + (colorize-string (match:substring m 5) 'BLUE)))) + + (and=> (string-match "^(phase)(.*)(failed after)(.*)(seconds)" str) + (lambda (m) + (string-append + (colorize-string (match:substring m 1) 'RED) + (colorize-string (match:substring m 2) 'GREEN) + (colorize-string (match:substring m 3) 'RED) + (colorize-string (match:substring m 4) 'GREEN) + (colorize-string (match:substring m 5) 'RED)))) + + ;; Didn’t match with any expression, returns back unmodified string. + str))) + (display message (current-error-port)))) + +(define colorful-build-output-port + (make-soft-port + (vector + ;; procedure accepting one character for output + (lambda (c) (write c (current-error-port))) + ;; procedure accepting a string for handle-string procedure + handle-string + (lambda () (force-output (current-error-port))) + (const #t) + (lambda () (display "@" (current-error-port)))) + "rw")) + + ;;; ui.scm ends here -- 2.11.0