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 © 2019, 2022 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev> ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
;;; Copyright © 2021, 2022 Maxime Devos <maximedevos@telenet.be> ;;; Copyright © 2021, 2022 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2022 Hartmut Goebel <h.goebel@crazy-compilers.com>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -278,7 +279,8 @@ them matches."
(define* (package-latest-release package (define* (package-latest-release package
#:optional #:optional
(updaters (force %updaters))) (updaters (force %updaters))
#:key (version #f))
"Return an upstream source to update PACKAGE, a <package> object, or #f if "Return an upstream source to update PACKAGE, a <package> object, or #f if
none of UPDATERS matches PACKAGE. When several updaters match PACKAGE, try 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 them until one of them returns an upstream source. It is the caller's
@ -287,7 +289,7 @@ one."
(any (match-lambda (any (match-lambda
(($ <upstream-updater> name description pred import) (($ <upstream-updater> name description pred import)
(and (pred package) (and (pred package)
(import package)))) (import package #:version version))))
updaters)) updaters))
(define* (package-latest-release* package (define* (package-latest-release* package
@ -494,13 +496,13 @@ SOURCE, an <upstream-source>."
(define* (package-update store package (define* (package-update store package
#:optional (updaters (force %updaters)) #: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 "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; changes for PACKAGE; return #f (three values) when PACKAGE is up-to-date;
raise an error when the updater could not determine available releases. raise an error when the updater could not determine available releases.
KEY-DOWNLOAD specifies a download policy for missing OpenPGP keys; allowed KEY-DOWNLOAD specifies a download policy for missing OpenPGP keys; allowed
values: 'always', 'never', and 'interactive' (default)." values: 'always', 'never', and 'interactive' (default)."
(match (package-latest-release package updaters) (match (package-latest-release package updaters #:version version)
((? upstream-source? source) ((? upstream-source? source)
(if (version>? (upstream-source-version source) (if (version>? (upstream-source-version source)
(package-version package)) (package-version package))
@ -524,8 +526,11 @@ this method: ~s")
(values #f #f #f))) (values #f #f #f)))
(#f (#f
;; Warn rather than abort so that other updates can still take place. ;; Warn rather than abort so that other updates can still take place.
(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~%") (warning (G_ "updater failed to determine available releases for ~a~%")
(package-name package)) (package-name package)))
(values #f #f #f)))) (values #f #f #f))))
(define* (update-package-source package source hash) (define* (update-package-source package source hash)