Package: guix-patches;
Reported by: Herman Rimm <herman <at> rimm.ee>
Date: Sun, 26 Jan 2025 20:41:01 UTC
Severity: normal
Tags: patch
Done: Ludovic Courtès <ludo <at> gnu.org>
To reply to this bug, email your comments to 75878 AT debbugs.gnu.org.
There is no need to reopen the bug first.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
guix <at> cbaines.net, divya <at> subvertising.org, efraim <at> flashner.co.il, dev <at> jpoiret.xyz, ludo <at> gnu.org, othacehe <at> gnu.org, zimon.toutoune <at> gmail.com, me <at> tobias.gr, guix-patches <at> gnu.org
:bug#75878
; Package guix-patches
.
(Sun, 26 Jan 2025 20:41:01 GMT) Full text and rfc822 format available.Herman Rimm <herman <at> rimm.ee>
:guix <at> cbaines.net, divya <at> subvertising.org, efraim <at> flashner.co.il, dev <at> jpoiret.xyz, ludo <at> gnu.org, othacehe <at> gnu.org, zimon.toutoune <at> gmail.com, me <at> tobias.gr, guix-patches <at> gnu.org
.
(Sun, 26 Jan 2025 20:41:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Herman Rimm <herman <at> rimm.ee> To: guix-patches <at> gnu.org Subject: [PATCH 1/3] scripts: import: crate: show-help: Reformat. Date: Sun, 26 Jan 2025 21:18:28 +0100
* guix/scripts/import/crate.scm (show-help): Reformat and reword --allow-yanked message. Change-Id: I43a50b201be86cd71f6ab51a7161e4009d4918bf --- guix/scripts/import/crate.scm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/guix/scripts/import/crate.scm b/guix/scripts/import/crate.scm index a4adabfeffe..ac11dabaa3b 100644 --- a/guix/scripts/import/crate.scm +++ b/guix/scripts/import/crate.scm @@ -50,10 +50,10 @@ (define (show-help) (display (G_ " --recursive-dev-dependencies include dev-dependencies recursively")) + (newline) (display (G_ " - --allow-yanked - allow importing yanked crates if no alternative - satisfying the version requirement exists")) + --allow-yanked allow importing yanked crates if no alternative + satisfying the version requirement is found")) (newline) (display (G_ " -h, --help display this help and exit")) base-commit: 5481a96417fbf94fc8b6a73abe72a97ce6bc6ec1 -- 2.47.1
guix <at> cbaines.net, divya <at> subvertising.org, efraim <at> flashner.co.il, dev <at> jpoiret.xyz, ludo <at> gnu.org, othacehe <at> gnu.org, maxim.cournoyer <at> gmail.com, zimon.toutoune <at> gmail.com, me <at> tobias.gr, guix-patches <at> gnu.org
:bug#75878
; Package guix-patches
.
(Sun, 26 Jan 2025 20:43:02 GMT) Full text and rfc822 format available.Message #8 received at 75878 <at> debbugs.gnu.org (full text, mbox):
From: Herman Rimm <herman <at> rimm.ee> To: 75878 <at> debbugs.gnu.org Subject: [PATCH 2/3] import: crate: Comment out missing dependencies. Date: Sun, 26 Jan 2025 21:41:16 +0100
* guix/import/crate.scm (package-names->package-inputs): Emit comments. (make-crate-sexp): Make input into comment if missing. (crate->guix-package): Take #:mark-missing? argument. [dependency-name+missing+version+yanked]: Mark as missing. Rename from dependency-name+version+yanked. [sort-map-dependencies]: Adjust. [remove-missing+yanked-info]: Remove missing info. Rename from remove-yanked-info. * guix/scripts/import/crate.scm (show-help): Explain --mark-missing. (%options): Add mark-missing option. (guix-import-crate): Pass mark-missing option as #:mark-missing?. * doc/guix.texi (Invoking guix import): Document --mark-missing. * tests/crate.scm ("crate->guix-package-marks-missing-packages"): Add test. Change-Id: I065d394e1c04fdc332b8f7f8b9fcbd87c14c6512 --- doc/guix.texi | 6 +- guix/import/crate.scm | 41 ++++++++----- guix/scripts/import/crate.scm | 10 +++- tests/crate.scm | 107 ++++++++++++++++++++++++++-------- 4 files changed, 123 insertions(+), 41 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 9a53bdcd374..f7d408a234b 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -124,7 +124,7 @@ Copyright @copyright{} 2023 Saku Laesvuori@* Copyright @copyright{} 2023 Graham James Addis@* Copyright @copyright{} 2023, 2024 Tomas Volf@* -Copyright @copyright{} 2024 Herman Rimm@* +Copyright @copyright{} 2024, 2025 Herman Rimm@* Copyright @copyright{} 2024 Matthew Trzcinski@* Copyright @copyright{} 2024 Richard Sent@* Copyright @copyright{} 2024 Dariqq@* @@ -14679,6 +14679,10 @@ Invoking guix import @item --allow-yanked If no non-yanked version of a crate is available, use the latest yanked version instead instead of aborting. +@item --mark-missing +If a crate dependency is not (yet) packaged, make the corresponding +input in @code{#:cargo-inputs} or @code{#:cargo-development-inputs} into +a comment. @end table @item elm diff --git a/guix/import/crate.scm b/guix/import/crate.scm index d790126ef6e..cb39f43c4a1 100644 --- a/guix/import/crate.scm +++ b/guix/import/crate.scm @@ -156,6 +156,7 @@ (define* (package-names->package-inputs names #:optional (output #f)) (map (match-lambda ((input version) (make-input input version)) + ((? blank? comment) comment) (input (make-input input #f))) names)) @@ -194,11 +195,16 @@ (define* (make-crate-sexp #:key name version cargo-inputs cargo-development-inpu (define (format-inputs inputs) (map (match-lambda - ((name version yanked) - (list (crate-name->package-name name) - (if yanked - (string-append version "-yanked") - (version->semver-prefix version))))) + ((name missing version yanked) + (let ((input (list (crate-name->package-name name) + (if yanked + (string-append version "-yanked") + (version->semver-prefix version))))) + (if missing + (comment + (string-append ";; " (string-join input "-") "\n") + #f) + input)))) inputs)) (let* ((port (http-fetch (crate-uri name version))) @@ -318,7 +324,8 @@ (define (find-package-version name range allow-yanked?) (define* (crate->guix-package crate-name - #:key version include-dev-deps? allow-yanked? #:allow-other-keys) + #:key version include-dev-deps? allow-yanked? mark-missing? + #: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, convert it into a semver range and attempt to fetch @@ -358,13 +365,13 @@ (define* (crate->guix-package ;; If no non-yanked existing package version was found, check the upstream ;; versions. If a non-yanked upsteam version exists, use it instead, ;; otherwise use the existing package version, provided it exists. - (define (dependency-name+version+yanked dep) + (define (dependency-name+missing+version+yanked dep) (let* ((name (crate-dependency-id dep)) (req (crate-dependency-requirement dep)) (existing-version (find-package-version name req allow-yanked?))) (if (and existing-version (not (second existing-version))) - (cons name existing-version) + (cons* name #f existing-version) (let* ((crate (lookup-crate* name)) (ver (find-crate-version crate req))) (if existing-version @@ -374,14 +381,15 @@ (define* (crate->guix-package (begin (warning (G_ "~A: version ~a is no longer yanked~%") name (first existing-version)) - (cons name existing-version)) + (cons* name #f existing-version)) (list name + #f (crate-version-number ver) (crate-version-yanked? ver))) (begin (warning (G_ "~A: using existing version ~a, which was yanked~%") name (first existing-version)) - (cons name existing-version))) + (cons* name #f existing-version))) (begin (unless ver (leave (G_ "~A: no version found for requirement ~a~%") name req)) @@ -389,6 +397,7 @@ (define* (crate->guix-package (warning (G_ "~A: imported version ~a was yanked~%") name (crate-version-number ver))) (list name + mark-missing? (crate-version-number ver) (crate-version-yanked? ver)))))))) @@ -400,14 +409,14 @@ (define* (crate->guix-package ;; sort and map the dependencies to a list containing ;; pairs of (name version) (define (sort-map-dependencies deps) - (sort (map dependency-name+version+yanked + (sort (map dependency-name+missing+version+yanked deps) - (match-lambda* (((name _ _) ...) + (match-lambda* (((name _ _ _) ...) (apply string-ci<? name))))) - (define (remove-yanked-info deps) + (define (remove-missing+yanked-info deps) (map - (match-lambda ((name version yanked) + (match-lambda ((name missing version yanked) (list name version))) deps)) @@ -438,8 +447,8 @@ (define* (crate->guix-package #:license (and=> (crate-version-license version*) string->license)) (append - (remove-yanked-info cargo-inputs) - (remove-yanked-info cargo-development-inputs)))) + (remove-missing+yanked-info cargo-inputs) + (remove-missing+yanked-info cargo-development-inputs)))) (values #f '()))) (define* (crate-recursive-import diff --git a/guix/scripts/import/crate.scm b/guix/scripts/import/crate.scm index ac11dabaa3b..9d403ce0ec0 100644 --- a/guix/scripts/import/crate.scm +++ b/guix/scripts/import/crate.scm @@ -5,6 +5,7 @@ ;;; Copyright © 2021 Sarah Morgensen <iskarian <at> mgsn.dev> ;;; Copyright © 2023 Simon Tournier <zimon.toutoune <at> gmail.com> ;;; Copyright © 2023 David Elsing <david.elsing <at> posteo.net> +;;; Copyright © 2025 Herman Rimm <herman <at> rimm.ee> ;;; ;;; This file is part of GNU Guix. ;;; @@ -54,6 +55,9 @@ (define (show-help) (display (G_ " --allow-yanked allow importing yanked crates if no alternative satisfying the version requirement is found")) + (display (G_ " + --mark-missing comment out the desired dependency if no + sufficient package exists for it.")) (newline) (display (G_ " -h, --help display this help and exit")) @@ -80,6 +84,9 @@ (define %options (option '("allow-yanked") #f #f (lambda (opt name arg result) (alist-cons 'allow-yanked #t result))) + (option '("mark-missing") #f #f + (lambda (opt name arg result) + (alist-cons 'mark-missing #t result))) %standard-import-options)) @@ -112,7 +119,8 @@ (define (guix-import-crate . args) #:allow-yanked? (assoc-ref opts 'allow-yanked)) (crate->guix-package name #:version version #:include-dev-deps? #t - #:allow-yanked? (assoc-ref opts 'allow-yanked))) + #:allow-yanked? (assoc-ref opts 'allow-yanked) + #:mark-missing? (assoc-ref opts 'mark-missing))) ((or #f '()) (leave (G_ "failed to download meta-data for package '~a'~%") (if version diff --git a/tests/crate.scm b/tests/crate.scm index 02b708f9d9a..2f1c37633c9 100644 --- a/tests/crate.scm +++ b/tests/crate.scm @@ -5,6 +5,7 @@ ;;; Copyright © 2020 Martin Becze <mjbecze <at> riseup.net> ;;; Copyright © 2023, 2025 Efraim Flashner <efraim <at> flashner.co.il> ;;; Copyright © 2023 David Elsing <david.elsing <at> posteo.net> +;;; Copyright © 2025 Herman Rimm <herman <at> rimm.ee> ;;; ;;; This file is part of GNU Guix. ;;; @@ -446,6 +447,29 @@ (define test-source-hash (define have-guile-semver? (false-if-exception (resolve-interface '(semver)))) +(define rust-leaf-bob-3 + (package + (name "rust-leaf-bob") + (version "3.0.1") + (source #f) + (build-system #f) + (home-page #f) + (synopsis #f) + (description #f) + (license #f))) + +(define rust-leaf-bob-3.0.2-yanked + (package + (name "rust-leaf-bob") + (version "3.0.2") + (source #f) + (properties '((crate-version-yanked? . #t))) + (build-system #f) + (home-page #f) + (synopsis #f) + (description #f) + (license #f))) + (test-begin "crate") @@ -510,6 +534,66 @@ (define have-guile-semver? (x (pk 'fail x #f))))) +(unless have-guile-semver? (test-skip 1)) +(test-assert "crate->guix-package-marks-missing-packages" + (mock + ((gnu packages) find-packages-by-name + (lambda* (name #:optional version) + (match name + ("rust-leaf-bob" + (list rust-leaf-bob-3.0.2-yanked)) + (_ '())))) + (mock + ((guix http-client) http-fetch + (lambda (url . rest) + (match url + ("https://crates.io/api/v1/crates/intermediate-b" + (open-input-string test-intermediate-b-crate)) + ("https://crates.io/api/v1/crates/intermediate-b/1.2.3/download" + (set! test-source-hash + (bytevector->nix-base32-string + (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8")))) + (open-input-string "empty file\n")) + ("https://crates.io/api/v1/crates/intermediate-b/1.2.3/dependencies" + (open-input-string test-intermediate-b-dependencies)) + ("https://crates.io/api/v1/crates/leaf-bob" + (open-input-string test-leaf-bob-crate)) + ("https://crates.io/api/v1/crates/leaf-bob/3.0.1/download" + (set! test-source-hash + (bytevector->nix-base32-string + (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8")))) + (open-input-string "empty file\n")) + (_ (error "Unexpected URL: " url))))) + (match (crate->guix-package "intermediate-b" #:mark-missing? #t) + ((define-public 'rust-intermediate-b-1 + (package + (name "rust-intermediate-b") + (version "1.2.3") + (source + (origin + (method url-fetch) + (uri (crate-uri "intermediate-b" version)) + (file-name + (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + (? string? hash))))) + (build-system cargo-build-system) + (arguments + ('quasiquote + (#:skip-build? #t + #:cargo-inputs + (($ <comment> ";; rust-leaf-bob-3\n" #f))))) + (home-page "http://example.com") + (synopsis "summary") + (description "This package provides summary.") + (license (list license:expat license:asl2.0)))) + #t) + (x + (pk 'fail + (pretty-print-with-comments (current-output-port) x) + #f)))))) + (unless have-guile-semver? (test-skip 1)) (test-assert "crate-recursive-import" ;; Replace network resources with sample data. @@ -883,29 +967,6 @@ (define have-guile-semver? -(define rust-leaf-bob-3 - (package - (name "rust-leaf-bob") - (version "3.0.1") - (source #f) - (build-system #f) - (home-page #f) - (synopsis #f) - (description #f) - (license #f))) - -(define rust-leaf-bob-3.0.2-yanked - (package - (name "rust-leaf-bob") - (version "3.0.2") - (source #f) - (properties '((crate-version-yanked? . #t))) - (build-system #f) - (home-page #f) - (synopsis #f) - (description #f) - (license #f))) - (unless have-guile-semver? (test-skip 1)) (test-assert "crate-recursive-import-honors-existing-packages" (mock -- 2.47.1
divya <at> subvertising.org, efraim <at> flashner.co.il, guix-patches <at> gnu.org
:bug#75878
; Package guix-patches
.
(Sun, 26 Jan 2025 20:43:02 GMT) Full text and rfc822 format available.Message #11 received at 75878 <at> debbugs.gnu.org (full text, mbox):
From: Herman Rimm <herman <at> rimm.ee> To: 75878 <at> debbugs.gnu.org Subject: [PATCH 3/3] tests: crate: Add build dependency. Date: Sun, 26 Jan 2025 21:41:17 +0100
* tests/crate.scm ("crate-recursive-import"): Add rust-leaf-bob-3 to rust-root-1 cargo-inputs. (test-root-dependencies): Add leaf-bob 3 build dependency. Change-Id: I1285fc6b36429f754d54def0b14f821306ba366d --- tests/crate.scm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/crate.scm b/tests/crate.scm index 2f1c37633c9..d0dc779cd2f 100644 --- a/tests/crate.scm +++ b/tests/crate.scm @@ -53,6 +53,7 @@ (define-module (test-crate) ;; intermediate-b ^1.0.0 ;; leaf-alice ^0.7 ;; leaf-bob ^3 +;; leaf-bob 3 (build-dependency) ;; intermediate-c 1 (dev-dependency) ;; ;; intermediate-a-1.0.40 @@ -224,6 +225,11 @@ (define test-root-dependencies \"kind\": \"normal\", \"req\": \"^3\" }, + { + \"crate_id\": \"leaf-bob\", + \"kind\": \"build\", + \"req\": \"3\" + }, { \"crate_id\": \"intermediate-c\", \"kind\": \"dev\", @@ -932,6 +938,8 @@ (define rust-leaf-bob-3.0.2-yanked ('unquote rust-intermediate-b-1)) ("rust-leaf-alice" ('unquote 'rust-leaf-alice-0.7)) + ("rust-leaf-bob" + ('unquote rust-leaf-bob-3)) ("rust-leaf-bob" ('unquote rust-leaf-bob-3))) #:cargo-development-inputs -- 2.47.1
Ludovic Courtès <ludo <at> gnu.org>
:Herman Rimm <herman <at> rimm.ee>
:Message #16 received at 75878-done <at> debbugs.gnu.org (full text, mbox):
From: Ludovic Courtès <ludo <at> gnu.org> To: Herman Rimm <herman <at> rimm.ee> Cc: Josselin Poiret <dev <at> jpoiret.xyz>, Simon Tournier <zimon.toutoune <at> gmail.com>, Mathieu Othacehe <othacehe <at> gnu.org>, Tobias Geerinckx-Rice <me <at> tobias.gr>, Efraim Flashner <efraim <at> flashner.co.il>, 75878-done <at> debbugs.gnu.org, Divya Ranjan Pattanaik <divya <at> subvertising.org>, Christopher Baines <guix <at> cbaines.net> Subject: Re: [bug#75878] [PATCH 1/3] scripts: import: crate: show-help: Reformat. Date: Sun, 09 Feb 2025 16:29:50 +0100
Hi Herman, Applied all three patches, thanks! Ludo’.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.