diff options
author | Lars-Dominik Braun <lars@6xq.net> | 2021-02-04 10:43:45 +0100 |
---|---|---|
committer | 宋文武 <iyzsong@member.fsf.org> | 2021-02-11 17:59:07 +0800 |
commit | a643deac2de81755a1843a3b41dd53857678bebc (patch) | |
tree | e72f8f3f8c3e0b19d520fa8975420ce83b20db65 | |
parent | 4b62be5ca4b7b406cc8d00c6624d4a64b7192d7a (diff) | |
download | guix-a643deac2de81755a1843a3b41dd53857678bebc.tar guix-a643deac2de81755a1843a3b41dd53857678bebc.tar.gz |
environment: Allow starting from existing profile.
* guix/scripts/environment.scm (%options): Add -p/--profile switch.
(show-help): Document new switch.
(guix-environment): Handle new 'profile switch.
Signed-off-by: 宋文武 <iyzsong@member.fsf.org>
-rw-r--r-- | guix/scripts/environment.scm | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm index f4d12f89bf..a39347743e 100644 --- a/guix/scripts/environment.scm +++ b/guix/scripts/environment.scm @@ -21,6 +21,7 @@ (define-module (guix scripts environment) #:use-module (guix ui) #:use-module (guix store) + #:use-module (guix utils) #:use-module ((guix status) #:select (with-status-verbosity)) #:use-module (guix grafts) #:use-module (guix derivations) @@ -137,6 +138,8 @@ COMMAND or an interactive shell in that environment.\n")) (display (G_ " -m, --manifest=FILE create environment with the manifest from FILE")) (display (G_ " + -p, --profile=PATH create environment from profile at PATH")) + (display (G_ " --ad-hoc include all specified packages in the environment instead of only their inputs")) (display (G_ " @@ -269,6 +272,10 @@ use '--preserve' instead~%")) (option '(#\P "link-profile") #f #f (lambda (opt name arg result) (alist-cons 'link-profile? #t result))) + (option '(#\p "profile") #t #f + (lambda (opt name arg result) + (alist-cons 'profile arg + (alist-delete 'profile result eq?)))) (option '(#\u "user") #t #f (lambda (opt name arg result) (alist-cons 'user arg @@ -706,6 +713,7 @@ message if any test fails." (user (assoc-ref opts 'user)) (bootstrap? (assoc-ref opts 'bootstrap?)) (system (assoc-ref opts 'system)) + (profile (assoc-ref opts 'profile)) (command (or (assoc-ref opts 'exec) ;; Spawn a shell if the user didn't specify ;; anything in particular. @@ -735,8 +743,16 @@ message if any test fails." #:dry-run? (assoc-ref opts 'dry-run?)) (with-status-verbosity (assoc-ref opts 'verbosity) - (define manifest + (define manifest-from-opts (options/resolve-packages store opts)) + (when (and profile + (> (length (manifest-entries manifest-from-opts)) 0)) + (leave (G_ "'--profile' cannot be used with package options~%"))) + + (define manifest + (if profile + (profile-manifest profile) + manifest-from-opts)) (set-build-options-from-command-line store opts) @@ -755,7 +771,9 @@ message if any test fails." system)) (prof-drv (manifest->derivation manifest system bootstrap?)) - (profile -> (derivation->output-path prof-drv)) + (profile -> (if profile + (readlink* profile) + (derivation->output-path prof-drv))) (gc-root -> (assoc-ref opts 'gc-root))) ;; First build the inputs. This is necessary even for |