diff options
author | Ludovic Courtès <ludo@gnu.org> | 2022-12-27 22:50:07 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2023-01-03 12:25:48 +0100 |
commit | 11235dd85a791ca7c88d964fb1f47ec876b43b4e (patch) | |
tree | 17dfea32938150bbbbd3b51a8cd730ddbc7107b7 | |
parent | a330bfdf5b2f27c34b5ece82bb355553af110cfe (diff) |
refresh: Honor user-provided target version and report downgrades.
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.
-rw-r--r-- | guix/scripts/refresh.scm | 46 |
1 files 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 @@ downloaded and authenticated; not updating~%") (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 @@ WARN? is true and no updater exists for PACKAGE, print a warning." (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 @@ all are dependent packages: ~{~a~^ ~}~%") (else (for-each (cut check-for-package-update <> updaters #:warn? warn?) - (map update-spec-package update-specs)) + update-specs) (return #t))))))))) |