diff --git a/Makefile.am b/Makefile.am index e0bef419d1..b0fefae968 100644 --- a/Makefile.am +++ b/Makefile.am @@ -145,6 +145,7 @@ TESTS = \ tests/snix.scm \ tests/union.scm \ tests/guix-build.sh \ + tests/guix-download.sh \ tests/guix-package.sh TEST_EXTENSIONS = .scm .sh diff --git a/guix-download.in b/guix-download.in index 8d4a8bb055..44118c9e3f 100644 --- a/guix-download.in +++ b/guix-download.in @@ -32,6 +32,7 @@ exec ${GUILE-@GUILE@} -L "@guilemoduledir@" -l "$0" \ (define-module (guix-download) #:use-module (web uri) #:use-module (web client) + #:use-module (web response) #:use-module (guix ui) #:use-module (guix store) #:use-module (guix utils) @@ -58,8 +59,13 @@ exec ${GUILE-@GUILE@} -L "@guilemoduledir@" -l "$0" \ (define (http-fetch url port) "Fetch from URL over HTTP and write the result to PORT." - (let-values (((response data) (http-get url #:decode-body? #f))) - (put-bytevector port data))) + (let*-values (((response data) (http-get url #:decode-body? #f)) + ((code) (response-code response))) + (if (= code 200) + (put-bytevector port data) + (leave (_ "failed to download from `~a': ~a: ~a~%") + (uri->string url) + code (response-reason-phrase response))))) (define (ftp-fetch url port) "Fetch from URL over FTP and write the result to PORT." diff --git a/tests/guix-download.sh b/tests/guix-download.sh new file mode 100644 index 0000000000..74ef48ba4b --- /dev/null +++ b/tests/guix-download.sh @@ -0,0 +1,27 @@ +# Guix --- Nix package management from Guile. -*- coding: utf-8 -*- +# Copyright (C) 2012 Ludovic Courtès +# +# This file is part of Guix. +# +# Guix is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# Guix is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Guix. If not, see . + +# +# Test the `guix-download' command-line utility. +# + +guix-download --version + +# Make sure it fails here. +if guix-download http://www.example.com/does-not-exist +then false; else true; fi