summaryrefslogtreecommitdiff
path: root/guix/scripts/import/opam.scm
diff options
context:
space:
mode:
authorJulien Lepiller <julien@lepiller.eu>2018-12-19 22:43:43 +0100
committerJulien Lepiller <julien@lepiller.eu>2019-01-07 22:05:43 +0100
commit6090b0beb035e53449ea344506b76dcc2de8ca0d (patch)
tree1c9b0c0add7c3d2be44efa1db4bfce743a21f71f /guix/scripts/import/opam.scm
parent33af92dd99c9f2c726c32f81936931c69d719eb9 (diff)
downloadguix-patches-6090b0beb035e53449ea344506b76dcc2de8ca0d.tar
guix-patches-6090b0beb035e53449ea344506b76dcc2de8ca0d.tar.gz
import: opam: Add recursive option.
* guix/script/import/opam.scm: Add recursive option. * guix/import/opam.scm (opam->guix-package): return two values. (opam-recursive-import): New variable.
Diffstat (limited to 'guix/scripts/import/opam.scm')
-rw-r--r--guix/scripts/import/opam.scm27
1 files changed, 22 insertions, 5 deletions
diff --git a/guix/scripts/import/opam.scm b/guix/scripts/import/opam.scm
index b549878742..2d249a213f 100644
--- a/guix/scripts/import/opam.scm
+++ b/guix/scripts/import/opam.scm
@@ -25,6 +25,7 @@
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-11)
#:use-module (srfi srfi-37)
+ #:use-module (srfi srfi-41)
#:use-module (ice-9 match)
#:use-module (ice-9 format)
#:export (guix-import-opam))
@@ -43,6 +44,8 @@ Import and convert the opam package for PACKAGE-NAME.\n"))
(display (G_ "
-h, --help display this help and exit"))
(display (G_ "
+ -r, --recursive import packages recursively"))
+ (display (G_ "
-V, --version display version information and exit"))
(newline)
(show-bug-report-information))
@@ -56,6 +59,9 @@ Import and convert the opam package for PACKAGE-NAME.\n"))
(option '(#\V "version") #f #f
(lambda args
(show-version-and-exit "guix import opam")))
+ (option '(#\r "recursive") #f #f
+ (lambda (opt name arg result)
+ (alist-cons 'recursive #t result)))
%standard-import-options))
@@ -81,11 +87,22 @@ Import and convert the opam package for PACKAGE-NAME.\n"))
(reverse opts))))
(match args
((package-name)
- (let ((sexp (opam->guix-package package-name)))
- (unless sexp
- (leave (G_ "failed to download meta-data for package '~a'~%")
- package-name))
- sexp))
+ (if (assoc-ref opts 'recursive)
+ ;; Recursive import
+ (map (match-lambda
+ ((and ('package ('name name) . rest) pkg)
+ `(define-public ,(string->symbol name)
+ ,pkg))
+ (_ #f))
+ (reverse
+ (stream->list
+ (opam-recursive-import package-name))))
+ ;; Single import
+ (let ((sexp (opam->guix-package package-name)))
+ (unless sexp
+ (leave (G_ "failed to download meta-data for package '~a'~%")
+ package-name))
+ sexp)))
(()
(leave (G_ "too few arguments~%")))
((many ...)