From ce4a482983abaf7090d098cdda973139cefb56b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sun, 19 Jan 2014 23:03:43 +0100 Subject: [PATCH] store: Add 'with-store' convenience macro. * guix/store.scm (with-store): New macro. --- .dir-locals.el | 1 + guix/store.scm | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/.dir-locals.el b/.dir-locals.el index 87cdaae807..03d9a4ec8d 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -18,6 +18,7 @@ (eval . (put 'manifest-entry 'scheme-indent-function 0)) (eval . (put 'manifest-pattern 'scheme-indent-function 0)) (eval . (put 'substitute-keyword-arguments 'scheme-indent-function 1)) + (eval . (put 'with-store 'scheme-indent-function 1)) (eval . (put 'with-error-handling 'scheme-indent-function 0)) (eval . (put 'with-mutex 'scheme-indent-function 1)) (eval . (put 'with-atomic-file-output 'scheme-indent-function 1)) 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)))