diff options
author | Christopher Baines <mail@cbaines.net> | 2024-05-14 17:56:05 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2024-06-26 15:10:02 +0100 |
commit | ffdbf1f11ee68e127216cb6682e93b490c7e1d0d (patch) | |
tree | 724d9da9940e20d2ff9cafda1936f0f35bcef4c3 | |
parent | 56770f7d597e8cc4f735c5885437050c9bd5533f (diff) | |
download | guix-ffdbf1f11ee68e127216cb6682e93b490c7e1d0d.tar.gz guix-ffdbf1f11ee68e127216cb6682e93b490c7e1d0d.zip |
store: Refactor connect-to-daemon.
Remove the inner connect procedure, as now that #:non-blocking? needs passing
on, this just makes things more difficult. This commit also fixes not passing
#:non-blocking? on in the case where open-unix-domain-socket is called as
connect.
* guix/store.scm (connect-to-daemon): Refactor and fix non-blocking
connections to sockets with a filename.
Change-Id: I61cd99920df91baba95567d670bec6fa94043875
-rw-r--r-- | guix/store.scm | 69 |
1 files changed, 32 insertions, 37 deletions
diff --git a/guix/store.scm b/guix/store.scm index 58ddaa8d15..4070b686cb 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -524,50 +524,45 @@ non-blocking." (errno (system-error-errno args))))) (loop rest))))))))) -(define* (connect-to-daemon uri #:key non-blocking?) - "Connect to the daemon at URI, a string that may be an actual URI or a file -name, and return an input/output port. If NON-BLOCKING?, use a non-blocking -socket when using the file, unix or guix URI schemes. +(define* (connect-to-daemon uri-or-filename #:key non-blocking?) + "Connect to the daemon at URI-OR-FILENAME and return an input/output port. +If NON-BLOCKING?, use a non-blocking socket when using the file, unix or guix +URI schemes. This is a low-level procedure that does not perform the initial handshake with the daemon. Use 'open-connection' for that." (define (not-supported) (raise (condition (&store-connection-error - (file uri) + (file uri-or-filename) (errno ENOTSUP))))) - (define connect - (match (string->uri uri) - (#f ;URI is a file name - open-unix-domain-socket) - ((? uri? uri) - (match (uri-scheme uri) - ((or #f 'file 'unix) - (lambda (_) - (open-unix-domain-socket (uri-path uri) - #:non-blocking? non-blocking?))) - ('guix - (lambda (_) - (open-inet-socket (uri-host uri) - (or (uri-port uri) %default-guix-port) - #:non-blocking? non-blocking?))) - ((? symbol? scheme) - ;; Try to dynamically load a module for SCHEME. - ;; XXX: Errors are swallowed. - (match (false-if-exception - (resolve-interface `(guix store ,scheme))) - ((? module? module) - (match (false-if-exception - (module-ref module 'connect-to-daemon)) - ((? procedure? connect) - (lambda (_) - (connect uri))) - (x (not-supported)))) - (#f (not-supported)))) - (x - (not-supported)))))) - - (connect uri)) + (match (string->uri uri-or-filename) + (#f ;URI is a file name + (open-unix-domain-socket uri-or-filename + #:non-blocking? non-blocking?)) + ((? uri? uri) + (match (uri-scheme uri) + ((or #f 'file 'unix) + (open-unix-domain-socket (uri-path uri) + #:non-blocking? non-blocking?)) + ('guix + (open-inet-socket (uri-host uri) + (or (uri-port uri) %default-guix-port) + #:non-blocking? non-blocking?)) + ((? symbol? scheme) + ;; Try to dynamically load a module for SCHEME. + ;; XXX: Errors are swallowed. + (match (false-if-exception + (resolve-interface `(guix store ,scheme))) + ((? module? module) + (match (false-if-exception + (module-ref module 'connect-to-daemon)) + ((? procedure? connect) + (connect uri)) + (x (not-supported)))) + (#f (not-supported)))) + (x + (not-supported)))))) (define* (open-connection #:optional (uri (%daemon-socket-uri)) #:key port (reserve-space? #t) cpu-affinity |