From: Martin Becze <mjbecze@riseup.net>
To: 38408@debbugs.gnu.org
Cc: Martin Becze <mjbecze@riseup.net>
Subject: [bug#38408] [PATCH v3 2/5] gnu: added new procedure, recusive-import-semver
Date: Fri, 6 Dec 2019 13:21:34 -0500 [thread overview]
Message-ID: <18d8555e374e1d7682c5f7231be25dd572dacbf0.1575656092.git.mjbecze@riseup.net> (raw)
In-Reply-To: <cover.1575656092.git.mjbecze@riseup.net>
* gnu/packages.scm (recusive-import-semver): New Procedure
* gnu/packages.scm (package->definition)[arguments]: New argument, "latest"
* tests/import-utils.scm: tests for recusive-import-semver
---
guix/import/utils.scm | 181 +++++++++++++++++++++++++++++++++++++++--
tests/import-utils.scm | 162 ++++++++++++++++++++++++++++++++++++
2 files changed, 336 insertions(+), 7 deletions(-)
diff --git a/guix/import/utils.scm b/guix/import/utils.scm
index 4694b6e7ef..6932614f8e 100644
--- a/guix/import/utils.scm
+++ b/guix/import/utils.scm
@@ -5,6 +5,7 @@
;;; Copyright © 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2019 Robert Vollmert <rob@vllmrt.net>
+;;; Copyright © 2019 Martin Becze <mjbecze@riseup.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -32,6 +33,7 @@
#:use-module (guix discovery)
#:use-module (guix build-system)
#:use-module (guix gexp)
+ #:use-module (guix memoization)
#:use-module (guix store)
#:use-module (guix download)
#:use-module (gnu packages)
@@ -43,6 +45,8 @@
#:use-module (srfi srfi-11)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-41)
+ #:use-module (semver)
+ #:use-module (semver ranges)
#:export (factorize-uri
flatten
@@ -69,7 +73,8 @@
guix-name
- recursive-import))
+ recursive-import
+ recursive-import-semver))
(define (factorize-uri uri version)
"Factorize URI, a package tarball URI as a string, such that any occurrences
@@ -257,13 +262,15 @@ package definition."
((package-inputs ...)
`((native-inputs (,'quasiquote ,package-inputs))))))
-(define (package->definition guix-package)
+(define* (package->definition guix-package #:optional (latest #t))
(match guix-package
- (('package ('name (? string? name)) _ ...)
- `(define-public ,(string->symbol name)
- ,guix-package))
- (('let anything ('package ('name (? string? name)) _ ...))
- `(define-public ,(string->symbol name)
+ ((or
+ ('package ('name name) ('version version) . rest)
+ ('let _ ('package ('name name) ('version version) . rest)))
+
+ `(define-public ,(string->symbol (if latest
+ name
+ (string-append name "-" version)))
,guix-package))))
(define (build-system-modules)
@@ -414,3 +421,163 @@ dependencies."
step
;; initial state
(step initial-state)))
+
+(define* (recursive-import-semver #:key name
+ (version #f)
+ name->metadata
+ metadata->package
+ metadata-versions
+ package-dependencies
+ dependency-name
+ dependency-range
+ guix-name
+ make-sexp)
+ "Generates a stream of package expressions for the dependencies of the given
+NAME and VERSION. The dependencies will be resolved using semantic versioning.
+This procedure makes the assumption that most package repositories will, for a
+given package provide some <metadata> on that package that includes what
+versions of the package that are available and a list of dependencies for each
+version. Dependencies are assumed to be composed of a NAME, a semantic RANGE and
+other data.
+
+This procedure takes the following keys:
+ NAME - The name of the package to import
+ VERSION - The version of the package to import
+ NAME->METADATA - A procedure that takes a NAME of a package and returns that
+package's <metadata>
+ METADATA->PACKAGE A procedure that takes a package's <metadata> and VERSION
+and returns the <package> for the given VERSION
+ METADATA-VERSIONS A procedure that that takes a packages <metadata> and
+returns a list of version as strings that are available for the given package
+ PACKAGE-DEPENDENCIES a procedure that returns a list of <dependency> given a
+<package>
+ DEPENDENCY-NAME A procedure that takes a <dependency> and returns the its name
+ DEPENDENCY-RANGE A procedure that takes a <dependency> and returns that
+decency's range as a string
+ GUIX-NAME A procedure that take a NAME and returns the Guix version of it
+ MAKE-SEXP A procedure that takes <metadata>, <package> and a list of pairs
+containing (EXPORT-NAME <dependency>), returning the package expression as an
+s-expression"
+ (define mem-name->metadata (memoize name->metadata))
+
+ (define (latest? versions version)
+ (equal? (car versions) version))
+
+ (define (sorted-versions metadata)
+ (sort (metadata-versions metadata) version>?))
+
+ (define (name->versions name)
+ (sorted-versions (mem-name->metadata name)))
+
+ (define (semver-range-contains-string? range version)
+ (semver-range-contains? range
+ (string->semver version)))
+
+ (define (guix-export-name name version)
+ (let ((versions (name->versions name))
+ (name (guix-name name)))
+ (if (latest? versions version)
+ name
+ (string-append name "-" version))))
+
+ ;; checks to see if we already defined or want to define a dep
+ (define (find-known name range known)
+ (match
+ (find
+ (match-lambda ((dep-name version)
+ (and
+ (string=? dep-name name)
+ (semver-range-contains-string? range version))))
+ known)
+
+ (#f #f)
+ ((name version) (list (guix-export-name name version) version #f)))
+ )
+
+ ;; searches searches for a package in guix
+ (define (find-locally name range)
+ (match
+ (find
+ (match-lambda ((_ _ package)
+ (semver-range-contains-string?
+ range
+ (package-version package))))
+ (find-packages-by-name*/direct (guix-name name)))
+ (#f #f)
+ ((_ export-symbol package) (list
+ (symbol->string export-symbol)
+ (package-version package) #f))))
+
+ ;; searches for a package in some external repo
+ (define (find-remote name range)
+ (let* ((versions (name->versions name))
+ (version (find
+ (lambda (ver)
+ (semver-range-contains-string? range ver))
+ versions))
+ (export-name (guix-export-name name version)))
+ `(,export-name ,version #t)))
+
+
+ (define (find-dep-version dep known-deps)
+ (let* ((name (dependency-name dep))
+ (range (string->semver-range (dependency-range dep)))
+ (export-name-version-needed
+ (or (find-known name range known-deps)
+ (find-locally name range)
+ (find-remote name range))))
+ `(,name ,@export-name-version-needed ,dep)
+ ))
+
+ (define (make-package-definition name version known-deps)
+ (let* ((metadata (mem-name->metadata name))
+ (versions (sorted-versions metadata))
+ (package (metadata->package metadata version))
+ (deps (map (lambda (dep)
+ (find-dep-version dep known-deps))
+ (package-dependencies package)))
+ (sexp
+ (make-sexp metadata package
+ (map
+ (match-lambda ((_ export-symbol _ _ dep)
+ (list export-symbol dep)))
+ deps))))
+ (values
+ (package->definition sexp (latest? versions version))
+ (filter-map
+ (match-lambda ((name _ version need? dep)
+ (if need?
+ (list name version)
+ #f)))
+ deps))))
+
+ (define initial-state
+ (list #f
+ (list
+ ;; packages to find
+ (list name (if version
+ version
+ (car (name->versions name)))))
+ ;; packages that have been found
+ (list)))
+
+ (define (step state)
+ (match state
+ ((prev ((next-name next-version) . rest) done)
+ (receive (package dependencies)
+ (make-package-definition next-name next-version
+ (append done rest `((,next-name ,next-version))))
+ (list
+ package
+ (append rest dependencies)
+ (cons (list next-name next-version) done))))
+ ((prev '() done)
+ (list #f '() done))))
+
+ (stream-unfold
+ ;; map: produce a stream element
+ (match-lambda ((latest queue done) latest))
+ ;; predicate
+ (match-lambda ((latest queue done) latest))
+ step
+ (step initial-state)))
diff --git a/tests/import-utils.scm b/tests/import-utils.scm
index c3ab25d788..4ed3a5e1da 100644
--- a/tests/import-utils.scm
+++ b/tests/import-utils.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2017 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
+;;; Copyright © 2016 Martin Becze <mjbecze@riseup.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -24,6 +25,10 @@
#:use-module (guix packages)
#:use-module (guix build-system)
#:use-module (gnu packages)
+ #:use-module (ice-9 match)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-9)
+ #:use-module (srfi srfi-41)
#:use-module (srfi srfi-64))
(test-begin "import-utils")
@@ -120,4 +125,161 @@
("license" . #f))))
(package-native-inputs (alist->package meta))))
+(define-record-type <metadata>
+ (make-metadata name versions)
+ metadata?
+ (name metadata-name)
+ (versions metadata-versions))
+
+(define-record-type <package>
+ (make-package version dependencies)
+ package?
+ (version package-version)
+ (dependencies package-dependencies))
+
+(define-record-type <dependency>
+ (make-dependency name range)
+ dependency?
+ (name dependency-name)
+ (range dependency-range))
+
+(define (metadata-semver-versions metadata)
+ (map (lambda (p)
+ (package-version p))
+ (metadata-versions metadata)))
+
+(define (metadata->package metadata version)
+ (find
+ (lambda (package)
+ (equal? (package-version package) version))
+ (metadata-versions metadata)))
+
+(define (make-sexp metadata package dependencies)
+ `(package
+ (name ,(guix-name (metadata-name metadata)))
+ (version ,(package-version package))
+ (dependcies ,(map
+ (match-lambda ((public-name dep)
+ (list (guix-name (dependency-name dep)) public-name)))
+ dependencies))))
+
+(define (guix-name name)
+ (string-append "test-" name))
+
+(define packages
+ `(("no-deps" . (("1.0.0" . ()) ("0.1.0" . ())))
+ ("one-dep" . (("1.0.0" . (("no-deps" "^1.0")))
+ ("0.1.0" . (("no-deps" "^0.1.0")))))
+ ("shared-dep" . (("1.0.0" . (("one-dep" "^0.1.0")
+ ("no-deps" "*")))))
+ ("recursive" . (("1.0.0" . (("recursive" "=1.0.0")))))
+ ("already-packaged" . (("1.0.0" . (("rust" "~1.28")))))))
+
+(define (name->metadata name)
+ (let ((versions (assoc-ref packages name)))
+ (make-metadata name
+ (map
+ (match-lambda
+ ((version . deps)
+ (make-package version
+ (map
+ (lambda (name-range)
+ (apply make-dependency name-range))
+ deps))))
+ versions))))
+
+(define* (test-recursive-importer name version #:optional (guix-name guix-name))
+ (recursive-import-semver #:name name
+ #:version version
+ #:name->metadata name->metadata
+ #:metadata->package metadata->package
+ #:metadata-versions metadata-semver-versions
+ #:package-dependencies package-dependencies
+ #:dependency-name dependency-name
+ #:dependency-range dependency-range
+ #:guix-name guix-name
+ #:make-sexp make-sexp))
+
+(test-equal "recursive import test with no dependencies"
+ `((define-public test-no-deps
+ (package
+ (name "test-no-deps")
+ (version "1.0.0")
+ (dependcies ()))))
+ (stream->list (test-recursive-importer "no-deps" "1.0.0")))
+
+(test-equal "recursive import test with one dependencies"
+ `((define-public test-one-dep
+ (package
+ (name "test-one-dep")
+ (version "1.0.0")
+ (dependcies (("test-no-deps" "test-no-deps")))))
+ (define-public test-no-deps
+ (package
+ (name "test-no-deps")
+ (version "1.0.0")
+ (dependcies ()))))
+ (stream->list (test-recursive-importer "one-dep" "1.0.0")))
+
+(test-equal "recursive import test with recursuve dependencies"
+ `((define-public test-recursive
+ (package
+ (name "test-recursive")
+ (version "1.0.0")
+ (dependcies (("test-recursive" "test-recursive"))))))
+ (stream->list (test-recursive-importer "recursive" "1.0.0")))
+
+(test-equal "recursive import test with no dependencies using an old version"
+ `((define-public test-no-deps-0.1.0
+ (package
+ (name "test-no-deps")
+ (version "0.1.0")
+ (dependcies ()))))
+ (stream->list (test-recursive-importer "no-deps" "0.1.0")))
+
+(test-equal "recursive import test with one dependencies unsing an old version"
+ `((define-public test-one-dep-0.1.0
+ (package
+ (name "test-one-dep")
+ (version "0.1.0")
+ (dependcies (("test-no-deps" "test-no-deps-0.1.0")))))
+ (define-public test-no-deps-0.1.0
+ (package
+ (name "test-no-deps")
+ (version "0.1.0")
+ (dependcies ()))))
+ (stream->list (test-recursive-importer "one-dep" "0.1.0")))
+
+(test-equal "recursive import test with with dependency that is already in the repo"
+ `((define-public test-already-packaged
+ (package (name "test-already-packaged")
+ (version "1.0.0")
+ (dependcies
+ (("test-rust" "rust-1.28"))))))
+ (stream->list (test-recursive-importer "already-packaged" "1.0.0" identity)))
+
+(test-equal "shared dependencies"
+ `((define-public test-shared-dep
+ (package
+ (name "test-shared-dep")
+ (version "1.0.0")
+ (dependcies (("test-one-dep" "test-one-dep-0.1.0")
+ ("test-no-deps" "test-no-deps")))))
+ (define-public test-one-dep-0.1.0
+ (package
+ (name "test-one-dep")
+ (version "0.1.0")
+ (dependcies (("test-no-deps" "test-no-deps-0.1.0")))))
+ (define-public test-no-deps
+ (package
+ (name "test-no-deps")
+ (version "1.0.0")
+ (dependcies ())))
+ (define-public test-no-deps-0.1.0
+ (package
+ (name "test-no-deps")
+ (version "0.1.0")
+ (dependcies()))))
+ (stream->list (test-recursive-importer "shared-dep" "1.0.0")))
+
(test-end "import-utils")
--
2.24.0
next prev parent reply other threads:[~2019-12-06 18:22 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 ` Martin Becze [this message]
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 ` [bug#38408] [PATCH v17 7/8] import: crate: Trim version for names after left-most non-zero part Hartmut Goebel
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=18d8555e374e1d7682c5f7231be25dd572dacbf0.1575656092.git.mjbecze@riseup.net \
--to=mjbecze@riseup.net \
--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).