guix-download: Error out when the HTTP response code is not 200.
authorLudovic Courtès <ludo@gnu.org>
Wed, 7 Nov 2012 23:13:25 +0000 (00:13 +0100)
committerLudovic Courtès <ludo@gnu.org>
Wed, 7 Nov 2012 23:13:25 +0000 (00:13 +0100)
* guix-download.in (http-fetch): Leave with an error message when
  RESPONSE's code is not 200.

* tests/guix-download.sh: New file.
* Makefile.am (TESTS): Add it.

Makefile.am
guix-download.in
tests/guix-download.sh [new file with mode: 0644]

index e0bef41..b0fefae 100644 (file)
@@ -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
index 8d4a8bb..44118c9 100644 (file)
@@ -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 (file)
index 0000000..74ef48b
--- /dev/null
@@ -0,0 +1,27 @@
+# Guix --- Nix package management from Guile.         -*- coding: utf-8 -*-
+# Copyright (C) 2012 Ludovic Courtès <ludo@gnu.org>
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+#
+# 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