summaryrefslogtreecommitdiff
path: root/guix/import/utils.scm
diff options
context:
space:
mode:
authorEric Bavier <bavier@member.fsf.org>2015-01-08 14:38:54 -0600
committerEric Bavier <bavier@member.fsf.org>2015-01-09 10:33:24 -0600
commit1ff2619bc114aface6b7b9d818f7208f9af677df (patch)
tree499f0d9f102b05bbb26e14a7a8e7b431231be509 /guix/import/utils.scm
parentc6cb82f5d5739fcc84281e5dc91076c37f1db89c (diff)
import: Factorize utility functions.
* guix/import/pypi.scm (hash-table->alist, flatten, assoc-ref*, url-fetch, json-fetch): Pull procedures from here into... * guix/import/utils.scm: Here and... * guix/import/json.scm: Here. New file. * Makefile.am (MODULE)[HAVE_GUILE_JSON]: Add it. * guix/import/gnu.scm (file-sha256): Move from here to... * guix/hash.scm: Here. * tests/pypi.scm (pypi->guix-package): Update mock module reference.
Diffstat (limited to 'guix/import/utils.scm')
-rw-r--r--guix/import/utils.scm48
1 files changed, 47 insertions, 1 deletions
diff --git a/guix/import/utils.scm b/guix/import/utils.scm
index 062cfc54f3..969491d28d 100644
--- a/guix/import/utils.scm
+++ b/guix/import/utils.scm
@@ -20,7 +20,16 @@
#:use-module (ice-9 match)
#:use-module (ice-9 regex)
#:use-module (srfi srfi-1)
- #:export (factorize-uri))
+ #:use-module (guix hash)
+ #:use-module (guix utils)
+ #:use-module ((guix build download) #:prefix build:)
+ #:export (factorize-uri
+
+ hash-table->alist
+ flatten
+ assoc-ref*
+
+ url-fetch))
(define (factorize-uri uri version)
"Factorize URI, a package tarball URI as a string, such that any occurrences
@@ -49,3 +58,40 @@ of the string VERSION is replaced by the symbol 'version."
result))))
'()
indices))))))
+
+(define (hash-table->alist table)
+ "Return an alist represenation of TABLE."
+ (map (match-lambda
+ ((key . (lst ...))
+ (cons key
+ (map (lambda (x)
+ (if (hash-table? x)
+ (hash-table->alist x)
+ x))
+ lst)))
+ ((key . (? hash-table? table))
+ (cons key (hash-table->alist table)))
+ (pair pair))
+ (hash-map->list cons table)))
+
+(define (flatten lst)
+ "Return a list that recursively concatenates all sub-lists of LST."
+ (fold-right
+ (match-lambda*
+ (((sub-list ...) memo)
+ (append (flatten sub-list) memo))
+ ((elem memo)
+ (cons elem memo)))
+ '() lst))
+
+(define (assoc-ref* alist key . rest)
+ "Return the value for KEY from ALIST. For each additional key specified,
+recursively apply the procedure to the sub-list."
+ (if (null? rest)
+ (assoc-ref alist key)
+ (apply assoc-ref* (assoc-ref alist key) rest)))
+
+(define (url-fetch url file-name)
+ "Save the contents of URL to FILE-NAME. Return #f on failure."
+ (parameterize ((current-output-port (current-error-port)))
+ (build:url-fetch url file-name)))