diff options
Diffstat (limited to 'guix/store.scm')
-rw-r--r-- | guix/store.scm | 47 |
1 files changed, 18 insertions, 29 deletions
diff --git a/guix/store.scm b/guix/store.scm index 6742611c6f..3bf56573bf 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -65,6 +65,7 @@ build-mode open-connection + port->connection close-connection with-store set-build-options @@ -122,8 +123,6 @@ current-build-output-port - register-path - %store-monad store-bind store-return @@ -519,6 +518,23 @@ for this connection will be pinned. Return a server object." (or done? (process-stderr conn))) conn))))))))) +(define* (port->connection port + #:key (version %protocol-version)) + "Assimilate PORT, an input/output port, and return a connection to the +daemon, assuming the given protocol VERSION. + +Warning: this procedure assumes that the initial handshake with the daemon has +already taken place on PORT and that we're just continuing on this established +connection. Use with care." + (let-values (((output flush) + (buffering-output-port port (make-bytevector 8192)))) + (%make-nix-server port + (protocol-major version) + (protocol-minor version) + output flush + (make-hash-table 100) + (make-hash-table 100)))) + (define (write-buffered-output server) "Flush SERVER's output port." (force-output (nix-server-output-port server)) @@ -1301,33 +1317,6 @@ The result is always the empty list unless the daemon was started with This makes sense only when the daemon was started with '--cache-failures'." boolean) -(define* (register-path path - #:key (references '()) deriver prefix - state-directory) - "Register PATH as a valid store file, with REFERENCES as its list of -references, and DERIVER as its deriver (.drv that led to it.) If PREFIX is -not #f, it must be the name of the directory containing the new store to -initialize; if STATE-DIRECTORY is not #f, it must be a string containing the -absolute file name to the state directory of the store being initialized. -Return #t on success. - -Use with care as it directly modifies the store! This is primarily meant to -be used internally by the daemon's build hook." - ;; Currently this is implemented by calling out to the fine C++ blob. - (let ((pipe (apply open-pipe* OPEN_WRITE %guix-register-program - `(,@(if prefix - `("--prefix" ,prefix) - '()) - ,@(if state-directory - `("--state-directory" ,state-directory) - '()))))) - (and pipe - (begin - (format pipe "~a~%~a~%~a~%" - path (or deriver "") (length references)) - (for-each (cut format pipe "~a~%" <>) references) - (zero? (close-pipe pipe)))))) - ;;; ;;; Store monad. |