[PATCH 0/2] Allow 'guix refresh' to downgrade packages when asked to

  • Done
  • quality assurance status badge
Details
One participant
  • Ludovic Courtès
Owner
unassigned
Submitted by
Ludovic Courtès
Severity
normal
L
L
Ludovic Courtès wrote on 27 Dec 2022 23:11
(address . guix-patches@gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20221227221156.25323-1-ludo@gnu.org
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
L
L
Ludovic Courtès wrote on 27 Dec 2022 23:21
[PATCH 1/2] refresh: Honor user-provided target version and report downgrades.
(address . 60368@debbugs.gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20221227222110.25440-1-ludo@gnu.org
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(-)

Toggle diff (78 lines)
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
L
L
Ludovic Courtès wrote on 27 Dec 2022 23:21
[PATCH 2/2] upstream: Allow downgrades.
(address . 60368@debbugs.gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20221227222110.25440-2-ludo@gnu.org
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(-)

Toggle diff (32 lines)
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
L
L
Ludovic Courtès wrote on 3 Jan 2023 12:32
Re: bug#60368: [PATCH 0/2] Allow 'guix refresh' to downgrade packages when asked to
(address . 60368-done@debbugs.gnu.org)(name . Hartmut Goebel)(address . h.goebel@crazy-compilers.com)
87ilhn97ld.fsf@gnu.org
Hi Hartmut and all,

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

Toggle quote (14 lines)
> 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’.
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 60368@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 60368
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch