unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#60368] [PATCH 0/2] Allow 'guix refresh' to downgrade packages when asked to
@ 2022-12-27 22:11 Ludovic Courtès
  2022-12-27 22:21 ` [bug#60368] [PATCH 1/2] refresh: Honor user-provided target version and report downgrades Ludovic Courtès
  2023-01-03 11:32 ` bug#60368: [PATCH 0/2] Allow 'guix refresh' to downgrade packages when asked to Ludovic Courtès
  0 siblings, 2 replies; 4+ messages in thread
From: Ludovic Courtès @ 2022-12-27 22:11 UTC (permalink / raw)
  To: 60368; +Cc: Ludovic Courtès

Hi Hartmut,

I figured changes from <https://issues.guix.gnu.org/57460> were not
applicable in some cases because of things that guard against
downgrade.

The following patches fix the use case where the user is explicitly
asking for a downgrade, as in:

  guix refresh guile@3.0=2.2.7
  guix refresh -u guile=3.0.0

Previously these wouldn’t do anything.

WDYT?

Ludo’.

Ludovic Courtès (2):
  refresh: Honor user-provided target version and report downgrades.
  upstream: Allow downgrades.

 guix/scripts/refresh.scm | 46 +++++++++++++++++++++++++++-------------
 guix/upstream.scm        | 17 ++++++++++++---
 2 files changed, 45 insertions(+), 18 deletions(-)


base-commit: fd0e69984f25bdf2405cf33b15a8bbb2010a7b85
-- 
2.38.1





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

* [bug#60368] [PATCH 1/2] refresh: Honor user-provided target version and report downgrades.
  2022-12-27 22:11 [bug#60368] [PATCH 0/2] Allow 'guix refresh' to downgrade packages when asked to Ludovic Courtès
@ 2022-12-27 22:21 ` Ludovic Courtès
  2022-12-27 22:21   ` [bug#60368] [PATCH 2/2] upstream: Allow downgrades Ludovic Courtès
  2023-01-03 11:32 ` bug#60368: [PATCH 0/2] Allow 'guix refresh' to downgrade packages when asked to Ludovic Courtès
  1 sibling, 1 reply; 4+ messages in thread
From: Ludovic Courtès @ 2022-12-27 22:21 UTC (permalink / raw)
  To: 60368; +Cc: Ludovic Courtès

Previously, 'guix refresh guile=3.0.0' would print:

  3.0.8 is already the latest version of guile

With this change, it prints:

  guile would be downgraded from 3.0.8 to 3.0.0

This is a followup to 8aeccc6240ec45f0bc7bed655e0c8149ae4253eb.

* guix/scripts/refresh.scm (check-for-package-update): Take an
<update-spec> instead of a <package>.  Report downgrades as such when
UPDATE-SPEC specifies a target version.
(guix-refresh): Adjust caller.
---
 guix/scripts/refresh.scm | 46 +++++++++++++++++++++++++++-------------
 1 file changed, 31 insertions(+), 15 deletions(-)

diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm
index e0b94ce48d..65c3ce9c16 100644
--- a/guix/scripts/refresh.scm
+++ b/guix/scripts/refresh.scm
@@ -382,10 +382,15 @@ (define change-name
       (when warn?
         (warn-no-updater package))))
 
-(define* (check-for-package-update package updaters #:key warn?)
-  "Check whether an update is available for PACKAGE and print a message.  When
-WARN? is true and no updater exists for PACKAGE, print a warning."
-  (match (package-latest-release package updaters)
+(define* (check-for-package-update update-spec updaters #:key warn?)
+  "Check whether UPDATE-SPEC is feasible, and print a message.
+When WARN? is true and no updater exists for PACKAGE, print a warning."
+  (define package
+    (update-spec-package update-spec))
+
+  (match (package-latest-release package updaters
+                                 #:version
+                                 (update-spec-version update-spec))
     ((? upstream-source? source)
      (let ((loc (or (package-field-location package 'version)
                     (package-location package))))
@@ -403,23 +408,34 @@ (define* (check-for-package-update package updaters #:key warn?)
                   (package-version package)
                   (package-name package))))
          (else
-          (when warn?
-            (warning loc
-                     (G_ "~a is greater than \
+          (if (update-spec-version update-spec)
+              (info loc
+                    (G_ "~a would be downgraded from ~a to ~a~%")
+                    (package-name package)
+                    (package-version package)
+                    (upstream-source-version source))
+              (when warn?
+                (warning loc
+                         (G_ "~a is greater than \
 the latest known version of ~a (~a)~%")
-                     (package-version package)
-                     (package-name package)
-                     (upstream-source-version source)))))))
+                         (package-version package)
+                         (package-name package)
+                         (upstream-source-version source))))))))
     (#f
      (when warn?
        ;; Distinguish between "no updater" and "failing updater."
        (match (lookup-updater package updaters)
          ((? upstream-updater? updater)
-          (warning (package-location package)
-                   (G_ "'~a' updater failed to determine available \
+          (if (update-spec-version update-spec)
+              (warning (G_ "'~a' updater failed to find version ~a of '~a'~%")
+                       (upstream-updater-name updater)
+                       (update-spec-version update-spec)
+                       (package-name package))
+              (warning (package-location package)
+                       (G_ "'~a' updater failed to determine available \
 releases for ~a~%")
-                   (upstream-updater-name updater)
-                   (package-name package)))
+                       (upstream-updater-name updater)
+                       (package-name package))))
          (#f
           (warn-no-updater package)))))))
 
@@ -591,5 +607,5 @@ (define (options->updaters opts)
              (else
               (for-each (cut check-for-package-update <> updaters
                              #:warn? warn?)
-                        (map update-spec-package update-specs))
+                        update-specs)
               (return #t)))))))))
-- 
2.38.1





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

* [bug#60368] [PATCH 2/2] upstream: Allow downgrades.
  2022-12-27 22:21 ` [bug#60368] [PATCH 1/2] refresh: Honor user-provided target version and report downgrades Ludovic Courtès
@ 2022-12-27 22:21   ` Ludovic Courtès
  0 siblings, 0 replies; 4+ messages in thread
From: Ludovic Courtès @ 2022-12-27 22:21 UTC (permalink / raw)
  To: 60368; +Cc: Ludovic Courtès

Previously, 'guix refresh -u guile=3.0.0' would do nothing.  With this
change, it actually downgrades 'guile'.

This is a followup to 8aeccc6240ec45f0bc7bed655e0c8149ae4253eb.

* guix/upstream.scm (package-update): Ignore 'version>?' check
when #:version is passed.  Warn about downgrades.
---
 guix/upstream.scm | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/guix/upstream.scm b/guix/upstream.scm
index f3ab9ab78b..4c72388bf3 100644
--- a/guix/upstream.scm
+++ b/guix/upstream.scm
@@ -501,11 +501,22 @@ (define* (package-update store package
 changes for PACKAGE; return #f (three values) when PACKAGE is up-to-date;
 raise an error when the updater could not determine available releases.
 KEY-DOWNLOAD specifies a download policy for missing OpenPGP keys; allowed
-values: 'always', 'never', and 'interactive' (default)."
+values: 'always', 'never', and 'interactive' (default).
+
+When VERSION is specified, update PACKAGE to that version, even if that is a
+downgrade."
   (match (package-latest-release package updaters #:version version)
     ((? upstream-source? source)
-     (if (version>? (upstream-source-version source)
-                    (package-version package))
+     (if (or (version>? (upstream-source-version source)
+                        (package-version package))
+             (and version
+                  (begin
+                    (warning (package-location package)
+                             (G_ "downgrading '~a' from ~a to ~a~%")
+                             (package-name package)
+                             (package-version package)
+                             (upstream-source-version source))
+                    #t)))
          (let ((method (match (package-source package)
                          ((? origin? origin)
                           (origin-method origin))
-- 
2.38.1





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

* bug#60368: [PATCH 0/2] Allow 'guix refresh' to downgrade packages when asked to
  2022-12-27 22:11 [bug#60368] [PATCH 0/2] Allow 'guix refresh' to downgrade packages when asked to Ludovic Courtès
  2022-12-27 22:21 ` [bug#60368] [PATCH 1/2] refresh: Honor user-provided target version and report downgrades Ludovic Courtès
@ 2023-01-03 11:32 ` Ludovic Courtès
  1 sibling, 0 replies; 4+ messages in thread
From: Ludovic Courtès @ 2023-01-03 11:32 UTC (permalink / raw)
  To: 60368-done; +Cc: Hartmut Goebel

Hi Hartmut and all,

Ludovic Courtès <ludo@gnu.org> skribis:

> Hi Hartmut,
>
> I figured changes from <https://issues.guix.gnu.org/57460> were not
> applicable in some cases because of things that guard against
> downgrade.
>
> The following patches fix the use case where the user is explicitly
> asking for a downgrade, as in:
>
>   guix refresh guile@3.0=2.2.7
>   guix refresh -u guile=3.0.0
>
> Previously these wouldn’t do anything.

I went ahead and pushed these:

  11235dd85a refresh: Honor user-provided target version and report downgrades.
  a330bfdf5b upstream: Allow downgrades.

Thanks,
Ludo’.




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

end of thread, other threads:[~2023-01-03 11:33 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-27 22:11 [bug#60368] [PATCH 0/2] Allow 'guix refresh' to downgrade packages when asked to Ludovic Courtès
2022-12-27 22:21 ` [bug#60368] [PATCH 1/2] refresh: Honor user-provided target version and report downgrades Ludovic Courtès
2022-12-27 22:21   ` [bug#60368] [PATCH 2/2] upstream: Allow downgrades Ludovic Courtès
2023-01-03 11:32 ` bug#60368: [PATCH 0/2] Allow 'guix refresh' to downgrade packages when asked to 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).