Message ID | 20240406020852.15996-2-ngraves@ngraves.fr |
---|---|
State | New |
Headers | show |
Series | Improving composer import. | expand |
Hi! Nicolas Graves <ngraves@ngraves.fr> skribis: > * guix/import/composer.scm > (composer-fetch): Replace reduce by fold to correct version selection > logic. > (latest-release): Implement recursive package refresh. Rename to > import-release. > (import-release): New function, formerly known as latest-release. Nice, glad to see this feature put to good use. :-) [...] > +(define* (import-release package #:key (version #f)) > + "Return an <upstream-source> for VERSION or the latest release of PACKAGE." > (let* ((php-name (guix-package->composer-name package)) > (composer-package (composer-fetch php-name #:version version))) > (if composer-package > - (upstream-source > - (package (composer-package-name composer-package)) > - (version (composer-package-version composer-package)) > - (urls (list (composer-source-url > - (composer-package-source composer-package))))) > + (let* ((guix-name (composer-package-name composer-package)) > + (inputs > + (append > + (map (lambda (dep) > + (upstream-input > + (name php-name) > + (downstream-name guix-name) > + (type 'regular))) > + (composer-package-require composer-package)) > + (map (lambda (dep) > + (upstream-input > + (name php-name) > + (downstream-name guix-name) > + (type 'native))) Shouldn’t it be: (upstream-input (name dep) (downstream-name (php-package-name dep)) (type …)) ? As a slight improvement, since the ‘inputs’ field of <upstream-source> is delayed (wrapped in a promise, so that its computation only happens when it’s needed), you could arrange to replace the ‘inputs’ variable above like so: (define (dependency->input dependency type) (upstream-input …)) (upstream-source ;; … (inputs (append (map (cut dependency->input <> 'regular) …) (map (cut dependency->input <> 'native) …)))) I hope this makes sense. Thanks! Ludo’.
diff --git a/guix/import/composer.scm b/guix/import/composer.scm index 75419ca63e..e2a60969aa 100644 --- a/guix/import/composer.scm +++ b/guix/import/composer.scm @@ -113,7 +113,7 @@ (define* (composer-fetch name #:key (version #f)) (if version (assoc-ref packages version) (cdr - (reduce + (fold (lambda (new cur-max) (match new (((? valid-version? version) . tail) @@ -243,16 +243,32 @@ (define (php-package? package) (eq? (package-build-system package) composer-build-system) (string-prefix? "php-" (package-name package)))) -(define* (latest-release package #:key (version #f)) - "Return an <upstream-source> for the latest release of PACKAGE." +(define* (import-release package #:key (version #f)) + "Return an <upstream-source> for VERSION or the latest release of PACKAGE." (let* ((php-name (guix-package->composer-name package)) (composer-package (composer-fetch php-name #:version version))) (if composer-package - (upstream-source - (package (composer-package-name composer-package)) - (version (composer-package-version composer-package)) - (urls (list (composer-source-url - (composer-package-source composer-package))))) + (let* ((guix-name (composer-package-name composer-package)) + (inputs + (append + (map (lambda (dep) + (upstream-input + (name php-name) + (downstream-name guix-name) + (type 'regular))) + (composer-package-require composer-package)) + (map (lambda (dep) + (upstream-input + (name php-name) + (downstream-name guix-name) + (type 'native))) + (composer-package-dev-require composer-package))))) + (upstream-source + (package guix-name) + (version (composer-package-version composer-package)) + (urls (list (composer-source-url + (composer-package-source composer-package)))) + (inputs inputs))) (begin (warning (G_ "failed to parse ~a~%") php-name) #f)))) @@ -262,7 +278,7 @@ (define %composer-updater (name 'composer) (description "Updater for Composer packages") (pred php-package?) - (import latest-release))) + (import import-release))) (define* (composer-recursive-import package-name #:optional version) (recursive-import package-name