unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH] guix package: Add '--do-not-upgrade' option
@ 2015-04-14  7:04 Mark H Weaver
  2015-04-14  9:57 ` Ludovic Courtès
  0 siblings, 1 reply; 2+ messages in thread
From: Mark H Weaver @ 2015-04-14  7:04 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 862 bytes --]

This adds a --do-not-upgrade option to 'guix package'.
One issue is that if you write:

  guix package -u --do-not-upgrade icecat

then this will be interpreted as:

  guix package -u icecat --do-not-upgrade

The reason is that -u is specified as taking an optional argument, and
it will take one even if it comes after some other options.

We could fix this by specifying that -u/--upgrade does _not_ take an
optional argument, instead relying on the 'arg-handler' logic to
interpret arguments.  The downside is that this would no longer be
allowed:

  guix package --upgrade=<pattern>

instead it would have to be written without the '=', like this:

  guix package --upgrade <pattern>

What do you think?

Anyway, here is my current patch which still has the issue described
above, so you must write "guix package -u . --do-not-upgrade icecat".

      Mark



[-- Attachment #2: [PATCH] guix package: Add '--do-not-upgrade' option --]
[-- Type: text/x-patch, Size: 4686 bytes --]

From 1ddc901ae8bbe0bb0b41b380a1f2c1c368602beb Mon Sep 17 00:00:00 2001
From: Mark H Weaver <mhw@netris.org>
Date: Thu, 26 Mar 2015 17:25:09 -0400
Subject: [PATCH] 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.
---
 doc/guix.texi            | 12 +++++++++++-
 guix/scripts/package.scm | 20 +++++++++++++++++++-
 2 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 872caa8..1bd2a84 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -947,13 +947,23 @@ and/or output name in addition to the package name.  For instance,
 @itemx -u [@var{regexp} @dots{}]
 Upgrade all the installed packages.  If one or more @var{regexp}s are
 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
 in the distribution currently installed.  To update your distribution,
 you should regularly run @command{guix pull} (@pxref{Invoking guix
 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
 Roll back to the previous @dfn{generation} of the profile---i.e., undo
 the last transaction.
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 09ae782..53813c1 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
-- 
2.2.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] guix package: Add '--do-not-upgrade' option
  2015-04-14  7:04 [PATCH] guix package: Add '--do-not-upgrade' option Mark H Weaver
@ 2015-04-14  9:57 ` Ludovic Courtès
  0 siblings, 0 replies; 2+ messages in thread
From: Ludovic Courtès @ 2015-04-14  9:57 UTC (permalink / raw)
  To: Mark H Weaver; +Cc: guix-devel

Mark H Weaver <mhw@netris.org> skribis:

> This adds a --do-not-upgrade option to 'guix package'.
> One issue is that if you write:
>
>   guix package -u --do-not-upgrade icecat
>
> then this will be interpreted as:
>
>   guix package -u icecat --do-not-upgrade
>
> The reason is that -u is specified as taking an optional argument, and
> it will take one even if it comes after some other options.
>
> We could fix this by specifying that -u/--upgrade does _not_ take an
> optional argument, instead relying on the 'arg-handler' logic to
> interpret arguments.  The downside is that this would no longer be
> allowed:
>
>   guix package --upgrade=<pattern>
>
> instead it would have to be written without the '=', like this:
>
>   guix package --upgrade <pattern>
>
> What do you think?

I have a slight preference for keeping --upgrade unchanged.

> Anyway, here is my current patch which still has the issue described
> above, so you must write "guix package -u . --do-not-upgrade icecat".

Or “guix package --do-not-upgrade icecat -u”.

> From 1ddc901ae8bbe0bb0b41b380a1f2c1c368602beb Mon Sep 17 00:00:00 2001
> From: Mark H Weaver <mhw@netris.org>
> Date: Thu, 26 Mar 2015 17:25:09 -0400
> Subject: [PATCH] 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.

Otherwise LGTM.  This is a welcome addition!

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-04-14  9:57 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-14  7:04 [PATCH] guix package: Add '--do-not-upgrade' option Mark H Weaver
2015-04-14  9:57 ` 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).