summaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
authorMark H Weaver <mhw@netris.org>2015-04-17 09:54:11 -0400
committerMark H Weaver <mhw@netris.org>2015-04-17 09:54:11 -0400
commit933204e5b1473a54367aef1f90de22424e9074ab (patch)
treed0ccfee2b903c5fac827bc4a52ec7de17bdc1e7b /guix
parent9128e323c0a23243c3f70b1716c68ad0b241f30d (diff)
parent5e25ebe2fa70297d094fe891b81c4970e45a906a (diff)
Merge branch 'master' into core-updates
Conflicts: gnu-system.am gnu/packages/gstreamer.scm
Diffstat (limited to 'guix')
-rw-r--r--guix/profiles.scm72
-rw-r--r--guix/scripts/package.scm26
2 files changed, 51 insertions, 47 deletions
diff --git a/guix/profiles.scm b/guix/profiles.scm
index a2f63d1cca..620feff97e 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -78,6 +78,7 @@
profile-manifest
package->manifest-entry
+ %default-profile-hooks
profile-derivation
generation-number
generation-numbers
@@ -398,15 +399,12 @@ MANIFEST."
(append-map info-files
'#$(manifest-inputs manifest)))))
- ;; Don't depend on Texinfo when there's nothing to do.
- (if (null? (manifest-entries manifest))
- (gexp->derivation "info-dir" #~(mkdir #$output))
- (gexp->derivation "info-dir" build
- #:modules '((guix build utils)))))
+ (gexp->derivation "info-dir" build
+ #:modules '((guix build utils))))
(define (ghc-package-cache-file manifest)
"Return a derivation that builds the GHC 'package.cache' file for all the
-entries of MANIFEST."
+entries of MANIFEST, or #f if MANIFEST does not have any GHC packages."
(define ghc ;lazy reference
(module-ref (resolve-interface '(gnu packages haskell)) 'ghc))
@@ -446,12 +444,11 @@ entries of MANIFEST."
success)))
;; Don't depend on GHC when there's nothing to do.
- (if (any (cut string-prefix? "ghc" <>)
- (map manifest-entry-name (manifest-entries manifest)))
- (gexp->derivation "ghc-package-cache" build
- #:modules '((guix build utils))
- #:local-build? #t)
- (gexp->derivation "ghc-package-cache" #~(mkdir #$output))))
+ (and (any (cut string-prefix? "ghc" <>)
+ (map manifest-entry-name (manifest-entries manifest)))
+ (gexp->derivation "ghc-package-cache" build
+ #:modules '((guix build utils))
+ #:local-build? #t)))
(define (ca-certificate-bundle manifest)
"Return a derivation that builds a single-file bundle containing the CA
@@ -503,42 +500,31 @@ MANIFEST. Single-file bundles are required by programs such as Git and Lynx."
(string-append result
"/ca-certificates.crt")))))
- ;; Don't depend on 'glibc-utf8-locales' and its dependencies when there's
- ;; nothing to do.
- (if (null? (manifest-entries manifest))
- (gexp->derivation "ca-certificate-bundle" #~(mkdir #$output))
- (gexp->derivation "ca-certificate-bundle" build
- #:modules '((guix build utils))
- #:local-build? #t)))
+ (gexp->derivation "ca-certificate-bundle" build
+ #:modules '((guix build utils))
+ #:local-build? #t))
+
+(define %default-profile-hooks
+ ;; This is the list of derivation-returning procedures that are called by
+ ;; default when making a non-empty profile.
+ (list info-dir-file
+ ghc-package-cache-file
+ ca-certificate-bundle))
(define* (profile-derivation manifest
#:key
- (info-dir? #t)
- (ghc-package-cache? #t)
- (ca-certificate-bundle? #t))
+ (hooks %default-profile-hooks))
"Return a derivation that builds a profile (aka. 'user environment') with
-the given MANIFEST. The profile includes a top-level Info 'dir' file unless
-INFO-DIR? is #f, a GHC 'package.cache' file unless GHC-PACKAGE-CACHE? is #f
-and a single-file CA certificate bundle unless CA-CERTIFICATE-BUNDLE? is #f."
- (mlet %store-monad ((info-dir (if info-dir?
- (info-dir-file manifest)
- (return #f)))
- (ghc-package-cache (if ghc-package-cache?
- (ghc-package-cache-file manifest)
- (return #f)))
- (ca-cert-bundle (if ca-certificate-bundle?
- (ca-certificate-bundle manifest)
- (return #f))))
+the given MANIFEST. The profile includes additional derivations returned by
+the monadic procedures listed in HOOKS--such as an Info 'dir' file, etc."
+ (mlet %store-monad ((extras (if (null? (manifest-entries manifest))
+ (return '())
+ (sequence %store-monad
+ (filter-map (lambda (hook)
+ (hook manifest))
+ hooks)))))
(define inputs
- (append (if info-dir
- (list (gexp-input info-dir))
- '())
- (if ghc-package-cache
- (list (gexp-input ghc-package-cache))
- '())
- (if ca-cert-bundle
- (list (gexp-input ca-cert-bundle))
- '())
+ (append (map gexp-input extras)
(manifest-inputs manifest)))
(define builder
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 09ae782751..5ee3a89ba6 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2013, 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
;;;
;;; This file is part of GNU Guix.
@@ -465,6 +465,8 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
(display (_ "
-u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP"))
(display (_ "
+ --do-not-upgrade[=REGEXP] do not upgrade any packages matching REGEXP"))
+ (display (_ "
--roll-back roll back to the previous generation"))
(display (_ "
--search-paths display needed environment variable definitions"))
@@ -543,6 +545,13 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
;; would upgrade everything.
(delete '(upgrade . #f) result))
arg-handler))))
+ (option '("do-not-upgrade") #f #t
+ (lambda (opt name arg result arg-handler)
+ (let arg-handler ((arg arg) (result result))
+ (values (if arg
+ (alist-cons 'do-not-upgrade arg result)
+ result)
+ arg-handler))))
(option '("roll-back") #f #f
(lambda (opt name arg result arg-handler)
(values (alist-cons 'roll-back? #t result)
@@ -621,6 +630,13 @@ return the new list of manifest entries."
(_ #f))
opts))
+ (define do-not-upgrade-regexps
+ (filter-map (match-lambda
+ (('do-not-upgrade . regexp)
+ (make-regexp regexp))
+ (_ #f))
+ opts))
+
(define packages-to-upgrade
(match upgrade-regexps
(()
@@ -630,6 +646,8 @@ return the new list of manifest entries."
(($ <manifest-entry> name version output path _)
(and (any (cut regexp-exec <> name)
upgrade-regexps)
+ (not (any (cut regexp-exec <> name)
+ do-not-upgrade-regexps))
(upgradeable? name version path)
(let ((output (or output "out")))
(call-with-values
@@ -837,9 +855,9 @@ more information.~%"))
(let* ((prof-drv (run-with-store (%store)
(profile-derivation
new
- #:info-dir? (not bootstrap?)
- #:ghc-package-cache? (not bootstrap?)
- #:ca-certificate-bundle? (not bootstrap?))))
+ #:hooks (if bootstrap?
+ '()
+ %default-profile-hooks))))
(prof (derivation->output-path prof-drv)))
(show-manifest-transaction (%store) manifest transaction
#:dry-run? dry-run?)