diff options
author | Ludovic Courtès <ludo@gnu.org> | 2012-11-13 22:57:50 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2012-11-13 22:58:43 +0100 |
commit | 352ec143de32e751286590ff51c40f5a32c7fa87 (patch) | |
tree | dd52b23ac37be4fb6023810c7485894c776a5cbe /guix-download.in | |
parent | ecdb81e159a29c92351bc51c3556a760074f7473 (diff) | |
download | guix-352ec143de32e751286590ff51c40f5a32c7fa87.tar.gz |
guix-download: Add support for file:// URIs.
* guix-download.in (fetch-and-store): New procedure. (guix-download): Use it to compute PATH. Call `add-to-store' when a `file' URI scheme is used. * Makefile.am (AM_TESTS_ENVIRONMENT): New variable. * tests/guix-download.sh: Add test.
Diffstat (limited to 'guix-download.in')
-rw-r--r-- | guix-download.in | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/guix-download.in b/guix-download.in index a3fd4b55d4..cd4ad1b71b 100644 --- a/guix-download.in +++ b/guix-download.in @@ -86,6 +86,15 @@ exec ${GUILE-@GUILE@} -L "@guilemoduledir@" -l "$0" \ (put-bytevector port buffer 0 count) (loop (get-bytevector-n! in buffer 0 len))))))) +(define (fetch-and-store store fetch uri) + "Call FETCH for URI, and pass it an output port to write to; eventually, +copy data from that port to STORE. Return the resulting store path." + (call-with-temporary-output-file + (lambda (name port) + (fetch uri port) + (close port) + (add-to-store store (basename (uri-path uri)) + #t #f "sha256" name)))) ;;; ;;; Command-line options. @@ -162,18 +171,15 @@ Report bugs to: ~a.~%") "@PACKAGE_BUGREPORT@")) (uri (or (string->uri (assq-ref opts 'argument)) (leave (_ "guix-download: ~a: failed to parse URI~%") (assq-ref opts 'argument)))) - (fetch (case (uri-scheme uri) - ((http) http-fetch) - ((ftp) ftp-fetch) + (path (case (uri-scheme uri) + ((http) (fetch-and-store store uri http-fetch)) + ((ftp) (fetch-and-store store uri ftp-fetch)) + ((file) + (add-to-store store (basename (uri-path uri)) + #t #f "sha256" (uri-path uri))) (else (leave (_ "guix-download: ~a: unsupported URI scheme~%") (uri-scheme uri))))) - (path (call-with-temporary-output-file - (lambda (name port) - (fetch uri port) - (close port) - (add-to-store store (basename (uri-path uri)) - #t #f "sha256" name)))) (hash (call-with-input-file path (compose sha256 get-bytevector-all))) (fmt (assq-ref opts 'format))) |