summaryrefslogtreecommitdiff
path: root/guix/scripts/package.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2013-03-04 23:27:24 +0100
committerLudovic Courtès <ludo@gnu.org>2013-03-04 23:27:24 +0100
commit81eec00cb221231123b74d14245ef7caa9d89ff6 (patch)
tree3beeb77c5535038dc75db843dd88a1775fb541bb /guix/scripts/package.scm
parent8689a1908a8353b80ed1fcbb81feddc5eb799f24 (diff)
parent2a1e82bb5c2ae28b0018aa765cff6733136b3f70 (diff)
Merge branch 'master' into core-updates
Conflicts: Makefile.am guix/scripts/gc.scm guix/scripts/package.scm guix/ui.scm tests/guix-package.sh
Diffstat (limited to 'guix/scripts/package.scm')
-rw-r--r--guix/scripts/package.scm24
1 files changed, 24 insertions, 0 deletions
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 1f9355ff22..ccca614d88 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -281,6 +281,9 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
(display (_ "
-i, --install=PACKAGE install PACKAGE"))
(display (_ "
+ -e, --install-from-expression=EXP
+ install the package EXP evaluates to"))
+ (display (_ "
-r, --remove=PACKAGE remove PACKAGE"))
(display (_ "
-u, --upgrade=REGEXP upgrade all the installed packages matching REGEXP"))
@@ -325,6 +328,10 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
(option '(#\i "install") #t #f
(lambda (opt name arg result)
(alist-cons 'install arg result)))
+ (option '(#\e "install-from-expression") #t #f
+ (lambda (opt name arg result)
+ (alist-cons 'install (read/eval-package-expression arg)
+ result)))
(option '(#\r "remove") #t #f
(lambda (opt name arg result)
(alist-cons 'remove arg result)))
@@ -490,6 +497,19 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
(delete-duplicates (map input->name+path deps) same?))
+ (define (package->tuple p)
+ (let ((path (package-derivation (%store) p))
+ (deps (package-transitive-propagated-inputs p)))
+ `(,(package-name p)
+ ,(package-version p)
+
+ ;; When given a package via `-e', install the first of its
+ ;; outputs (XXX).
+ ,(car (package-outputs p))
+
+ ,path
+ ,(canonicalize-deps deps))))
+
;; First roll back if asked to.
(if (and (assoc-ref opts 'roll-back?) (not dry-run?))
(begin
@@ -515,6 +535,8 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
(install (append
upgrade
(filter-map (match-lambda
+ (('install . (? package? p))
+ #f)
(('install . (? store-path?))
#f)
(('install . package)
@@ -530,6 +552,8 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
install))
(install* (append
(filter-map (match-lambda
+ (('install . (? package? p))
+ (package->tuple p))
(('install . (? store-path? path))
(let-values (((name version)
(package-name->name+version