summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2021-09-14 10:11:42 +0200
committerLudovic Courtès <ludo@gnu.org>2021-09-14 11:50:58 +0200
commit3cb5ae8577db28b2c6013b9d9ecf99cb696e3432 (patch)
tree4430363dcf7e1b9b7589d6d86d360c6d7fd97b13
parent67da64608773772f75983415dd90584025ecd523 (diff)
downloadguix-patches-3cb5ae8577db28b2c6013b9d9ecf99cb696e3432.tar
guix-patches-3cb5ae8577db28b2c6013b9d9ecf99cb696e3432.tar.gz
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.
-rw-r--r--guix/build/download.scm23
-rw-r--r--guix/download.scm2
2 files changed, 16 insertions, 9 deletions
diff --git a/guix/build/download.scm b/guix/build/download.scm
index 54627eefa2..c8ddadfdd4 100644
--- a/guix/build/download.scm
+++ b/guix/build/download.scm
@@ -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
diff --git a/guix/download.scm b/guix/download.scm
index a66cf0cea1..85b97a4766 100644
--- a/guix/download.scm
+++ b/guix/download.scm
@@ -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