unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
From: Hartmut Goebel <h.goebel@crazy-compilers.com>
To: 38408@debbugs.gnu.org
Subject: [bug#38408] [PATCH v17 7/8] import: crate: Trim version for names after left-most non-zero part.
Date: Mon, 16 Nov 2020 20:07:27 +0100	[thread overview]
Message-ID: <2e2f414b859139f6f41d7106b3fbcd6ae5d17649.1605552418.git.h.goebel@crazy-compilers.com> (raw)
In-Reply-To: <cover.1605552418.git.h.goebel@crazy-compilers.com>

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 +++++++++----
 tests/crate.scm       | 25 ++++++++++++-------------
 3 files changed, 29 insertions(+), 19 deletions(-)

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)
diff --git a/tests/crate.scm b/tests/crate.scm
index 3fbf6762c5..1506daeadd 100644
--- a/tests/crate.scm
+++ b/tests/crate.scm
@@ -352,7 +352,7 @@
              (_ (error "Unexpected URL: " url)))))
 
         (match (crate->guix-package "foo")
-          ((define-public 'rust-foo-1.0
+          ((define-public 'rust-foo-1
              (package (name "rust-foo")
                       (version "1.0.3")
                       (source
@@ -368,8 +368,7 @@
                        ('quasiquote
                         (#:skip-build? #t
                          #:cargo-inputs
-                         (("rust-leaf-alice"
-                           ('unquote 'rust-leaf-alice-0.7))))))
+                         (("rust-leaf-alice" ('unquote 'rust-leaf-alice-0.7))))))
                       (home-page "http://example.com")
                       (synopsis "summary")
                       (description "summary")
@@ -452,7 +451,7 @@
                 (synopsis "summary")
                 (description "summary")
                 (license (list license:expat license:asl2.0))))
-            (define-public 'rust-leaf-bob-3.0
+            (define-public 'rust-leaf-bob-3
               (package
                 (name "rust-leaf-bob")
                 (version "3.0.1")
@@ -471,7 +470,7 @@
                 (synopsis "summary")
                 (description "summary")
                 (license (list license:expat license:asl2.0))))
-            (define-public 'rust-intermediate-b-1.2
+            (define-public 'rust-intermediate-b-1
               (package
                 (name "rust-intermediate-b")
                 (version "1.2.3")
@@ -489,12 +488,12 @@
                  ('quasiquote (#:skip-build? #t
                                #:cargo-inputs
                                (("rust-leaf-bob"
-                                 ('unquote 'rust-leaf-bob-3.0))))))
+                                 ('unquote rust-leaf-bob-3))))))
                 (home-page "http://example.com")
                 (synopsis "summary")
                 (description "summary")
                 (license (list license:expat license:asl2.0))))
-            (define-public 'rust-intermediate-a-1.0
+            (define-public 'rust-intermediate-a-1
               (package
                 (name "rust-intermediate-a")
                 (version "1.0.42")
@@ -512,16 +511,16 @@
                  ('quasiquote (#:skip-build? #t
                                #:cargo-inputs
                                (("rust-intermediate-b"
-                                 ('unquote 'rust-intermediate-b-1.2))
+                                 ('unquote rust-intermediate-b-1))
                                 ("rust-leaf-alice"
                                  ('unquote 'rust-leaf-alice-0.7))
                                 ("rust-leaf-bob"
-                                 ('unquote 'rust-leaf-bob-3.0))))))
+                                 ('unquote rust-leaf-bob-3))))))
                 (home-page "http://example.com")
                 (synopsis "summary")
                 (description "summary")
                 (license (list license:expat license:asl2.0))))
-            (define-public 'rust-root-1.0
+            (define-public 'rust-root-1
               (package
                 (name "rust-root")
                 (version "1.0.4")
@@ -538,13 +537,13 @@
                 (arguments
                  ('quasiquote (#:cargo-inputs
                                (("rust-intermediate-a"
-                                 ('unquote 'rust-intermediate-a-1.0))
+                                 ('unquote rust-intermediate-a-1))
                                 ("rust-intermediate-b"
-                                 ('unquote 'rust-intermediate-b-1.2))
+                                 ('unquote rust-intermediate-b-1))
                                 ("rust-leaf-alice"
                                  ('unquote 'rust-leaf-alice-0.7))
                                 ("rust-leaf-bob"
-                                 ('unquote 'rust-leaf-bob-3.0))))))
+                                 ('unquote rust-leaf-bob-3))))))
                 (home-page "http://example.com")
                 (synopsis "summary")
                 (description "summary")
-- 
2.21.3





  parent reply	other threads:[~2020-11-16 19:31 UTC|newest]

Thread overview: 107+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-10 21:39 [bug#44560] [PATCH v16 0/6] New take on: Semantic version aware recursive importer for crates Hartmut Goebel
2020-11-10 21:39 ` [bug#38408] [PATCH v16 1/6] import: utils: 'recursive-import' accepts an optional version parameter Hartmut Goebel
2020-11-10 21:39 ` [bug#38408] [PATCH v16 2/6] guix: self: Add guile-semver as a depenedency Hartmut Goebel
2020-11-10 21:39 ` [bug#38408] [PATCH v16 3/6] import: crate: Use guile-semver to resolve module versions Hartmut Goebel
2020-11-10 22:13   ` Hartmut Goebel
2019-11-28  0:13     ` [bug#38408] [PATCH 0/3] (WIP) Semantic version aware recusive importer for crates Martin Becze
2019-11-28  0:16       ` [bug#38408] [PATCH 1/3] gnu: added new function, find-packages-by-name*/direct Martin Becze
2019-11-28  0:16       ` [bug#38408] [PATCH 2/3] gnu: added new procedure, recusive-import-semver Martin Becze
2019-11-28  0:16       ` [bug#38408] [PATCH 3/3] Rewrote some of guix/import/crate.scm to use recursive-import-semver and updated script and test Martin Becze
2019-11-30 16:36         ` Martin Becze
2019-12-01  9:00           ` Efraim Flashner
2019-12-05 20:05       ` [bug#38408] [PATCH v2 0/5] Semantic version aware recusive importer for crates Martin Becze
2019-12-05 20:05         ` [bug#38408] [PATCH v2 1/5] gnu: added new function, find-packages-by-name*/direct Martin Becze
2019-12-05 20:05         ` [bug#38408] [PATCH v2 2/5] gnu: added new procedure, recusive-import-semver Martin Becze
2019-12-05 20:05         ` [bug#38408] [PATCH v2 3/5] Rewrote some of guix/import/crate.scm to use recursive-import-semver and updated script and test Martin Becze
2019-12-05 20:05         ` [bug#38408] [PATCH v2 4/5] added "#:skip-build? #t" to the output of (make-crate-sexp). Most the the packages imported will be libaries and won't need to build. The top level package will build them though Martin Becze
2019-12-05 20:05         ` [bug#38408] [PATCH v2 5/5] guix: crate: Depublicated build and normal dependencies Martin Becze
2019-12-06 18:21       ` [bug#38408] [PATCH v3 0/5] Semantic version aware recusive importer for crates Martin Becze
2019-12-06 18:21         ` [bug#38408] [PATCH v3 1/5] gnu: added new function, find-packages-by-name*/direct Martin Becze
2019-12-06 18:21         ` [bug#38408] [PATCH v3 2/5] gnu: added new procedure, recusive-import-semver Martin Becze
2019-12-06 18:21         ` [bug#38408] [PATCH v3 3/5] Rewrote some of guix/import/crate.scm to use recursive-import-semver and updated script and test Martin Becze
2019-12-06 18:21         ` [bug#38408] [PATCH v3 4/5] added "#:skip-build? #t" to the output of (make-crate-sexp). Most the the packages imported will be libaries and won't need to build. The top level package will build them though Martin Becze
2019-12-06 18:21         ` [bug#38408] [PATCH v3 5/5] guix: crate: Depublicated dependencies Martin Becze
2019-12-10 19:23       ` [bug#38408] [PATCH v4 0/6] Semantic version aware recusive importer for crates Martin Becze
2019-12-10 19:23         ` [bug#38408] [PATCH v4 1/6] gnu: added new function, find-packages-by-name*/direct Martin Becze
2019-12-19 22:00           ` Ludovic Courtès
2019-12-20 18:37             ` Martin Becze
2019-12-27 18:38               ` Ludovic Courtès
2020-01-18 16:40                 ` [bug#38408] [PATCH v6] Semantic version aware recusive importer for crates Martin Becze
2019-12-10 19:23         ` [bug#38408] [PATCH v4 2/6] gnu: added new procedure, recusive-import-semver Martin Becze
2019-12-19 22:07           ` Ludovic Courtès
2019-12-20 18:46             ` Martin Becze
2019-12-10 19:23         ` [bug#38408] [PATCH v4 3/6] Rewrote some of guix/import/crate.scm to use recursive-import-semver and updated script and test Martin Becze
2019-12-10 19:23         ` [bug#38408] [PATCH v4 4/6] added "#:skip-build? #t" to the output of (make-crate-sexp). Most the the packages imported will be libaries and won't need to build. The top level package will build them though Martin Becze
2019-12-10 19:23         ` [bug#38408] [PATCH v4 5/6] guix: crate: Depublicated dependencies Martin Becze
2019-12-10 19:23         ` [bug#38408] [PATCH v4 6/6] guix: import: recursive-import-semver: allow the range of a package to be specified when begining import Martin Becze
2019-12-16 23:30       ` [bug#38408] Rewrote recursive-import-semver based on topological-sort Martin Becze
2020-02-04 12:18       ` [bug#38408] [PATCH v9 0/8] recursive semver crate importer! Martin Becze
2020-02-04 12:18         ` [bug#38408] [PATCH v9 1/8] guix: import: (recursive-import) Allow for version numbers Martin Becze
2020-02-17 10:03           ` Efraim Flashner
2020-02-04 12:18         ` [bug#38408] [PATCH v9 2/8] guix: import: crate: Use semver to resovle module versions Martin Becze
2020-02-17 14:35           ` Ludovic Courtès
2020-02-17 14:57             ` Efraim Flashner
2020-02-17 15:37               ` Ludovic Courtès
2020-02-18  8:56                 ` Martin Becze
2020-02-04 12:18         ` [bug#38408] [PATCH v9 3/8] Added Guile-Semver as a dependency to guix Martin Becze
2020-02-17 10:03           ` Efraim Flashner
2020-02-17 14:36             ` Ludovic Courtès
2020-02-18  9:30               ` Martin Becze
2020-02-20  9:40                 ` Ludovic Courtès
2020-02-20 16:54                   ` Martin Becze
2020-02-21  9:01                     ` Ludovic Courtès
2020-02-21 16:25                       ` Martin Becze
2020-02-21 16:27                         ` Leo Famulari
2020-02-23 20:34                           ` Martin Becze
2020-02-23 21:05                         ` Martin Becze
2020-03-11 20:20                           ` Martin Becze
2020-03-21 18:35                             ` Martin Becze
2020-03-22 19:26                               ` Leo Famulari
2020-03-22 20:10                               ` Leo Famulari
2020-03-23  9:50                                 ` Martin Becze
2020-03-23 16:28                                   ` Martin Becze
2020-03-24 10:18                                     ` Ludovic Courtès
2020-03-24 14:19                                       ` Martin Becze
2020-03-24 19:00                                       ` Martin Becze
2020-04-12 15:07                                         ` Martin Becze
2020-04-12 16:59                                           ` Ludovic Courtès
2020-04-17 14:57                                             ` Martin Becze
2020-04-29 19:50                                               ` Martin Becze
2020-04-29 19:51                                               ` Martin Becze
2020-05-08 19:57                                                 ` Martin Becze
2020-08-18  9:44                                                   ` Martin Becze
2020-07-05  0:23                                                 ` Jakub Kądziołka
2020-02-04 12:18         ` [bug#38408] [PATCH v9 4/8] guix: import: utils: allow generation of inputs to be version aware Martin Becze
2020-02-04 12:18         ` [bug#38408] [PATCH v9 5/8] guix: import: crate: deduplicate dependencies Martin Becze
2020-02-04 12:18         ` [bug#38408] [PATCH v9 6/8] guix: import: crate: memorize crate->guix-package Martin Becze
2020-02-04 12:18         ` [bug#38408] [PATCH v9 7/8] guix: import: utils: trim patch version from names Martin Becze
2020-02-04 12:18         ` [bug#38408] [PATCH v9 8/8] guix: import: parametrized importing of dev dependencies Martin Becze
2020-02-20 18:53         ` [bug#38408] [PATCH v9 0/8] recursive semver crate importer! Leo Famulari
2020-02-21  8:35           ` Martin Becze
2020-02-21 12:15             ` Efraim Flashner
2020-02-21 16:29               ` Martin Becze
2020-11-07 22:19       ` [bug#38408] [PATCH 0/3] (WIP) Semantic version aware recusive importer for crates Hartmut Goebel
2020-11-07 22:35         ` Marius Bakke
2020-11-09 17:15           ` Hartmut Goebel
2020-11-09 17:27             ` Nicolas Goaziou
2020-11-11 15:06       ` [bug#38408] [PATCH v16 3/6] import: crate: Use guile-semver to resolve module versions Timothy Sample
2020-11-16 19:07       ` [bug#44694] [PATCH v17 0/8] New take continued: Semantic version aware recursive Hartmut Goebel
2020-11-16 19:07         ` [bug#38408] [PATCH v17 1/8] guix: self: Add guile-semver as a depenedency Hartmut Goebel
2020-11-16 19:07         ` [bug#38408] [PATCH v17 2/8] import: utils: 'recursive-import' accepts an optional version parameter Hartmut Goebel
2020-11-16 19:07         ` [bug#38408] [PATCH v17 3/8] import: crate: Use guile-semver to resolve module versions Hartmut Goebel
2020-11-16 19:07         ` [bug#38408] [PATCH v17 4/8] import: crate: Memorize crate->guix-package Hartmut Goebel
2020-11-16 19:07         ` [bug#38408] [PATCH v17 5/8] import: crate: Parameterized importing of dev dependencies Hartmut Goebel
2020-11-16 19:07         ` [bug#38408] [PATCH v17 6/8] import: utils: Trim patch version from names Hartmut Goebel
2020-11-16 19:07         ` Hartmut Goebel [this message]
2020-11-16 19:07         ` [bug#38408] [PATCH v17 8/8] import: crate: Use existing package satisfying semver requirement Hartmut Goebel
2020-11-17 21:54         ` [bug#38408] [PATCH v17 0/8] New take continued: Semantic version aware recursive Martin Becze
2020-12-02 21:13         ` bug#38408: " Hartmut Goebel
2020-12-02 21:48           ` [bug#38408] " Leo Famulari
2020-11-17 21:43     ` [bug#38408] [PATCH v16 3/6] import: crate: Use guile-semver to resolve module versions Martin Becze
2020-11-17 21:51       ` Martin Becze
2020-11-18  7:56         ` Hartmut Goebel
2020-11-10 21:39 ` [bug#38408] [PATCH v16 4/6] import: crate: Memorize crate->guix-package Hartmut Goebel
2020-11-10 21:39 ` [bug#38408] [PATCH v16 5/6] import: utils: Trim patch version from names Hartmut Goebel
2020-11-10 21:39 ` [bug#38408] [PATCH v16 6/6] import: crate: Parameterized importing of dev dependencies Hartmut Goebel
2020-11-10 22:21   ` Hartmut Goebel
2020-11-10 22:24 ` [bug#38408] [PATCH v16 0/6] New take on: Semantic version aware recursive importer for crates Hartmut Goebel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2e2f414b859139f6f41d7106b3fbcd6ae5d17649.1605552418.git.h.goebel@crazy-compilers.com \
    --to=h.goebel@crazy-compilers.com \
    --cc=38408@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).