[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
01/01: scripts: environment: Allow lists of packages in expressions.
From: |
David Thompson |
Subject: |
01/01: scripts: environment: Allow lists of packages in expressions. |
Date: |
Sat, 31 Oct 2015 11:39:08 +0000 |
davexunit pushed a commit to branch master
in repository guix.
commit c9c282cea04ec5a3ee7bd17e6ad8846600220feb
Author: David Thompson <address@hidden>
Date: Fri Oct 30 21:02:51 2015 -0400
scripts: environment: Allow lists of packages in expressions.
* guix/scripts/environment.scm (options/resolve-packages): Match against
lists of packages when evaluating expressions.
* tests/guix-environment.sh: Add test.
* doc/guix.texi ("invoking guix environment"): Add docs.
---
doc/guix.texi | 15 ++++++++++++---
guix/scripts/environment.scm | 24 +++++++++++++++---------
tests/guix-environment.sh | 11 +++++++++++
3 files changed, 38 insertions(+), 12 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index a164608..84f194b 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -4730,7 +4730,8 @@ The available options are summarized below.
@table @code
@item address@hidden
@itemx -e @var{expr}
-Create an environment for the package that @var{expr} evaluates to.
+Create an environment for the package or list of packages that
address@hidden evaluates to.
For example, running:
@@ -4741,10 +4742,18 @@ guix environment -e '(@@ (gnu packages maths)
petsc-openmpi)'
starts a shell with the environment for this specific variant of the
PETSc package.
+Running:
+
address@hidden
+guix environment --ad-hoc -e '(@ (gnu) %base-packages)'
address@hidden example
+
+starts a shell with all the GuixSD base packages available.
+
@item address@hidden
@itemx -l @var{file}
-Create an environment for the package that the code within @var{file}
-evaluates to.
+Create an environment for the package or list of packages that the code
+within @var{file} evaluates to.
As an example, @var{file} might contain a definition like this
(@pxref{Defining Packages}):
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm
index 1888385..f9ab9a4 100644
--- a/guix/scripts/environment.scm
+++ b/guix/scripts/environment.scm
@@ -253,6 +253,18 @@ COMMAND or an interactive shell in that environment.\n"))
(define (options/resolve-packages opts)
"Return OPTS with package specification strings replaced by actual
packages."
+ (define (package->outputs package mode)
+ (map (lambda (output)
+ (list mode package output))
+ (package-outputs package)))
+
+ (define (packages->outputs packages mode)
+ (match packages
+ ((? package? package)
+ (package->outputs package mode))
+ (((? package? packages) ...)
+ (append-map (cut package->outputs <> mode) packages))))
+
(compact
(append-map (match-lambda
(('package mode (? string? spec))
@@ -261,17 +273,11 @@ packages."
(list (list mode package output))))
(('expression mode str)
;; Add all the outputs of the package STR evaluates to.
- (match (read/eval str)
- ((? package? package)
- (map (lambda (output)
- (list mode package output))
- (package-outputs package)))))
+ (packages->outputs (read/eval str) mode))
(('load mode file)
;; Add all the outputs of the package defined in FILE.
- (let ((package (load* file (make-user-module '()))))
- (map (lambda (output)
- (list mode package output))
- (package-outputs package))))
+ (let ((module (make-user-module '())))
+ (packages->outputs (load* file module) mode)))
(_ '(#f)))
opts)))
diff --git a/tests/guix-environment.sh b/tests/guix-environment.sh
index 49b3b1c..f7b0259 100644
--- a/tests/guix-environment.sh
+++ b/tests/guix-environment.sh
@@ -111,4 +111,15 @@ then
grep -E '^export CPATH=.*-gcc-bootstrap-0/include' "$tmpdir/a"
grep -E '^export CPATH=.*-glibc-bootstrap-0/include' "$tmpdir/a"
grep -E '^export LIBRARY_PATH=.*-glibc-bootstrap-0/lib' "$tmpdir/a"
+
+ # Make sure a package list can be used with -e.
+ expr_list_test_code="
+(list (@@ (gnu packages commencement) gnu-make-boot0)
+ (@ (gnu packages bootstrap) %bootstrap-guile))"
+
+ guix environment --ad-hoc --no-substitutes --search-paths --pure \
+ -e "$expr_list_test_code" > "$tmpdir/a"
+
+ grep -E '^export PATH=.*-make-boot0-4.1/bin' "$tmpdir/a"
+ grep -E '^export PATH=.*-guile-bootstrap-2.0/bin' "$tmpdir/a"
fi