mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 22:08:16 -05:00
environment: Move iteration outside of 'for-each-search-path'.
* guix/search-paths.scm (search-path-definition): New procedure. * guix/scripts/environment.scm (for-each-search-path): Rename to... (evaluate-input-search-paths): ... this. Remove 'proc' and 'pure?' parameters, and return directly the list of search-path/value pairs. (create-environment): Use 'for-each' and 'evaluate-input-search-paths' instead of 'for-each-search-path'. (show-search-paths): Use 'for-each', 'search-path-definition', and 'evaluate-search-paths' instead of 'for-each-search-path'.
This commit is contained in:
parent
b9ea6c6bf4
commit
8e3a3bc290
2 changed files with 32 additions and 19 deletions
|
@ -36,11 +36,9 @@ (define-module (guix scripts environment)
|
|||
#:use-module (srfi srfi-98)
|
||||
#:export (guix-environment))
|
||||
|
||||
(define (for-each-search-path proc inputs derivations pure?)
|
||||
"Apply PROC for each native search path in INPUTS in addition to 'PATH'.
|
||||
Use the output paths of DERIVATIONS to build each search path. When PURE? is
|
||||
#t, the existing search path value is ignored. Otherwise, the existing search
|
||||
path value is appended."
|
||||
(define (evaluate-input-search-paths inputs derivations)
|
||||
"Evaluate the native search paths of INPUTS, a list of packages, of the
|
||||
outputs of DERIVATIONS, and return a list of search-path/value pairs."
|
||||
(let ((directories (append-map (lambda (drv)
|
||||
(map (match-lambda
|
||||
((_ . output)
|
||||
|
@ -51,14 +49,7 @@ (define (for-each-search-path proc inputs derivations pure?)
|
|||
(delete-duplicates
|
||||
(append-map package-native-search-paths
|
||||
inputs)))))
|
||||
(for-each (match-lambda
|
||||
((($ <search-path-specification> variable _ sep) . value)
|
||||
(let ((current (getenv variable)))
|
||||
(proc variable
|
||||
(if (and current (not pure?))
|
||||
(string-append value sep current)
|
||||
value)))))
|
||||
(evaluate-search-paths paths directories))))
|
||||
(evaluate-search-paths paths directories)))
|
||||
|
||||
;; Protect some env vars from purification. Borrowed from nix-shell.
|
||||
(define %precious-variables
|
||||
|
@ -78,15 +69,26 @@ (define (create-environment inputs derivations pure?)
|
|||
PURE? is #t, unset the variables in the current environment. Otherwise,
|
||||
augment existing enviroment variables with additional search paths."
|
||||
(when pure? (purify-environment))
|
||||
(for-each-search-path setenv inputs derivations pure?))
|
||||
(for-each (match-lambda
|
||||
((($ <search-path-specification> variable _ separator) . value)
|
||||
(let ((current (getenv variable)))
|
||||
(setenv variable
|
||||
(if (and current (not pure?))
|
||||
(string-append value separator current)
|
||||
value)))))
|
||||
(evaluate-input-search-paths inputs derivations)))
|
||||
|
||||
(define (show-search-paths inputs derivations pure?)
|
||||
"Display the needed search paths to build an environment that contains the
|
||||
packages within INPUTS. When PURE? is #t, do not augment existing environment
|
||||
variables with additional search paths."
|
||||
(for-each-search-path (lambda (variable value)
|
||||
(format #t "export ~a=\"~a\"~%" variable value))
|
||||
inputs derivations pure?))
|
||||
(for-each (match-lambda
|
||||
((search-path . value)
|
||||
(display
|
||||
(search-path-definition search-path value
|
||||
#:kind (if pure? 'exact 'prefix)))
|
||||
(newline)))
|
||||
(evaluate-input-search-paths inputs derivations)))
|
||||
|
||||
(define (show-help)
|
||||
(display (_ "Usage: guix environment [OPTION]... PACKAGE...
|
||||
|
|
|
@ -36,7 +36,8 @@ (define-module (guix search-paths)
|
|||
search-path-specification->sexp
|
||||
sexp->search-path-specification
|
||||
evaluate-search-paths
|
||||
environment-variable-definition))
|
||||
environment-variable-definition
|
||||
search-path-definition))
|
||||
|
||||
;;; Commentary:
|
||||
;;;
|
||||
|
@ -160,7 +161,7 @@ (define* (environment-variable-definition variable value
|
|||
#:key
|
||||
(kind 'exact)
|
||||
(separator ":"))
|
||||
"Return a the definition of VARIABLE to VALUE in Bash syntax:
|
||||
"Return a the definition of VARIABLE to VALUE in Bash syntax.
|
||||
|
||||
KIND can be either 'exact (return the definition of VARIABLE=VALUE),
|
||||
'prefix (return the definition where VALUE is added as a prefix to VARIABLE's
|
||||
|
@ -178,4 +179,14 @@ (define* (environment-variable-definition variable value
|
|||
(format #f "export ~a=\"$~a${~a:+~a}~a\""
|
||||
variable variable variable separator value))))
|
||||
|
||||
(define* (search-path-definition search-path value
|
||||
#:key (kind 'exact))
|
||||
"Similar to 'environment-variable-definition', but applied to a
|
||||
<search-path-specification>."
|
||||
(match search-path
|
||||
(($ <search-path-specification> variable _ separator)
|
||||
(environment-variable-definition variable value
|
||||
#:kind kind
|
||||
#:separator separator))))
|
||||
|
||||
;;; search-paths.scm ends here
|
||||
|
|
Loading…
Reference in a new issue