diff options
author | Ludovic Courtès <ludo@gnu.org> | 2020-06-06 23:00:05 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2020-06-06 23:28:49 +0200 |
commit | d67a88196607b57ce1209464b03b79d2a74bf5cd (patch) | |
tree | f274c092ddc968c58c4c129966ba3a43eeaa7cdc /guix/utils.scm | |
parent | b2ee53d5aead4e2c49f526c8ddcf5a279e879236 (diff) |
utils: Add 'with-environment-variables'.
* guix/tests/gnupg.scm (call-with-environment-variables)
(with-environment-variables): Move to...
* guix/utils.scm: ... here.
* guix/tests/git.scm: Adjust accordingly.
Diffstat (limited to 'guix/utils.scm')
-rw-r--r-- | guix/utils.scm | 50 |
1 files changed, 40 insertions, 10 deletions
diff --git a/guix/utils.scm b/guix/utils.scm index 69e3f0a934..17a96370f1 100644 --- a/guix/utils.scm +++ b/guix/utils.scm @@ -89,7 +89,6 @@ guile-version>? version-prefix? string-replace-substring - arguments-from-environment-variable file-extension file-sans-extension tarball-sans-extension @@ -99,6 +98,9 @@ call-with-temporary-directory with-atomic-file-output + with-environment-variables + arguments-from-environment-variable + config-directory cache-directory @@ -115,6 +117,38 @@ ;;; +;;; Environment variables. +;;; + +(define (call-with-environment-variables variables thunk) + "Call THUNK with the environment VARIABLES set." + (let ((environment (environ))) + (dynamic-wind + (lambda () + (for-each (match-lambda + ((variable value) + (setenv variable value))) + variables)) + thunk + (lambda () + (environ environment))))) + +(define-syntax-rule (with-environment-variables variables exp ...) + "Evaluate EXP with the given environment VARIABLES set." + (call-with-environment-variables variables + (lambda () exp ...))) + +(define (arguments-from-environment-variable variable) + "Retrieve value of environment variable denoted by string VARIABLE in the +form of a list of strings (`char-set:graphic' tokens) suitable for consumption +by `args-fold', if VARIABLE is defined, otherwise return an empty list." + (let ((env (getenv variable))) + (if env + (string-tokenize env char-set:graphic) + '()))) + + +;;; ;;; Filtering & pipes. ;;; @@ -582,6 +616,11 @@ minor version numbers from version-string." (list-prefix? (string-tokenize v1 not-dot) (string-tokenize v2 not-dot))))) + +;;; +;;; Files. +;;; + (define (file-extension file) "Return the extension of FILE or #f if there is none." (let ((dot (string-rindex file #\.))) @@ -634,15 +673,6 @@ REPLACEMENT." (substring str start index) pieces)))))))) -(define (arguments-from-environment-variable variable) - "Retrieve value of environment variable denoted by string VARIABLE in the -form of a list of strings (`char-set:graphic' tokens) suitable for consumption -by `args-fold', if VARIABLE is defined, otherwise return an empty list." - (let ((env (getenv variable))) - (if env - (string-tokenize env char-set:graphic) - '()))) - (define (call-with-temporary-output-file proc) "Call PROC with a name of a temporary file and open output port to that file; close the file and delete it when leaving the dynamic extent of this |