download: Keep only one slash when concatenating URIs.

* guix/build/download.scm (url-fetch)[uri-vicinity]: New procedure.
  [maybe-expand-mirrors]: Use it.
master
Ludovic Courtès 2012-11-27 21:33:54 +01:00
parent 5321f74f23
commit 480943dd46
1 changed files with 7 additions and 1 deletions

View File

@ -135,6 +135,12 @@ which is not available during bootstrap."
"Fetch FILE from URL; URL may be either a single string, or a list of "Fetch FILE from URL; URL may be either a single string, or a list of
string denoting alternate URLs for FILE. Return #f on failure, and FILE string denoting alternate URLs for FILE. Return #f on failure, and FILE
on success." on success."
(define (uri-vicinity dir file)
;; Concatenate DIR, slash, and FILE, keeping only one slash in between.
;; This is required by some HTTP servers.
(string-append (string-trim-right dir #\/) "/"
(string-trim file #\/)))
(define (maybe-expand-mirrors uri) (define (maybe-expand-mirrors uri)
(case (uri-scheme uri) (case (uri-scheme uri)
((mirror) ((mirror)
@ -142,7 +148,7 @@ on success."
(path (uri-path uri))) (path (uri-path uri)))
(match (assoc-ref mirrors kind) (match (assoc-ref mirrors kind)
((mirrors ..1) ((mirrors ..1)
(map (compose string->uri (cut string-append <> path)) (map (compose string->uri (cut uri-vicinity <> path))
mirrors)) mirrors))
(_ (_
(error "unsupported URL mirror kind" kind uri))))) (error "unsupported URL mirror kind" kind uri)))))