summary refs log tree commit diff
diff options
context:
space:
mode:
authorFederico Beffa <beffa@fbengineering.ch>2015-07-22 15:26:12 +0200
committerFederico Beffa <beffa@fbengineering.ch>2015-08-01 12:36:21 +0200
commit6544aba5fc43c5e8f3ce558d02354cdde9a68ce9 (patch)
treeae072f2092472745011fc9104b67db9b42d1782f
parent23bae7bb862bf466fbee07f498130f156c342489 (diff)
downloadguix-6544aba5fc43c5e8f3ce558d02354cdde9a68ce9.tar.gz
import: elpa: Improve error message reporting.
* guix/import/elpa.scm (filter-dependencies): Fix bug.
  (call-with-downloaded-file): Add optional parameter 'error-thunk'.
  (fetch-package-description): Use it.
-rw-r--r--guix/import/elpa.scm16
1 files changed, 10 insertions, 6 deletions
diff --git a/guix/import/elpa.scm b/guix/import/elpa.scm
index 3b3dc1f91a..b3a3a963a6 100644
--- a/guix/import/elpa.scm
+++ b/guix/import/elpa.scm
@@ -52,7 +52,7 @@ past were distributed separately from Emacs."
 (define (filter-dependencies names)
   "Remove the package names included with Emacs from the list of
 NAMES (strings)."
-  (filter emacs-standard-library? names))
+  (filter (compose not emacs-standard-library?) names))
 
 (define (elpa-name->package-name name)
   "Given the NAME of an Emacs package, return the corresponding Guix name."
@@ -77,14 +77,17 @@ NAMES (strings)."
         (call-with-downloaded-file url read)
         (leave (_ "~A: currently not supported~%") repo))))
 
-(define (call-with-downloaded-file url proc)
+(define* (call-with-downloaded-file url proc #:optional (error-thunk #f))
   "Fetch URL, store the content in a temporary file and call PROC with that
-file.  Returns the value returned by PROC."
+file.  Returns the value returned by PROC.  On error call ERROR-THUNK and
+return its value or leave if it's false."
   (call-with-temporary-output-file
    (lambda (temp port)
      (or (and (url-fetch url temp)
               (call-with-input-file temp proc))
-         (error "download failed" url)))))
+         (if error-thunk
+             (error-thunk)
+             (leave (_ "~A: download failed~%") url))))))
 
 (define (is-elpa-package? name elpa-pkg-spec)
   "Return true if the string NAME corresponds to the name of the package
@@ -158,8 +161,9 @@ include VERSION."
 
 (define (fetch-package-description kind name repo)
   "Fetch the description of package NAME of type KIND from REPO."
-  (let ((url (full-url repo name "-readme.txt")))
-    (call-with-downloaded-file url read-string)))
+  (let ((url (full-url repo name "-readme.txt"))
+        (error-thunk (lambda () "No description available.")))
+    (call-with-downloaded-file url read-string error-thunk)))
 
 (define* (fetch-elpa-package name #:optional (repo 'gnu))
   "Fetch package NAME from REPO."