Ludovic Courtès <l...@gnu.org> writes: > 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?
The “recursive-import” method currently only does this for dependencies. A check would involve generating “(guix-name package-name)”, but “guix-name” is defined in “guix/import/cran.scm”. Should this check happen in the “recursive-import” procedure instead? >> + (_ #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. Yes, I’ll do that. ~~ Ricardo