~ruther/guix-local

37d19403e78e8dfab24a471bee7c8ee17346e43c — Ludovic Courtès 13 years ago 912209e
guix-download: Error out when the HTTP response code is not 200.

* 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.
3 files changed, 36 insertions(+), 2 deletions(-)

M Makefile.am
M guix-download.in
A tests/guix-download.sh
M Makefile.am => Makefile.am +1 -0
@@ 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

M guix-download.in => guix-download.in +8 -2
@@ 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."

A tests/guix-download.sh => tests/guix-download.sh +27 -0
@@ 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