me
/
guix
Archived
1
0
Fork 0

guix package: Add '--do-not-upgrade' option.

* guix/scripts/package.scm (%options): Add the '--do-not-upgrade' option.
  (show-help): Document it.
  (options->installable): Add 'do-not-upgrade-regexps' variable.
  Use it in 'packages-to-upgrade'.
* doc/guix.texi (Invoking guix package): Document the '--do-not-upgrade'
  option.
master
Mark H Weaver 2015-03-26 17:25:09 -04:00
parent 6915912506
commit d5f01e48e0
2 changed files with 30 additions and 2 deletions

View File

@ -947,13 +947,23 @@ and/or output name in addition to the package name. For instance,
@itemx -u [@var{regexp} @dots{}] @itemx -u [@var{regexp} @dots{}]
Upgrade all the installed packages. If one or more @var{regexp}s are Upgrade all the installed packages. If one or more @var{regexp}s are
specified, upgrade only installed packages whose name matches a specified, upgrade only installed packages whose name matches a
@var{regexp}. @var{regexp}. Also see the @code{--do-not-upgrade} option below.
Note that this upgrades package to the latest version of packages found Note that this upgrades package to the latest version of packages found
in the distribution currently installed. To update your distribution, in the distribution currently installed. To update your distribution,
you should regularly run @command{guix pull} (@pxref{Invoking guix you should regularly run @command{guix pull} (@pxref{Invoking guix
pull}). pull}).
@item --do-not-upgrade[=@var{regexp} @dots{}]
When used together with the @code{--upgrade} option, do @emph{not}
upgrade any packages whose name matches a @var{regexp}. For example, to
upgrade all packages in the current profile except those containing the
substring ``emacs'':
@example
$ guix package --upgrade . --do-not-upgrade emacs
@end example
@item --roll-back @item --roll-back
Roll back to the previous @dfn{generation} of the profile---i.e., undo Roll back to the previous @dfn{generation} of the profile---i.e., undo
the last transaction. the last transaction.

View File

@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.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> ;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
@ -464,6 +464,8 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
-r, --remove=PACKAGE remove PACKAGE")) -r, --remove=PACKAGE remove PACKAGE"))
(display (_ " (display (_ "
-u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP")) -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP"))
(display (_ "
--do-not-upgrade[=REGEXP] do not upgrade any packages matching REGEXP"))
(display (_ " (display (_ "
--roll-back roll back to the previous generation")) --roll-back roll back to the previous generation"))
(display (_ " (display (_ "
@ -543,6 +545,13 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
;; would upgrade everything. ;; would upgrade everything.
(delete '(upgrade . #f) result)) (delete '(upgrade . #f) result))
arg-handler)))) 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 (option '("roll-back") #f #f
(lambda (opt name arg result arg-handler) (lambda (opt name arg result arg-handler)
(values (alist-cons 'roll-back? #t result) (values (alist-cons 'roll-back? #t result)
@ -621,6 +630,13 @@ return the new list of manifest entries."
(_ #f)) (_ #f))
opts)) opts))
(define do-not-upgrade-regexps
(filter-map (match-lambda
(('do-not-upgrade . regexp)
(make-regexp regexp))
(_ #f))
opts))
(define packages-to-upgrade (define packages-to-upgrade
(match upgrade-regexps (match upgrade-regexps
(() (()
@ -630,6 +646,8 @@ return the new list of manifest entries."
(($ <manifest-entry> name version output path _) (($ <manifest-entry> name version output path _)
(and (any (cut regexp-exec <> name) (and (any (cut regexp-exec <> name)
upgrade-regexps) upgrade-regexps)
(not (any (cut regexp-exec <> name)
do-not-upgrade-regexps))
(upgradeable? name version path) (upgradeable? name version path)
(let ((output (or output "out"))) (let ((output (or output "out")))
(call-with-values (call-with-values