Ricardo Wurmus <ricardo.wur...@mdc-berlin.de> skribis: > * guix/scripts/import/cran.scm: (%options): Add "recursive" option. > (guix-import-cran): Handle "recursive" option. > --- > guix/scripts/import/cran.scm | 26 ++++++++++++++++++++------ > 1 file changed, 20 insertions(+), 6 deletions(-) > > diff --git a/guix/scripts/import/cran.scm b/guix/scripts/import/cran.scm > index ace1123..4cae9da 100644 > --- a/guix/scripts/import/cran.scm > +++ b/guix/scripts/import/cran.scm > @@ -63,6 +63,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 +91,23 @@ 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 (label . (('package ('name name) . rest))) > + (label . (pkg))) > + `(define-public ,(string->symbol name) > + ,pkg))
Perhaps it could check with ‘find-packages-by-name’ whether NAME already exists? > + (_ #f)) > + (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))) Do you think this could be moved to (guix scripts import)? We would have to change other importers to return an empty list/stream of dependencies for now. Thanks, Ludo’.