guix-devel
[Top][All Lists]
Advanced

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

[PATCH 5/7] import cran: Add recursive importer.


From: Ricardo Wurmus
Subject: [PATCH 5/7] import cran: Add recursive importer.
Date: Mon, 23 May 2016 17:40:06 +0200

* guix/import/cran.scm (recursive-import): New variable.
---
 guix/import/cran.scm | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/guix/import/cran.scm b/guix/import/cran.scm
index 522df3e..907441e 100644
--- a/guix/import/cran.scm
+++ b/guix/import/cran.scm
@@ -33,8 +33,10 @@
   #:use-module ((guix build-system r) #:select (cran-uri bioconductor-uri))
   #:use-module (guix upstream)
   #:use-module (guix packages)
+  #:use-module (gnu packages)
   #:export (cran->guix-package
             bioconductor->guix-package
+            recursive-import
             %cran-updater
             %bioconductor-updater))
 
@@ -236,6 +238,25 @@ s-expression corresponding to that package, or #f on 
failure."
 ;; * Then follow
 ;;   https://r-forge.r-project.org/R/?group_id=929 with the given group_id.
 
+(define* (recursive-import package-name #:optional (repo 'cran))
+  (define (iter name imported)
+    ;; FIXME: this might fail, so catch errors
+    (receive (package dependencies)
+        (cran->guix-package name repo)
+      (if package
+          (let* ((new-entry    (cons name (list package)))
+                 (imported     (cons new-entry imported))
+                 (dependencies (filter (lambda (dependency)
+                                         (and (not (assoc dependency imported))
+                                              (null? (find-packages-by-name 
(guix-name dependency)))))
+                                       dependencies)))
+            (fold iter imported dependencies))
+          (begin
+            (format #t "error: failed to import package ~a from archive ~a.\n" 
name repo)
+            imported))))
+  (iter package-name '()))
+
+
 
 ;;;
 ;;; Updater.
-- 
2.7.3




reply via email to

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