guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/04: import cran: Add "recursive" option.


From: Ricardo Wurmus
Subject: 02/04: import cran: Add "recursive" option.
Date: Sat, 17 Dec 2016 18:14:45 +0000 (UTC)

rekado pushed a commit to branch master
in repository guix.

commit 64ce53eb5e8347e93574bf02e183d668c33e250c
Author: Ricardo Wurmus <address@hidden>
Date:   Tue May 17 16:41:13 2016 +0200

    import cran: Add "recursive" option.
    
    * guix/scripts/import/cran.scm: (%options): Add "recursive" option.
    (guix-import-cran): Handle "recursive" option.
    * doc/guix.texi (Invoking guix import): Document it.
---
 doc/guix.texi                |    4 ++++
 guix/scripts/import/cran.scm |   26 ++++++++++++++++++++------
 2 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index bd782ca..5d3a175 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -5148,6 +5148,10 @@ R package:
 guix import cran Cairo
 @end example
 
+When @code{--recursive} is added, the importer will traverse the
+dependency graph of the given upstream package recursively and generate
+package expressions for all those packages that are not yet in Guix.
+
 When @code{--archive=bioconductor} is added, metadata is imported from
 @uref{http://www.bioconductor.org/, Bioconductor}, a repository of R
 packages for for the analysis and comprehension of high-throughput
diff --git a/guix/scripts/import/cran.scm b/guix/scripts/import/cran.scm
index ace1123..66c660a 100644
--- a/guix/scripts/import/cran.scm
+++ b/guix/scripts/import/cran.scm
@@ -26,6 +26,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-cran))
@@ -63,6 +64,9 @@ Import and convert the CRAN package for PACKAGE-NAME.\n"))
                  (lambda (opt name arg result)
                    (alist-cons 'repo (string->symbol arg)
                                (alist-delete 'repo result))))
+         (option '(#\r "recursive") #f #f
+                 (lambda (opt name arg result)
+                   (alist-cons 'recursive #t result)))
          %standard-import-options))
 
 
@@ -88,12 +92,22 @@ Import and convert the CRAN package for PACKAGE-NAME.\n"))
                            (reverse opts))))
     (match args
       ((package-name)
-       (let ((sexp (cran->guix-package package-name
-                                       (or (assoc-ref opts 'repo) 'cran))))
-         (unless sexp
-           (leave (_ "failed to download description 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))
+                (stream->list (recursive-import package-name
+                                                (or (assoc-ref opts 'repo) 
'cran))))
+           ;; Single import
+           (let ((sexp (cran->guix-package package-name
+                                           (or (assoc-ref opts 'repo) 'cran))))
+             (unless sexp
+               (leave (_ "failed to download description for package '~a'~%")
+                      package-name))
+             sexp)))
       (()
        (leave (_ "too few arguments~%")))
       ((many ...)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]