diff options
author | Ludovic Courtès <ludo@gnu.org> | 2012-06-01 23:29:55 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2012-06-02 23:18:45 +0200 |
commit | e87088c9d5fccaadb6a1b112b8791b5d0cd74a67 (patch) | |
tree | 95cece94278978c5af1c103decc1013ca44f1512 | |
parent | e3deeebb27c106223fac85848b9bc75bced956eb (diff) | |
download | guix-e87088c9d5fccaadb6a1b112b8791b5d0cd74a67.tar.gz |
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.
-rw-r--r-- | guix/store.scm | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/guix/store.scm b/guix/store.scm index db5679caf2..539aa61455 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -22,6 +22,8 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-9) #:use-module (srfi srfi-26) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35) #:use-module (ice-9 match) #:use-module (ice-9 rdelim) #:export (nix-server? @@ -29,6 +31,11 @@ nix-server-minor-version nix-server-socket + &nix-error nix-error? + &nix-protocol-error nix-protocol-error? + nix-protocol-error-message + nix-protocol-error-status + open-connection set-build-options add-text-to-store @@ -218,6 +225,14 @@ (major nix-server-major-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)) (let ((s (with-fluids ((%default-port-encoding #f)) ;; This trick allows use of the `scm_c_read' optimization. @@ -265,13 +280,15 @@ (status (if (>= (nix-server-minor-version server) 8) (read-int p) 1))) - (format (current-error-port) "error: ~a (status: ~a)~%" - error status) - error)) + (raise (condition (&nix-protocol-error + (message error) + (status status)))))) ((= k %stderr-last) #t) (else - (error "invalid standard error code" k))))) + (raise (condition (&nix-protocol-error + (message "invalid error code") + (status k)))))))) (define* (set-build-options server #:key keep-failed? keep-going? try-fallback? |