From c9c78e0f1e6a88d53770ae94ada473cd9851552d Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Tue, 26 Nov 2019 11:46:34 +0200 Subject: [PATCH 3/3] import: crate: Honor versioned dependencies when importing crates. * guix/import.crate.scm (crate-name->package-name+version, cleaned-version, crate-name+version): New variables. (crate->guix-package): Use crate-name+version for cargo-inputs and cargo-development-inputs. --- guix/import/crate.scm | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/guix/import/crate.scm b/guix/import/crate.scm index 9eca176b08..7be622cf24 100644 --- a/guix/import/crate.scm +++ b/guix/import/crate.scm @@ -220,10 +220,10 @@ latest version of CRATE-NAME." (dependencies (remove optional-dependency? all-deps)) (dep-crates (filter normal-dependency? dependencies)) (dev-dep-crates (remove normal-dependency? dependencies)) - (cargo-inputs (sort (map crate-dependency-id dep-crates) + (cargo-inputs (sort (map crate-name+version dep-crates) string-cipackage-name name) (string-append "rust-" (string-join (string-split name #\_) "-"))) +(define (crate-name+version->package-name+version name version) + (string-append "rust-" (string-join (string-split name #\_) "-") + "-" (version-major+minor version))) + +(define (cleaned-version version) + (match (string-ref version 0) + ((or #\^ #\=) + (cleaned-version (substring version 1))) + (#\ ; an actual space + (cleaned-version (substring version 1))) + (char-set-contains? char-set:digit + (if (string-contains version ".") + (version-major+minor version) + version)) + (_ + (cleaned-version (substring version 1))) + )) + +(define (crate-name+version crate) + (string-append (crate-dependency-id crate) "-" + (cleaned-version (crate-dependency-requirement crate)))) + ;;; ;;; Updater -- 2.24.0