summaryrefslogtreecommitdiff
path: root/guix/store.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-01-19 23:03:43 +0100
committerLudovic Courtès <ludo@gnu.org>2014-01-24 00:01:49 +0100
commitce4a482983abaf7090d098cdda973139cefb56b7 (patch)
tree63d1e8bb1ae0e1119d958fd1163a14251691b3b8 /guix/store.scm
parent045111e10c0197f1a235bb886df2e446285a6f70 (diff)
store: Add 'with-store' convenience macro.
* guix/store.scm (with-store): New macro.
Diffstat (limited to 'guix/store.scm')
-rw-r--r--guix/store.scm12
1 files changed, 12 insertions, 0 deletions
diff --git a/guix/store.scm b/guix/store.scm
index 393eee8d1b..ede64341c5 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -53,6 +53,7 @@
open-connection
close-connection
+ with-store
set-build-options
valid-path?
query-path-hash
@@ -323,6 +324,17 @@ operate, should the disk become full. Return a server object."
"Close the connection to SERVER."
(close (nix-server-socket server)))
+(define-syntax-rule (with-store store exp ...)
+ "Bind STORE to an open connection to the store and evaluate EXPs;
+automatically close the store when the dynamic extent of EXP is left."
+ (let ((store (open-connection)))
+ (dynamic-wind
+ (const #f)
+ (lambda ()
+ exp ...)
+ (lambda ()
+ (false-if-exception (close-connection store))))))
+
(define current-build-output-port
;; The port where build output is sent.
(make-parameter (current-error-port)))