store: Raise error conditions upon protocol errors.
* guix/store.scm (&nix-error, &nix-protocol-error): New SRFI-35 condition types. (process-stderr): Raise an error condition upon protocol errors instead of returning to the caller. This allows the connection to be reused for further interactions.
This commit is contained in:
parent
e3deeebb27
commit
e87088c9d5
|
@ -22,6 +22,8 @@
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-9)
|
#:use-module (srfi srfi-9)
|
||||||
#:use-module (srfi srfi-26)
|
#:use-module (srfi srfi-26)
|
||||||
|
#:use-module (srfi srfi-34)
|
||||||
|
#:use-module (srfi srfi-35)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 rdelim)
|
#:use-module (ice-9 rdelim)
|
||||||
#:export (nix-server?
|
#:export (nix-server?
|
||||||
|
@ -29,6 +31,11 @@
|
||||||
nix-server-minor-version
|
nix-server-minor-version
|
||||||
nix-server-socket
|
nix-server-socket
|
||||||
|
|
||||||
|
&nix-error nix-error?
|
||||||
|
&nix-protocol-error nix-protocol-error?
|
||||||
|
nix-protocol-error-message
|
||||||
|
nix-protocol-error-status
|
||||||
|
|
||||||
open-connection
|
open-connection
|
||||||
set-build-options
|
set-build-options
|
||||||
add-text-to-store
|
add-text-to-store
|
||||||
|
@ -218,6 +225,14 @@
|
||||||
(major nix-server-major-version)
|
(major nix-server-major-version)
|
||||||
(minor nix-server-minor-version))
|
(minor nix-server-minor-version))
|
||||||
|
|
||||||
|
(define-condition-type &nix-error &error
|
||||||
|
nix-error?)
|
||||||
|
|
||||||
|
(define-condition-type &nix-protocol-error &nix-error
|
||||||
|
nix-protocol-error?
|
||||||
|
(message nix-protocol-error-message)
|
||||||
|
(status nix-protocol-error-status))
|
||||||
|
|
||||||
(define* (open-connection #:optional (file %default-socket-path))
|
(define* (open-connection #:optional (file %default-socket-path))
|
||||||
(let ((s (with-fluids ((%default-port-encoding #f))
|
(let ((s (with-fluids ((%default-port-encoding #f))
|
||||||
;; This trick allows use of the `scm_c_read' optimization.
|
;; This trick allows use of the `scm_c_read' optimization.
|
||||||
|
@ -265,13 +280,15 @@
|
||||||
(status (if (>= (nix-server-minor-version server) 8)
|
(status (if (>= (nix-server-minor-version server) 8)
|
||||||
(read-int p)
|
(read-int p)
|
||||||
1)))
|
1)))
|
||||||
(format (current-error-port) "error: ~a (status: ~a)~%"
|
(raise (condition (&nix-protocol-error
|
||||||
error status)
|
(message error)
|
||||||
error))
|
(status status))))))
|
||||||
((= k %stderr-last)
|
((= k %stderr-last)
|
||||||
#t)
|
#t)
|
||||||
(else
|
(else
|
||||||
(error "invalid standard error code" k)))))
|
(raise (condition (&nix-protocol-error
|
||||||
|
(message "invalid error code")
|
||||||
|
(status k))))))))
|
||||||
|
|
||||||
(define* (set-build-options server
|
(define* (set-build-options server
|
||||||
#:key keep-failed? keep-going? try-fallback?
|
#:key keep-failed? keep-going? try-fallback?
|
||||||
|
|
Loading…
Reference in New Issue