diff options
| author | Peter Bex <peter@more-magic.net> | 2011-05-24 21:38:19 +0200 | 
|---|---|---|
| committer | Peter Bex <peter@more-magic.net> | 2011-05-24 21:38:19 +0200 | 
| commit | a312dbcab97d4717b45bf4a3f86954244b03048e (patch) | |
| tree | d5776224e202280c44933b506e1af0b8ea203e46 | |
| parent | c1a74a68d2ef96ec9e0d455a16a7ee6ee7b12167 (diff) | |
| download | henrietta-cache-a312dbcab97d4717b45bf4a3f86954244b03048e.tar.gz | |
Add better error reporting to make Felix happy :)
| -rw-r--r-- | henrietta-cache.scm | 87 | 
1 files changed, 53 insertions, 34 deletions
| diff --git a/henrietta-cache.scm b/henrietta-cache.scm index c391964..d2b6728 100644 --- a/henrietta-cache.scm +++ b/henrietta-cache.scm @@ -42,10 +42,14 @@ EOF        (error "Got an error while executing command " cmd))))  (define (pipe-from-http uri cmd) -  (call-with-input-request -   uri #f (lambda (i) (call-with-output-pipe* -                        cmd -                        (lambda (o) (copy-port i o)))))) +  (condition-case +      (call-with-input-request +       uri #f (lambda (i) (call-with-output-pipe* +                           cmd +                           (lambda (o) (copy-port i o))))) +    (e (exn http) +       (error (sprintf "Could not download ~A -- ~A" +                       uri (get-condition-property e 'exn 'message))))))  (define (download-release distribution-file-type uri cache-dir)    (case distribution-file-type @@ -58,9 +62,13 @@ EOF      ((zip)       (let ((tmpdir (create-temporary-directory))             (tmp-zipfile (create-temporary-file))) -       (call-with-input-request -        uri #f (lambda (i) (call-with-output-file tmp-zipfile -                             (lambda (o) (copy-port i o))))) +       (condition-case +           (call-with-input-request +            uri #f (lambda (i) (call-with-output-file tmp-zipfile +                                 (lambda (o) (copy-port i o))))) +         (e (exn http) +            (error (sprintf "Could not fetch zip-file ~A -- ~A" +                            uri (get-condition-property e 'exn 'message)))))         (let* ((cmd (sprintf "unzip -d ~A -o -qq ~A"                              (qs tmpdir) (qs tmp-zipfile)))                (status (system cmd))) @@ -77,31 +85,42 @@ EOF           (rename-file contents-dir cache-dir)           (system (sprintf "rm -rf ~A" (qs tmpdir))))))      ((meta-file) -     (let* ((meta (car (call-with-input-request uri #f read-file))) -            (uri (uri-reference uri)) -            (add-to-uri -             (lambda (f) -               (let* ((components (string-split f "/")) -                      (rel (update-uri (uri-reference "") path: components))) -                 (uri-relative-to rel uri)))) -            (files (alist-ref 'files meta))) -       (unless files -         (error "No \"files\" entry found in meta file" uri)) -       (for-each -        (lambda (file) -          (printf "\t\t~A...\n" file) -          (flush-output) -          (and-let* ((dirname (pathname-directory file)) -                     (directory (make-pathname cache-dir dirname))) -            (unless (file-exists? directory) -              (create-directory directory #t))) -          (call-with-input-request -           (add-to-uri file) #f -           (lambda (i) -             (call-with-output-file -                 (make-pathname cache-dir file) -               (lambda (o) (copy-port i o)))))) -        files))) +     (condition-case +         (let* ((meta (car (call-with-input-request uri #f read-file))) +                (uri (uri-reference uri)) +                (add-to-uri +                 (lambda (f) +                   (let* ((components (string-split f "/")) +                          (rel (update-uri (uri-reference "") path: components))) +                     (uri-relative-to rel uri)))) +                (files (alist-ref 'files meta))) +           (unless files +             (error "No \"files\" entry found in meta file" uri)) +           (for-each +            (lambda (file) +              (printf "\t\t~A...\n" file) +              (flush-output) +              (and-let* ((dirname (pathname-directory file)) +                         (directory (make-pathname cache-dir dirname))) +                (unless (file-exists? directory) +                  (create-directory directory #t))) +              (condition-case +                  (call-with-input-request +                   (add-to-uri file) #f +                   (lambda (i) +                     (call-with-output-file +                         (make-pathname cache-dir file) +                       (lambda (o) (copy-port i o))))) +                (e (exn http) +                   (error (sprintf +                           (conc "Could not download file \"~A\", " +                                 "listed in meta-file (full URI: ~A) -- ~A") +                           file (uri->string (add-to-uri file)) +                           (get-condition-property e 'exn 'message)))))) +            files)) +       (e (exn http) +          (error (sprintf "Could not download meta-file \"~A\" -- ~A\n" +                          uri (get-condition-property e 'exn 'message))))))      (else (error "Unknown distribution file type" distribution-file-type))))  (define (download-all-release-files egg-name uris/releases uris) @@ -143,8 +162,8 @@ EOF    (handle-exceptions exn      (begin        (fprintf (current-error-port) -               "Could not fetch release-info file for egg ~A from ~A\n" -               egg-name uri) +               "Could not fetch release-info file for egg ~A from ~A -- ~A\n" +               egg-name uri (get-condition-property exn 'exn 'message))        (flush-output (current-error-port))        '())      (with-input-from-request uri #f read-file))) | 
