[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#38408] [PATCH v9 8/8] guix: import: parametrized importing of dev d
From: |
Martin Becze |
Subject: |
[bug#38408] [PATCH v9 8/8] guix: import: parametrized importing of dev dependencies |
Date: |
Tue, 4 Feb 2020 07:18:25 -0500 |
This changes the behavoir of the recusive crate importer so that it will
include the importing of development dependencies for the top level package
but will not inculded the development dependencies for any other imported
package.
* guix/import/crate.scm (crate->guix-package, make-crate-sexp)
<guix import crate>: added new parameter
---
guix/import/crate.scm | 28 ++++++++++++++++++++--------
guix/scripts/import/crate.scm | 4 ++--
tests/crate.scm | 3 +--
3 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/guix/import/crate.scm b/guix/import/crate.scm
index 630f4d3749..a370fddffe 100644
--- a/guix/import/crate.scm
+++ b/guix/import/crate.scm
@@ -149,7 +149,7 @@ record or #f if it was not found."
`((arguments (,'quasiquote ,args))))))
(define* (make-crate-sexp #:key name version cargo-inputs
cargo-development-inputs
- home-page synopsis description license
+ home-page synopsis description license build?
#:allow-other-keys)
"Return the `package' s-expression for a rust package with the given NAME,
VERSION, CARGO-INPUTS, CARGO-DEVELOPMENT-INPUTS, HOME-PAGE, SYNOPSIS,
DESCRIPTION,
@@ -176,7 +176,9 @@ and LICENSE."
(base32
,(bytevector->nix-base32-string (port-sha256
port))))))
(build-system cargo-build-system)
- ,@(maybe-arguments (append '(#:skip-build? #t)
+ ,@(maybe-arguments (append (if build?
+ '()
+ '(#:skip-build? #t))
(maybe-cargo-inputs cargo-inputs)
(maybe-cargo-development-inputs
cargo-development-inputs)))
@@ -201,11 +203,13 @@ and LICENSE."
'unknown-license!)))
(string-split string (string->char-set " /"))))
-(define* (crate->guix-package crate-name #:key version #:allow-other-keys)
+(define* (crate->guix-package crate-name #:key version include-dev-deps?
+ #:allow-other-keys)
"Fetch the metadata for CRATE-NAME from crates.io, and return the
`package' s-expression corresponding to that package, or #f on failure.
When VERSION is specified, attempt to fetch that version; otherwise fetch the
-latest version of CRATE-NAME."
+latest version of CRATE-NAME. If INCLUDE-DEV-DEPS is true then this
+will also lookup the development dependencs for the given crate."
(define (semver-range-contains-string? range version)
(semver-range-contains? (string->semver-range range)
@@ -251,9 +255,12 @@ latest version of CRATE-NAME."
(let* ((dependencies (crate-version-dependencies version*))
(dep-crates dev-dep-crates (partition normal-dependency?
dependencies))
(cargo-inputs (sort-map-deps dep-crates))
- (cargo-development-inputs '()))
+ (cargo-development-inputs (if include-dev-deps?
+ (sort-map-deps dev-dep-crates)
+ '())))
(values
- (make-crate-sexp #:name crate-name
+ (make-crate-sexp #:build? include-dev-deps?
+ #:name crate-name
#:version (crate-version-number version*)
#:cargo-inputs cargo-inputs
#:cargo-development-inputs cargo-development-inputs
@@ -263,13 +270,18 @@ latest version of CRATE-NAME."
#:description (crate-description crate)
#:license (and=> (crate-version-license version*)
string->license))
- cargo-inputs))))
+ (append cargo-inputs cargo-development-inputs)))))
(define mem-crate->guix-package (memoize crate->guix-package))
(define* (crate-recursive-import crate-name #:key version)
(recursive-import crate-name
- #:repo->guix-package mem-crate->guix-package
+ #:repo->guix-package
+ (lambda* params
+ ;; only download the development dependencies for the
top level package
+ (let ((include-dev-deps? (equal? (car params)
crate-name)))
+ (apply mem-crate->guix-package
+ (append params `(#:include-dev-deps?
,include-dev-deps?)))))
#:version version
#:guix-name crate-name->package-name))
diff --git a/guix/scripts/import/crate.scm b/guix/scripts/import/crate.scm
index 552628cfc7..9252c52dfa 100644
--- a/guix/scripts/import/crate.scm
+++ b/guix/scripts/import/crate.scm
@@ -96,13 +96,13 @@ Import and convert the crate.io package for
PACKAGE-NAME.\n"))
(if (assoc-ref opts 'recursive)
(crate-recursive-import name #:version version)
- (let ((sexp (crate->guix-package name #:version version)))
+ (let ((sexp (crate->guix-package name #:version version
#:include-dev-deps? #t)))
(unless sexp
(leave (G_ "failed to download meta-data for package '~a'~%")
(if version
(string-append name "@" version)
name)))
- sexp)))
+ (list sexp))))
(()
(leave (G_ "too few arguments~%")))
((many ...)
diff --git a/tests/crate.scm b/tests/crate.scm
index 893dd70fc9..6fb9b772d8 100644
--- a/tests/crate.scm
+++ b/tests/crate.scm
@@ -461,8 +461,7 @@
(? string? hash)))))
(build-system cargo-build-system)
(arguments
- ('quasiquote (#:skip-build?
- #t #:cargo-inputs
+ ('quasiquote (#:cargo-inputs
(("rust-intermediate-1"
('unquote rust-intermediate-1-1.0))
("rust-intermediate-2"
--
2.25.0
[bug#38408] [PATCH v9 6/8] guix: import: crate: memorize crate->guix-package, Martin Becze, 2020/02/04
[bug#38408] [PATCH v9 2/8] guix: import: crate: Use semver to resovle module versions, Martin Becze, 2020/02/04
[bug#38408] [PATCH v9 7/8] guix: import: utils: trim patch version from names, Martin Becze, 2020/02/04
[bug#38408] [PATCH v9 8/8] guix: import: parametrized importing of dev dependencies,
Martin Becze <=
[bug#38408] [PATCH v9 0/8] recursive semver crate importer!, Leo Famulari, 2020/02/20