* [PATCH] guix environment: Add --ad-hoc option.
@ 2015-05-28 12:47 David Thompson
2015-05-28 21:53 ` Ludovic Courtès
0 siblings, 1 reply; 2+ messages in thread
From: David Thompson @ 2015-05-28 12:47 UTC (permalink / raw)
To: guix-devel
[-- Attachment #1: Type: text/plain, Size: 225 bytes --]
I find myself frequently wanting to quickly create an environment with
just a few packages in it, without having to go through the song and
dance of creating a package expression for it. This patch addresses
this use-case.
[-- Attachment #2: 0001-guix-environment-Add-ad-hoc-option.patch --]
[-- Type: text/x-patch, Size: 4805 bytes --]
From 30a5b0f61e5c4a0e0244015f127ba3255f834139 Mon Sep 17 00:00:00 2001
From: David Thompson <davet@gnu.org>
Date: Thu, 28 May 2015 08:41:04 -0400
Subject: [PATCH] guix environment: Add --ad-hoc option.
* guix/scripts/environment.scm (%options): Add "ad-hoc" option.
(show-help): Display help for "--ad-hoc".
(packages+propagated-inputs): New procedure.
(guix-environment): Create ad hoc environment when asked.
* doc/guix.texi ("invoking guix environment"): Document it.
---
doc/guix.texi | 8 +++++++-
guix/scripts/environment.scm | 27 ++++++++++++++++++++++++---
2 files changed, 31 insertions(+), 4 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 1956dbc..2a9f61e 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -2381,7 +2381,7 @@ the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
not found, the build system looks for @code{Setup.lhs} instead.
Which Haskell compiler is used can be specified with the @code{#:haskell}
-parameter which defaults to @code{ghc}.
+parameter which defaults to @code{ghc}.
@end defvr
Lastly, for packages that do not need anything as sophisticated, a
@@ -3932,6 +3932,12 @@ evaluates to.
@item -E @var{command}
Execute @var{command} in the new environment.
+@item --ad-hoc
+Include all specified packages in the resulting environment, as if an ad
+hoc package were defined with them as inputs. This option is useful for
+quickly creating an environment without having to write a package
+expression to contain the desired inputs.
+
@item --pure
Unset existing environment variables when building the new environment.
This has the effect of creating an environment in which search paths
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm
index d053daf..4217809 100644
--- a/guix/scripts/environment.scm
+++ b/guix/scripts/environment.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 David Thompson <davet@gnu.org>
+;;; Copyright © 2014, 2015 David Thompson <davet@gnu.org>
;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
@@ -103,6 +103,9 @@ shell command in that environment.\n"))
(display (_ "
-E, --exec=COMMAND execute COMMAND in new environment"))
(display (_ "
+ --ad-hoc include all specified packages in the environment instead
+ of only their inputs"))
+ (display (_ "
--pure unset existing environment variables"))
(display (_ "
--search-paths display needed environment variable definitions"))
@@ -147,6 +150,9 @@ shell command in that environment.\n"))
(option '(#\e "expression") #t #f
(lambda (opt name arg result)
(alist-cons 'expression arg result)))
+ (option '("ad-hoc") #f #f
+ (lambda (opt name arg result)
+ (alist-cons 'ad-hoc? #t result)))
(option '(#\n "dry-run") #f #f
(lambda (opt name arg result)
(alist-cons 'dry-run? #t result)))
@@ -191,6 +197,18 @@ packages."
(delete-duplicates
(append-map transitive-inputs packages)))
+(define (packages+propagated-inputs packages)
+ "Return a list containing PACKAGES plus all of their propagated inputs."
+ (delete-duplicates
+ (append packages
+ (map (match-lambda
+ ((or (_ (? package? package))
+ (_ (? package? package) _))
+ package)
+ (_ #f))
+ (append-map package-transitive-propagated-inputs
+ packages)))))
+
(define (build-inputs inputs opts)
"Build the packages in INPUTS using the build options in OPTS."
(let ((substitutes? (assoc-ref opts 'substitutes?))
@@ -218,9 +236,12 @@ packages."
(let* ((opts (parse-command-line args %options (list %default-options)
#:argument-handler handle-argument))
(pure? (assoc-ref opts 'pure))
+ (ad-hoc? (assoc-ref opts 'ad-hoc?))
(command (assoc-ref opts 'exec))
- (inputs (packages->transitive-inputs
- (pick-all (options/resolve-packages opts) 'package)))
+ (packages (pick-all (options/resolve-packages opts) 'package))
+ (inputs (if ad-hoc?
+ (packages+propagated-inputs packages)
+ (packages->transitive-inputs packages)))
(drvs (run-with-store store
(mbegin %store-monad
(set-guile-for-build (default-guile))
--
2.2.1
[-- Attachment #3: Type: text/plain, Size: 38 bytes --]
--
David Thompson
GPG Key: 0FF1D807
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] guix environment: Add --ad-hoc option.
2015-05-28 12:47 [PATCH] guix environment: Add --ad-hoc option David Thompson
@ 2015-05-28 21:53 ` Ludovic Courtès
0 siblings, 0 replies; 2+ messages in thread
From: Ludovic Courtès @ 2015-05-28 21:53 UTC (permalink / raw)
To: David Thompson; +Cc: guix-devel
David Thompson <dthompson2@worcester.edu> skribis:
> I find myself frequently wanting to quickly create an environment with
> just a few packages in it, without having to go through the song and
> dance of creating a package expression for it. This patch addresses
> this use-case.
Yeah, nice!
> From 30a5b0f61e5c4a0e0244015f127ba3255f834139 Mon Sep 17 00:00:00 2001
> From: David Thompson <davet@gnu.org>
> Date: Thu, 28 May 2015 08:41:04 -0400
> Subject: [PATCH] guix environment: Add --ad-hoc option.
>
> * guix/scripts/environment.scm (%options): Add "ad-hoc" option.
> (show-help): Display help for "--ad-hoc".
> (packages+propagated-inputs): New procedure.
> (guix-environment): Create ad hoc environment when asked.
> * doc/guix.texi ("invoking guix environment"): Document it.
LGTM!
> +@item --ad-hoc
> +Include all specified packages in the resulting environment, as if an ad
> +hoc package were defined with them as inputs. This option is useful for
@i{ad hoc}
> +quickly creating an environment without having to write a package
> +expression to contain the desired inputs.
Maybe add an example, like:
For instance, the command:
@example
guix environment --ad-hoc guile guile-sdl -E guile
@end example
runs @command{guile} in an environment where Guile and Guile-SDL are
available.
OK with these changes.
Thank you!
Ludo’.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-05-28 21:53 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-28 12:47 [PATCH] guix environment: Add --ad-hoc option David Thompson
2015-05-28 21:53 ` Ludovic Courtès
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).