inferior: Allow controlling the inferior error port.

Previously, stderr for the inferior process would always be sent to /dev/null
because the current-output-port when the process is launched is a void
port. This change means that it's possible to pass in a different port to use.

* guix/inferior.scm (inferior-pipe): Take the error-port as an argument.
(open-inferior): Add new error-port keyword argument, with a default
of (%make-void-port "w").
This commit is contained in:
Christopher Baines 2019-10-02 19:12:38 +01:00
parent 1007640a63
commit f0428c18f8
No known key found for this signature in database
GPG key ID: 5E28A33B0B84F577

View file

@ -110,11 +110,11 @@ (define-record-type <inferior>
(packages inferior-package-promise) ;promise of inferior packages
(table inferior-package-table)) ;promise of vhash
(define (inferior-pipe directory command)
(define* (inferior-pipe directory command error-port)
"Return an input/output pipe on the Guix instance in DIRECTORY. This runs
'DIRECTORY/COMMAND repl' if it exists, or falls back to some other method if
it's an old Guix."
(let ((pipe (with-error-to-port (%make-void-port "w")
(let ((pipe (with-error-to-port error-port
(lambda ()
(open-pipe* OPEN_BOTH
(string-append directory "/" command)
@ -161,11 +161,13 @@ (define* (port->inferior pipe #:optional (close close-port))
(_
#f)))
(define* (open-inferior directory #:key (command "bin/guix"))
(define* (open-inferior directory
#:key (command "bin/guix")
(error-port (%make-void-port "w")))
"Open the inferior Guix in DIRECTORY, running 'DIRECTORY/COMMAND repl' or
equivalent. Return #f if the inferior could not be launched."
(define pipe
(inferior-pipe directory command))
(inferior-pipe directory command error-port))
(port->inferior pipe close-pipe))