store: Add 'system-error-to-connection-error' macro.
* guix/store.scm (system-error-to-connection-error): New macro. (open-unix-domain-socket): Use it instead of 'catch'.
This commit is contained in:
parent
1397b422e2
commit
3b5cd17a97
|
@ -351,6 +351,18 @@
|
||||||
(message nix-protocol-error-message)
|
(message nix-protocol-error-message)
|
||||||
(status nix-protocol-error-status))
|
(status nix-protocol-error-status))
|
||||||
|
|
||||||
|
(define-syntax-rule (system-error-to-connection-error file exp ...)
|
||||||
|
"Catch 'system-error' exceptions and translate them to
|
||||||
|
'&nix-connection-error'."
|
||||||
|
(catch 'system-error
|
||||||
|
(lambda ()
|
||||||
|
exp ...)
|
||||||
|
(lambda args
|
||||||
|
(let ((errno (system-error-errno args)))
|
||||||
|
(raise (condition (&nix-connection-error
|
||||||
|
(file file)
|
||||||
|
(errno errno))))))))
|
||||||
|
|
||||||
(define (open-unix-domain-socket file)
|
(define (open-unix-domain-socket file)
|
||||||
"Connect to the Unix-domain socket at FILE and return it. Raise a
|
"Connect to the Unix-domain socket at FILE and return it. Raise a
|
||||||
'&nix-connection-error' upon error."
|
'&nix-connection-error' upon error."
|
||||||
|
@ -359,16 +371,9 @@
|
||||||
(socket PF_UNIX SOCK_STREAM 0)))
|
(socket PF_UNIX SOCK_STREAM 0)))
|
||||||
(a (make-socket-address PF_UNIX file)))
|
(a (make-socket-address PF_UNIX file)))
|
||||||
|
|
||||||
(catch 'system-error
|
(system-error-to-connection-error file
|
||||||
(lambda ()
|
(connect s a)
|
||||||
(connect s a)
|
s)))
|
||||||
s)
|
|
||||||
(lambda args
|
|
||||||
;; Translate the error to something user-friendly.
|
|
||||||
(let ((errno (system-error-errno args)))
|
|
||||||
(raise (condition (&nix-connection-error
|
|
||||||
(file file)
|
|
||||||
(errno errno)))))))))
|
|
||||||
|
|
||||||
(define (connect-to-daemon uri)
|
(define (connect-to-daemon uri)
|
||||||
"Connect to the daemon at URI, a string that may be an actual URI or a file
|
"Connect to the daemon at URI, a string that may be an actual URI or a file
|
||||||
|
@ -1350,3 +1355,7 @@ must be an absolute store file name, or a derivation file name."
|
||||||
;; Return the first that works.
|
;; Return the first that works.
|
||||||
(any (cut log-file store <>) derivers))
|
(any (cut log-file store <>) derivers))
|
||||||
(_ #f)))))
|
(_ #f)))))
|
||||||
|
|
||||||
|
;;; Local Variables:
|
||||||
|
;;; eval: (put 'system-error-to-connection-error 'scheme-indent-function 1)
|
||||||
|
;;; End:
|
||||||
|
|
Loading…
Reference in New Issue