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.
This commit is contained in:
parent
8aeccc6240
commit
f7eaed6858
1 changed files with 11 additions and 6 deletions
|
@ -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)
|
||||
|
|
Reference in a new issue