upstream: Try the generic importers last.

* guix/upstream.scm (%updaters): Ensure the updaters with a name starting by
'generic' appear last in the list.

Fixes: <https://issues.guix.gnu.org/73508>
Change-Id: I98977f6c925c14303273755b5b4dc36035f78bda
This commit is contained in:
Maxim Cournoyer 2024-09-27 15:54:37 +09:00
parent 7b6ab9ebe7
commit 119febc275
No known key found for this signature in database
GPG key ID: 1260E46482E63562

View file

@ -48,6 +48,7 @@
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-35)
#:use-module (srfi srfi-71)
#:use-module (rnrs bytevectors)
#:use-module (ice-9 match)
#:use-module (ice-9 regex)
@ -226,15 +227,26 @@ correspond to the same version."
(define %updaters
;; The list of publically-known updaters, alphabetically sorted.
(delay
(sort (fold-module-public-variables (lambda (obj result)
(if (upstream-updater? obj)
(cons obj result)
result))
'()
(importer-modules))
(lambda (updater1 updater2)
(string<? (symbol->string (upstream-updater-name updater1))
(symbol->string (upstream-updater-name updater2)))))))
(let* ((updaters
(sort (fold-module-public-variables
(lambda (obj result)
(if (upstream-updater? obj)
(cons obj result)
result))
'()
(importer-modules))
(lambda (updater1 updater2)
(string<?
(symbol->string (upstream-updater-name updater1))
(symbol->string (upstream-updater-name updater2))))))
(generic-updaters rest (partition
(compose (cut string-prefix? "generic" <>)
symbol->string
upstream-updater-name)
updaters)))
;; Ensure the generic updaters are tried last, as otherwise they could
;; return less accurate results.
(append rest generic-updaters))))
;; Tests need to mock this variable so mark it as "non-declarative".
(set! %updaters %updaters)