From 45584061a9ebe961e2be08ee94c3fe8ad74e2713 Mon Sep 17 00:00:00 2001 From: Hartmut Goebel Date: Sat, 14 Nov 2020 21:31:33 +0100 Subject: import: crate: Trim version for names after left-most non-zero part. This complies to how versions are matched for caret requirements in crates: An update is allowed if the new version number does not modify the left-most non-zero digit in the major, minor, patch grouping. * guix/import/crate.scm (version->semver-prefix): New function. (make-crate-sexp)[format-inputs]: Use it. (make-crate-sexp): Use it to pass shorter version to package->definition. * guix/import/utils.scm (package->definition): Change optional parameter APPEND-VERSION? into APPEND-VERSION?/STRING. If it is a string, append its value to name. * tests/crate.scm: Adjust tests accordingly. --- guix/import/crate.scm | 10 ++++++++-- guix/import/utils.scm | 13 +++++++++---- 2 files changed, 17 insertions(+), 6 deletions(-) (limited to 'guix') diff --git a/guix/import/crate.scm b/guix/import/crate.scm index 20efa131d5..b133529ba7 100644 --- a/guix/import/crate.scm +++ b/guix/import/crate.scm @@ -150,6 +150,12 @@ record or #f if it was not found." ((args ...) `((arguments (,'quasiquote ,args)))))) +(define (version->semver-prefix version) + "Return the version up to and including the first non-zero part" + (first + (map match:substring + (list-matches "^(0+\\.){,2}[0-9]+" version)))) + (define* (make-crate-sexp #:key name version cargo-inputs cargo-development-inputs home-page synopsis description license build?) "Return the `package' s-expression for a rust package with the given NAME, @@ -160,7 +166,7 @@ and LICENSE." (match-lambda ((name version) (list (crate-name->package-name name) - (version-major+minor version)))) + (version->semver-prefix version)))) inputs)) (let* ((port (http-fetch (crate-uri name version))) @@ -194,7 +200,7 @@ and LICENSE." ((license) license) (_ `(list ,@license))))))) (close-port port) - (package->definition pkg #t))) + (package->definition pkg (version->semver-prefix version)))) (define (string->license string) (filter-map (lambda (license) diff --git a/guix/import/utils.scm b/guix/import/utils.scm index b74393e617..7de95349cd 100644 --- a/guix/import/utils.scm +++ b/guix/import/utils.scm @@ -263,16 +263,21 @@ package definition." ((package-inputs ...) `((native-inputs (,'quasiquote ,package-inputs)))))) -(define* (package->definition guix-package #:optional append-version?) +(define* (package->definition guix-package #:optional append-version?/string) + "If APPEND-VERSION?/STRING is #t, append the package's major+minor +version. If APPEND-VERSION?/string is a string, append this string." (match guix-package ((or ('package ('name name) ('version version) . rest) ('let _ ('package ('name name) ('version version) . rest))) `(define-public ,(string->symbol - (if append-version? - (string-append name "-" (version-major+minor version)) - version)) + (cond + ((string? append-version?/string) + (string-append name "-" append-version?/string)) + ((= append-version?/string #t) + (string-append name "-" (version-major+minor version))) + ((#t) version))) ,guix-package)))) (define (build-system-modules) -- cgit v1.2.3