From d67a88196607b57ce1209464b03b79d2a74bf5cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sat, 6 Jun 2020 23:00:05 +0200 Subject: [PATCH] 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. --- guix/tests/git.scm | 1 - guix/tests/gnupg.scm | 22 +------------------ guix/utils.scm | 50 +++++++++++++++++++++++++++++++++++--------- 3 files changed, 41 insertions(+), 32 deletions(-) diff --git a/guix/tests/git.scm b/guix/tests/git.scm index c77c544e03..5d7056bb53 100644 --- a/guix/tests/git.scm +++ b/guix/tests/git.scm @@ -21,7 +21,6 @@ (define-module (guix tests git) #:use-module ((guix git) #:select (with-repository)) #:use-module (guix utils) #:use-module (guix build utils) - #:use-module ((guix tests gnupg) #:select (with-environment-variables)) #:use-module (ice-9 match) #:use-module (ice-9 control) #:export (git-command diff --git a/guix/tests/gnupg.scm b/guix/tests/gnupg.scm index 6e7fdbcf65..47c858d232 100644 --- a/guix/tests/gnupg.scm +++ b/guix/tests/gnupg.scm @@ -22,27 +22,7 @@ (define-module (guix tests gnupg) #:use-module (ice-9 match) #:export (gpg-command gpgconf-command - with-fresh-gnupg-setup - - with-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 ...))) + with-fresh-gnupg-setup)) (define gpg-command (make-parameter "gpg")) 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 @@ (define-module (guix utils) guile-version>? version-prefix? string-replace-substring - arguments-from-environment-variable file-extension file-sans-extension tarball-sans-extension @@ -99,6 +98,9 @@ (define-module (guix utils) call-with-temporary-directory with-atomic-file-output + with-environment-variables + arguments-from-environment-variable + config-directory cache-directory @@ -113,6 +115,38 @@ (define-module (guix utils) call-with-compressed-output-port canonical-newline-port)) + +;;; +;;; 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 @@ (define (list-prefix? lst1 lst2) (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 @@ (define* (string-replace-substring str substr 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