Archived
1
0
Fork 0

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:
Hartmut Goebel 2022-06-24 22:36:38 +02:00
parent 8aeccc6240
commit f7eaed6858
No known key found for this signature in database
GPG key ID: 634A8DFFD3F631DF

View file

@ -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)