summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2021-03-30 16:35:05 +0200
committerLudovic Courtès <ludo@gnu.org>2021-04-01 14:58:55 +0200
commita81a19930b2cbe1327e1e82d6210f80846ce2898 (patch)
treebb9cf7defeaccc7bed0958b8502891822be8bd4b
parent1c10c2751a9075db5ab70fd102f0cc5ef2375720 (diff)
downloadguix-a81a19930b2cbe1327e1e82d6210f80846ce2898.tar.gz
guix-a81a19930b2cbe1327e1e82d6210f80846ce2898.tar.xz
build-self: Take care of the spinner in the parent process.
This simplifies code and mostly ensures we don't print a spinner while there's build activity going on. * build-aux/build-self.scm (build-program): Remove 'spin' and 'call-with-new-thread' call from "compute-guix-derivation" body. Remove "Computing Guix derivation" message. (proxy): Pass extra argument to 'select'. Display a spinner when 'select' returns empty lists. (build): Print "Computing Guix derivation" message here.
-rw-r--r--build-aux/build-self.scm43
1 files changed, 17 insertions, 26 deletions
diff --git a/build-aux/build-self.scm b/build-aux/build-self.scm
index 3e057ca5d2..853a2f328f 100644
--- a/build-aux/build-self.scm
+++ b/build-aux/build-self.scm
@@ -285,8 +285,7 @@ interface (FFI) of Guile.")
#:select? select?))
(gexp->script "compute-guix-derivation"
#~(begin
- (use-modules (ice-9 match)
- (ice-9 threads))
+ (use-modules (ice-9 match))
(eval-when (expand load eval)
;; (gnu packages …) modules are going to be looked up
@@ -320,21 +319,6 @@ interface (FFI) of Guile.")
(guix derivations)
(srfi srfi-1))
- (define (spin system)
- (define spin
- (circular-list "-" "\\" "|" "/" "-" "\\" "|" "/"))
-
- (format (current-error-port)
- "Computing Guix derivation for '~a'... "
- system)
- (when (isatty? (current-error-port))
- (let loop ((spin spin))
- (display (string-append "\b" (car spin))
- (current-error-port))
- (force-output (current-error-port))
- (sleep 1)
- (loop (cdr spin)))))
-
(match (command-line)
((_ source system version protocol-version
build-output)
@@ -352,10 +336,6 @@ interface (FFI) of Guile.")
#:version proto)
(open-connection)))
(sock (socket AF_UNIX SOCK_STREAM 0)))
- (call-with-new-thread
- (lambda ()
- (spin system)))
-
;; Connect to BUILD-OUTPUT and send it the raw
;; build output.
(connect sock AF_UNIX build-output)
@@ -378,18 +358,26 @@ interface (FFI) of Guile.")
#:module-path (list source))))
(define (proxy input output)
- "Dump the contents of INPUT to OUTPUT until EOF is reached on INPUT."
+ "Dump the contents of INPUT to OUTPUT until EOF is reached on INPUT.
+Display a spinner when nothing happens."
+ (define spin
+ (circular-list "-" "\\" "|" "/" "-" "\\" "|" "/"))
+
(setvbuf input 'block 16384)
- (let loop ()
- (match (select (list input) '() '())
+ (let loop ((spin spin))
+ (match (select (list input) '() '() 1)
((() () ())
- (loop))
+ (when (isatty? (current-error-port))
+ (display (string-append "\b" (car spin))
+ (current-error-port))
+ (force-output (current-error-port)))
+ (loop (cdr spin)))
(((_) () ())
;; Read from INPUT as much as can be read without blocking.
(let ((bv (get-bytevector-some input)))
(unless (eof-object? bv)
(put-bytevector output bv)
- (loop)))))))
+ (loop spin)))))))
(define (call-with-clean-environment thunk)
(let ((env (environ)))
@@ -472,6 +460,9 @@ files."
(logior major minor))
"none")
node))))))
+ (format (current-error-port) "Computing Guix derivation for '~a'... "
+ system)
+
;; Wait for a connection on SOCK and proxy build output so it can be
;; processed according to the settings currently in effect (build
;; traces, verbosity level, and so on).