;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
;;;
;;; This file is part of GNU Guix.
#:use-module (guix colors)
#:use-module (guix progress)
#:autoload (guix build syscalls) (terminal-columns)
- #:use-module ((guix build download)
- #:select (nar-uri-abbreviation))
+ #:autoload (guix build download) (nar-uri-abbreviation)
#:use-module (guix store)
#:use-module (guix derivations)
#:use-module (guix memoization)
#:optional (port (current-error-port))
#:key
(colorize? (color-output? port))
+ (print-urls? #t)
(print-log? #t))
"Print information about EVENT and STATUS to PORT. When COLORIZE? is true,
produce colorful output. When PRINT-LOG? is true, display the build log in
-addition to build events."
+addition to build events. When PRINT-URLS? is true, display the URL of
+substitutes being downloaded."
(define info
(if colorize?
(cute colorize-string <> (color BOLD))
(cute colorize-string <> (color RED BOLD))
identity))
+ (define tty?
+ (isatty?* port))
+
(define (report-build-progress phase %)
(let ((% (min (max % 0) 100))) ;sanitize
(erase-current-line port)
(let ((count (match (assq-ref properties 'graft)
(#f 0)
(lst (or (assq-ref lst 'count) 0)))))
- (format port (info (N_ "applying ~a graft for ~a..."
- "applying ~a grafts for ~a..."
+ (format port (info (N_ "applying ~a graft for ~a ..."
+ "applying ~a grafts for ~a ..."
count))
count drv)))
('profile
(format port (info (G_ "substituting ~a...")) item)
(newline port)))
(('download-started item uri _ ...)
- (erase-current-line*)
- (format port (info (G_ "downloading from ~a...")) uri)
- (newline port))
+ (when print-urls?
+ (erase-current-line*)
+ (format port (info (G_ "downloading from ~a ...")) uri)
+ (newline port)))
(('download-progress item uri
(= string->number size)
(= string->number transferred))
(nar-uri-abbreviation uri)
(basename uri))))
(display-download-progress uri size
+ #:tty? tty?
#:start-time
(download-start download)
#:transferred transferred))))))
(colorize? (color-output? port)))
(print-build-event event old-status status port
#:colorize? colorize?
+ #:print-urls? #f
+ #:print-log? #f))
+
+(define* (print-build-event/quiet-with-urls event old-status status
+ #:optional
+ (port (current-error-port))
+ #:key
+ (colorize? (color-output? port)))
+ (print-build-event event old-status status port
+ #:colorize? colorize?
+ #:print-urls? #t ;show download URLs
#:print-log? #f))
(define* (build-status-updater #:optional (on-change (const #t)))
"Return the logging procedure that corresponds to LEVEL."
(cond ((<= level 0) (const #t))
((= level 1) print-build-event/quiet)
+ ((= level 2) print-build-event/quiet-with-urls)
(else print-build-event)))
(define (call-with-status-verbosity level thunk)