[bug#53818,v2,1/7] upstream: Sort list of updaters.
Commit Message
The order determines which updater gets used first when running ‘guix refresh’
on a package. We want the most generic updaters to be last since they usually
don’t provide as much or accurate information as language-specific updaters.
* guix/upstream.scm (sort-updaters): New procedure.
(%updaters): Use it.
---
guix/upstream.scm | 29 +++++++++++++++++++++++------
1 file changed, 23 insertions(+), 6 deletions(-)
@@ -250,14 +250,31 @@ (define (importer-modules)
%load-path)
#:warn warn-about-load-error)))
+(define (sort-updaters updaters)
+ "Sort UPDATERS by putting the more generic ones last."
+ (define (genericity updater)
+ (cond
+ ((equal? 'repology (upstream-updater-name updater))
+ 2)
+ ((string-prefix? "generic-"
+ (symbol->string (upstream-updater-name updater)))
+ 1)
+ (else 0)))
+
+ (define (less a b)
+ (<= (genericity a) (genericity b)))
+
+ (stable-sort updaters less))
+
(define %updaters
;; The list of publically-known updaters.
- (delay (fold-module-public-variables (lambda (obj result)
- (if (upstream-updater? obj)
- (cons obj result)
- result))
- '()
- (importer-modules))))
+ (delay (sort-updaters
+ (fold-module-public-variables (lambda (obj result)
+ (if (upstream-updater? obj)
+ (cons obj result)
+ result))
+ '()
+ (importer-modules)))))
;; Tests need to mock this variable so mark it as "non-declarative".
(set! %updaters %updaters)