diff options
author | Hartmut Goebel <h.goebel@crazy-compilers.com> | 2022-06-24 22:36:38 +0200 |
---|---|---|
committer | Hartmut Goebel <h.goebel@crazy-compilers.com> | 2022-12-26 17:38:07 +0100 |
commit | f7eaed685842769ffa3f77b62d4d604f110e62a3 (patch) | |
tree | 2a38127f25ce70a729797bbc617a0e6d5af39490 | |
parent | 8aeccc6240ec45f0bc7bed655e0c8149ae4253eb (diff) | |
download | guix-f7eaed685842769ffa3f77b62d4d604f110e62a3.tar.gz |
upstream: Allow updating to a specific version.
* guix/upstream.scm(package-latest-release): Add keyword-argument 'version' and pass it on to the updater's 'import' function. (package-update): add keyword-argument 'version' and pass it on to package-latest-release. Differentiate the error message issued when no package was found, depending on whether version was given or not.
-rw-r--r-- | guix/upstream.scm | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/guix/upstream.scm b/guix/upstream.scm index 3b576898ec..f3ab9ab78b 100644 --- a/guix/upstream.scm +++ b/guix/upstream.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2019, 2022 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev> ;;; Copyright © 2021, 2022 Maxime Devos <maximedevos@telenet.be> +;;; Copyright © 2022 Hartmut Goebel <h.goebel@crazy-compilers.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -278,7 +279,8 @@ them matches." (define* (package-latest-release package #:optional - (updaters (force %updaters))) + (updaters (force %updaters)) + #:key (version #f)) "Return an upstream source to update PACKAGE, a <package> object, or #f if none of UPDATERS matches PACKAGE. When several updaters match PACKAGE, try them until one of them returns an upstream source. It is the caller's @@ -287,7 +289,7 @@ one." (any (match-lambda (($ <upstream-updater> name description pred import) (and (pred package) - (import package)))) + (import package #:version version)))) updaters)) (define* (package-latest-release* package @@ -494,13 +496,13 @@ SOURCE, an <upstream-source>." (define* (package-update store package #:optional (updaters (force %updaters)) - #:key (key-download 'interactive)) + #:key (key-download 'interactive) (version #f)) "Return the new version, the file name of the new version tarball, and input 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)." - (match (package-latest-release package updaters) + (match (package-latest-release package updaters #:version version) ((? upstream-source? source) (if (version>? (upstream-source-version source) (package-version package)) @@ -524,8 +526,11 @@ this method: ~s") (values #f #f #f))) (#f ;; Warn rather than abort so that other updates can still take place. - (warning (G_ "updater failed to determine available releases for ~a~%") - (package-name package)) + (if version + (warning (G_ "updater failed to find release ~a@~a~%") + (package-name package) version) + (warning (G_ "updater failed to determine available releases for ~a~%") + (package-name package))) (values #f #f #f)))) (define* (update-package-source package source hash) |