download: Disarchive mirrors can be URL-returning procedures.

As discussed at <https://issues.guix.gnu.org/47336#16>.

* guix/build/download.scm (url-fetch)[disarchive-uris]: Accept MIRROR as
a procedure.
* guix/download.scm (%disarchive-mirrors): Add comment.  This change can
only be made once a 'guix perform-download' that understands procedures
is widely deployed.
This commit is contained in:
Ludovic Courtès 2021-09-14 10:11:42 +02:00
parent 67da646087
commit 3cb5ae8577
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 16 additions and 9 deletions

@ -747,15 +747,20 @@ otherwise simply ignore them."
content-addressed-mirrors))
(define disarchive-uris
(append-map (match-lambda
((? string? mirror)
(map (match-lambda
((hash-algo . hash)
(string->uri
(string-append mirror
(symbol->string hash-algo) "/"
(bytevector->base16-string hash)))))
hashes)))
(append-map (lambda (mirror)
(let ((make-url (match mirror
((? string?)
(lambda (hash-algo hash)
(string-append
mirror
(symbol->string hash-algo) "/"
(bytevector->base16-string hash))))
((? procedure?)
mirror))))
(map (match-lambda
((hash-algo . hash)
(string->uri (make-url hash-algo hash))))
hashes)))
disarchive-mirrors))
;; Make this unbuffered so 'progress-report/file' works as expected. 'line

@ -400,6 +400,8 @@
(object->string %content-addressed-mirrors)))
(define %disarchive-mirrors
;; TODO: Eventually turn into a procedure that takes a hash algorithm
;; (symbol) and hash (bytevector).
'("https://disarchive.ngyro.com/"))
(define %disarchive-mirror-file