diff options
| author | Hilton Chain <hako@ultrarare.space> | 2025-06-09 18:35:27 +0800 |
|---|---|---|
| committer | Hilton Chain <hako@ultrarare.space> | 2025-08-21 19:09:04 +0800 |
| commit | 92d130e03594bd2b8e6688c83fc35a3f2c2954da (patch) | |
| tree | c2dcc0d09edd789a9b4308c34a82eb0ab3e61642 /tests | |
| parent | efaa3e681ef14ac5e0900319557a21fb421b2053 (diff) | |
import: crate: Stop importing dependencies from crates.io.
* guix/scripts/import/crate.scm (show-help, %options, guix-import-crate)
[--recursive, --recursive-dev-dependencies, --mark-missing]: Remove options.
* doc/guix.texi (Invoking guix import)[crate]: Adjust accordingly.
Mention packaging workflow.
* guix/import/crate.scm (make-crate-sexp): Don't use "rust-" prefix and semver
suffix for package name.
[#:cargo-inputs, #:cargo-development-inputs, #:build?]: Remove arguments.
(crate->guix-package)[#:include-dev-deps?, #:mark-missing?]: Remove arguments.
(<crate-dependency>): Remove data type.
(make-crate-dependency, crate-dependency?, json->crate-dependency)
(crate-version-dependencies, package-names->package-inputs)
(maybe-cargo-inputs, maybe-cargo-development-inputs, maybe-arguments)
(version->semver-prefix, find-package-version, crate-recursive-import): Remove
procedures.
* tests/crate.scm (test-foo-crate, test-bar-crate): Adjust for modified tests.
(test-foo-dependencies, test-bar-dependencies, test-root-crate)
(test-root-dependencies, test-intermediate-a-crate)
(test-intermediate-a-dependencies, test-intermediate-b-crate)
(test-intermediate-b-dependencies, test-intermediate-c-crate)
(test-intermediate-c-dependencies, test-leaf-alice-crate)
(test-leaf-alice-dependencies, test-leaf-bob-crate)
(test-leaf-bob-dependencies, rust-leaf-bob-3, rust-leaf-bob-3.0.2-yanked):
Remove variables.
("crate->guix-package yanked", "crate->guix-package only yanked available"): New
tests.
("crate->guix-package"): Adjust accordingly.
("crate->guix-package-marks-missing-packages", "crate-recursive-import")
("crate-recursive-import-honors-existing-packages")
("crate-import-only-yanked-available"): Remove tests.
Change-Id: Ib1d24511ed0ea1a2373f53de12e06afa7950a7d7
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/crate.scm | 1116 |
1 files changed, 93 insertions, 1023 deletions
diff --git a/tests/crate.scm b/tests/crate.scm index 8c1f6e738db..b5599e5d482 100644 --- a/tests/crate.scm +++ b/tests/crate.scm @@ -37,51 +37,10 @@ #:use-module (srfi srfi-11) #:use-module (srfi srfi-64)) - -;; crate versions and dependencies used here -;; foo-0.8.1 -;; foo-1.0.0 -;; foo-1.0.3 -;; leaf-alice 0.7.5 -;; bar-1.0.0 -;; leaf-bob 3.0.1 -;; leaf-bob 3.0.2 (dev-dependency) -;; leaf-bob 4.0.0 (dev-dependency) -;; -;; root-1.0.0 -;; root-1.0.4 -;; intermediate-a 1.0.42 -;; 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 -;; intermediate-a-1.0.42 -;; intermediate-a-1.1.0-alpha.1 -;; intermediate-a 1.2.3 -;; leaf-alice 0.7.5 -;; leaf-bob ^3 -;; -;; intermediate-b-1.2.3 -;; leaf-bob 3.0.1 -;; -;; intermediate-c-1.0.1 -;; leaf-alice 0.7.5 (dev-dependency) -;; -;; leaf-alice-0.7.3 -;; leaf-alice-0.7.5 -;; -;; leaf-bob-3.0.1 -;; leaf-bob-3.0.2 (yanked) -;; leaf-bob-4.0.0 (yanked) - - (define test-foo-crate "{ \"crate\": { - \"max_version\": \"1.0.3\", + \"max_version\": \"1.0.0\", \"name\": \"foo\", \"description\": \"summary\", \"homepage\": \"http://example.com\", @@ -111,23 +70,12 @@ \"links\": { \"dependencies\": \"/api/v1/crates/foo/1.0.3/dependencies\" }, - \"yanked\": false + \"yanked\": true } ] } }") -(define test-foo-dependencies - "{ - \"dependencies\": [ - { - \"crate_id\": \"leaf-alice\", - \"kind\": \"normal\", - \"req\": \"0.7.5\" - } - ] -}") - (define test-bar-crate "{ \"crate\": { @@ -145,338 +93,18 @@ \"links\": { \"dependencies\": \"/api/v1/crates/bar/1.0.0/dependencies\" }, - \"yanked\": false - } - ] - } -}") - -(define test-bar-dependencies - "{ - \"dependencies\": [ - { - \"crate_id\": \"leaf-bob\", - \"kind\": \"normal\", - \"req\": \"3.0.1\" - }, - { - \"crate_id\": \"leaf-bob\", - \"kind\": \"dev\", - \"req\": \"^3.0.2\" - }, - { - \"crate_id\": \"leaf-bob\", - \"kind\": \"dev\", - \"req\": \"^4.0.0\" - } - ] -}") - -(define test-root-crate - "{ - \"crate\": { - \"max_version\": \"1.0.4\", - \"name\": \"root\", - \"description\": \"summary\", - \"homepage\": \"http://example.com\", - \"repository\": \"http://example.com\", - \"keywords\": [\"dummy\", \"test\"], - \"categories\": [\"test\"], - \"actual_versions\": [ - { \"id\": 234240, - \"num\": \"1.0.0\", - \"license\": \"MIT OR Apache-2.0\", - \"links\": { - \"dependencies\": \"/api/v1/crates/root/1.0.0/dependencies\" - }, - \"yanked\": false - }, - { \"id\": 234242, - \"num\": \"1.0.4\", - \"license\": \"MIT OR Apache-2.0\", - \"links\": { - \"dependencies\": \"/api/v1/crates/root/1.0.4/dependencies\" - }, - \"yanked\": false - } - ] - } -}") - -(define test-root-dependencies - "{ - \"dependencies\": [ - { - \"crate_id\": \"intermediate-a\", - \"kind\": \"normal\", - \"req\": \"1.0.42\" - }, - { - \"crate_id\": \"intermediate-b\", - \"kind\": \"normal\", - \"req\": \"^1.0.0\" - }, - { - \"crate_id\": \"leaf-alice\", - \"kind\": \"normal\", - \"req\": \"^0.7\" - }, - { - \"crate_id\": \"leaf-bob\", - \"kind\": \"normal\", - \"req\": \"^3\" - }, - { - \"crate_id\": \"leaf-bob\", - \"kind\": \"build\", - \"req\": \"3\" - }, - { - \"crate_id\": \"intermediate-c\", - \"kind\": \"dev\", - \"req\": \"1\" - } - ] -}") - -(define test-intermediate-a-crate - "{ - \"crate\": { - \"max_version\": \"1.1.0-alpha.1\", - \"name\": \"intermediate-a\", - \"description\": \"summary\", - \"homepage\": \"http://example.com\", - \"repository\": \"http://example.com\", - \"keywords\": [\"dummy\", \"test\"], - \"categories\": [\"test\"], - \"actual_versions\": [ - { \"id\": 234251, - \"num\": \"1.0.40\", - \"license\": \"MIT OR Apache-2.0\", - \"links\": { - \"dependencies\": \"/api/v1/crates/intermediate-a/1.0.40/dependencies\" - }, - \"yanked\": false - }, - { \"id\": 234250, - \"num\": \"1.0.42\", - \"license\": \"MIT OR Apache-2.0\", - \"links\": { - \"dependencies\": \"/api/v1/crates/intermediate-a/1.0.42/dependencies\" - }, - \"yanked\": false - }, - { \"id\": 234252, - \"num\": \"1.1.0-alpha.1\", - \"license\": \"MIT OR Apache-2.0\", - \"links\": { - \"dependencies\": \"/api/v1/crates/intermediate-a/1.1.0-alpha.1/dependencies\" - }, - \"yanked\": false - } - ] - } -}") - -(define test-intermediate-a-dependencies - "{ - \"dependencies\": [ - { - \"crate_id\": \"intermediate-b\", - \"kind\": \"normal\", - \"req\": \"1.2.3\" - }, - { - \"crate_id\": \"leaf-alice\", - \"kind\": \"normal\", - \"req\": \"0.7.5\" - }, - { - \"crate_id\": \"leaf-bob\", - \"kind\": \"normal\", - \"req\": \"^3\" - } - ] -}") - -(define test-intermediate-b-crate - "{ - \"crate\": { - \"max_version\": \"1.2.3\", - \"name\": \"intermediate-b\", - \"description\": \"summary\", - \"homepage\": \"http://example.com\", - \"repository\": \"http://example.com\", - \"keywords\": [\"dummy\", \"test\"], - \"categories\": [\"test\"], - \"actual_versions\": [ - { \"id\": 234260, - \"num\": \"1.2.3\", - \"license\": \"MIT OR Apache-2.0\", - \"links\": { - \"dependencies\": \"/api/v1/crates/intermediate-b/1.2.3/dependencies\" - }, - \"yanked\": false - } - ] - } -}") - -(define test-intermediate-b-dependencies - "{ - \"dependencies\": [ - { - \"crate_id\": \"leaf-bob\", - \"kind\": \"normal\", - \"req\": \"3.0.1\" - } - ] -}") - -(define test-intermediate-c-crate - "{ - \"crate\": { - \"max_version\": \"1.0.1\", - \"name\": \"intermediate-c\", - \"description\": \"summary\", - \"homepage\": \"http://example.com\", - \"repository\": \"http://example.com\", - \"keywords\": [\"dummy\", \"test\"], - \"categories\": [\"test\"], - \"actual_versions\": [ - { \"id\": 234290, - \"num\": \"1.0.1\", - \"license\": \"MIT OR Apache-2.0\", - \"links\": { - \"dependencies\": \"/api/v1/crates/intermediate-c/1.0.1/dependencies\" - }, - \"yanked\": false - } - ] - } -}") - -(define test-intermediate-c-dependencies - "{ - \"dependencies\": [ - { - \"crate_id\": \"leaf-alice\", - \"kind\": \"dev\", - \"req\": \"0.7.5\" - } - ] -}") - -(define test-leaf-alice-crate - "{ - \"crate\": { - \"max_version\": \"0.7.5\", - \"name\": \"leaf-alice\", - \"description\": \"summary\", - \"homepage\": \"http://example.com\", - \"repository\": \"http://example.com\", - \"keywords\": [\"dummy\", \"test\"], - \"categories\": [\"test\"], - \"actual_versions\": [ - { \"id\": 234270, - \"num\": \"0.7.3\", - \"license\": \"MIT OR Apache-2.0\", - \"links\": { - \"dependencies\": \"/api/v1/crates/leaf-alice/0.7.3/dependencies\" - }, - \"yanked\": false - }, - { \"id\": 234272, - \"num\": \"0.7.5\", - \"license\": \"MIT OR Apache-2.0\", - \"links\": { - \"dependencies\": \"/api/v1/crates/leaf-alice/0.7.5/dependencies\" - }, - \"yanked\": false - } - ] - } -}") - -(define test-leaf-alice-dependencies - "{ - \"dependencies\": [] -}") - -(define test-leaf-bob-crate - "{ - \"crate\": { - \"max_version\": \"3.0.1\", - \"name\": \"leaf-bob\", - \"description\": \"summary\", - \"homepage\": \"http://example.com\", - \"repository\": \"http://example.com\", - \"keywords\": [\"dummy\", \"test\"], - \"categories\": [\"test\"] - \"actual_versions\": [ - { \"id\": 234280, - \"num\": \"3.0.1\", - \"license\": \"MIT OR Apache-2.0\", - \"links\": { - \"dependencies\": \"/api/v1/crates/leaf-bob/3.0.1/dependencies\" - }, - \"yanked\": false - }, - { \"id\": 234281, - \"num\": \"3.0.2\", - \"license\": \"MIT OR Apache-2.0\", - \"links\": { - \"dependencies\": \"/api/v1/crates/leaf-bob/3.0.2/dependencies\" - }, - \"yanked\": true - }, - { \"id\": 234282, - \"num\": \"4.0.0\", - \"license\": \"MIT OR Apache-2.0\", - \"links\": { - \"dependencies\": \"/api/v1/crates/leaf-bob/4.0.0/dependencies\" - }, \"yanked\": true } ] } }") -(define test-leaf-bob-dependencies - "{ - \"dependencies\": [] -}") - - (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))) - (define temp-file (string-append "t-crate-" (number->string (getpid)))) @@ -491,7 +119,7 @@ (source (dummy-origin (uri (crate-uri "rustc-serialize" "1.0"))))))) -(unless have-guile-semver? (test-skip 1)) +(unless have-guile-semver? (test-skip 3)) (test-assert "crate->guix-package" ;; Replace network resources with sample data. (mock ((guix http-client) http-fetch @@ -499,463 +127,110 @@ (match url ("https://crates.io/api/v1/crates/foo" (open-input-string test-foo-crate)) - ("https://crates.io/api/v1/crates/foo/1.0.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/foo/1.0.3/dependencies" - (open-input-string test-foo-dependencies)) - ("https://crates.io/api/v1/crates/leaf-alice" - (open-input-string test-leaf-alice-crate)) - ("https://crates.io/api/v1/crates/leaf-alice/0.7.5/download" + ("https://crates.io/api/v1/crates/foo/1.0.0/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/leaf-alice/0.7.5/dependencies" - (open-input-string test-leaf-alice-dependencies)) (_ (error "Unexpected URL: " url))))) (match (crate->guix-package "foo") - ((define-public 'rust-foo-1 - (package (name "rust-foo") - (version "1.0.3") - (source - (origin - (method url-fetch) - (uri (crate-uri "foo" '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 - (("rust-leaf-alice" ('unquote 'rust-leaf-alice-0.7)))))) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0)))) + (`(define-public foo + (package (name "foo") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (crate-uri "foo" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + ,(? string? hash))))) + (build-system cargo-build-system) + (inputs (cargo-inputs 'foo)) + (home-page "http://example.com") + (synopsis "summary") + (description "This package provides summary.") + (license (list license:expat license:asl2.0)))) (string=? test-source-hash hash)) (x (pk 'fail x #f))))) -(unless have-guile-semver? (test-skip 1)) -(test-assert "crate->guix-package-marks-missing-packages" +(test-assert "crate->guix-package yanked" (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)))))) + ((guix http-client) http-fetch + (lambda (url . rest) + (match url + ("https://crates.io/api/v1/crates/foo" + (open-input-string test-foo-crate)) + ("https://crates.io/api/v1/crates/foo/1.0.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")) + (_ (error "Unexpected URL: " url))))) -(unless have-guile-semver? (test-skip 1)) -(test-assert "crate-recursive-import" - ;; Replace network resources with sample data. - (mock ((guix http-client) http-fetch - (lambda (url . rest) - (match url - ("https://crates.io/api/v1/crates/root" - (open-input-string test-root-crate)) - ("https://crates.io/api/v1/crates/root/1.0.4/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/root/1.0.4/dependencies" - (open-input-string test-root-dependencies)) - ("https://crates.io/api/v1/crates/intermediate-a" - (open-input-string test-intermediate-a-crate)) - ("https://crates.io/api/v1/crates/intermediate-a/1.0.42/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-a/1.0.42/dependencies" - (open-input-string test-intermediate-a-dependencies)) - ("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/intermediate-c" - (open-input-string test-intermediate-c-crate)) - ("https://crates.io/api/v1/crates/intermediate-c/1.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")) - ("https://crates.io/api/v1/crates/intermediate-c/1.0.1/dependencies" - (open-input-string test-intermediate-c-dependencies)) - ("https://crates.io/api/v1/crates/leaf-alice" - (open-input-string test-leaf-alice-crate)) - ("https://crates.io/api/v1/crates/leaf-alice/0.7.5/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/leaf-alice/0.7.5/dependencies" - (open-input-string test-leaf-alice-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")) - ("https://crates.io/api/v1/crates/leaf-bob/3.0.1/dependencies" - (open-input-string test-leaf-bob-dependencies)) - (_ (error "Unexpected URL: " url))))) - (match (crate-recursive-import "root") - ;; rust-intermediate-b has no dependency on the rust-leaf-alice - ;; package, so this is a valid ordering - (((define-public 'rust-intermediate-c-1 - (package - (name "rust-intermediate-c") - (version "1.0.1") - (source - (origin - (method url-fetch) - (uri (crate-uri "intermediate-c" version)) - (file-name - (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - (? string? hash))))) - (build-system cargo-build-system) - (arguments - ('quasiquote (#:skip-build? #t))) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0)))) - (define-public 'rust-leaf-alice-0.7 - (package - (name "rust-leaf-alice") - (version "0.7.5") - (source - (origin - (method url-fetch) - (uri (crate-uri "leaf-alice" version)) - (file-name - (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - (? string? hash))))) - (build-system cargo-build-system) - (arguments ('quasiquote (#:skip-build? #t))) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0)))) - (define-public 'rust-leaf-bob-3 - (package - (name "rust-leaf-bob") - (version "3.0.1") - (source - (origin - (method url-fetch) - (uri (crate-uri "leaf-bob" version)) - (file-name - (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - (? string? hash))))) - (build-system cargo-build-system) - (arguments ('quasiquote (#:skip-build? #t))) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0)))) - (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 - (("rust-leaf-bob" - ('unquote rust-leaf-bob-3)))))) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0)))) - (define-public 'rust-intermediate-a-1 - (package - (name "rust-intermediate-a") - (version "1.0.42") - (source - (origin - (method url-fetch) - (uri (crate-uri "intermediate-a" 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 - (("rust-intermediate-b" - ('unquote rust-intermediate-b-1)) - ("rust-leaf-alice" - ('unquote 'rust-leaf-alice-0.7)) - ("rust-leaf-bob" - ('unquote rust-leaf-bob-3)))))) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0)))) - (define-public 'rust-root-1 - (package - (name "rust-root") - (version "1.0.4") - (source - (origin - (method url-fetch) - (uri (crate-uri "root" version)) - (file-name - (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - (? string? hash))))) - (build-system cargo-build-system) - (arguments - ('quasiquote (#:cargo-inputs - (("rust-intermediate-a" - ('unquote rust-intermediate-a-1)) - ("rust-intermediate-b" - ('unquote rust-intermediate-b-1)) - ("rust-leaf-alice" - ('unquote 'rust-leaf-alice-0.7)) - ("rust-leaf-bob" - ('unquote rust-leaf-bob-3))) - #:cargo-development-inputs - (("rust-intermediate-c" - ('unquote rust-intermediate-c-1)))))) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0))))) - #t) - (x - (pk 'fail x #f))) - (match (crate-recursive-import "root" - #:recursive-dev-dependencies? #t) - ;; rust-intermediate-b has no dependency on the rust-leaf-alice - ;; package, so this is a valid ordering - (((define-public 'rust-intermediate-c-1 - (package - (name "rust-intermediate-c") - (version "1.0.1") - (source - (origin - (method url-fetch) - (uri (crate-uri "intermediate-c" version)) - (file-name - (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - (? string? hash))))) - (build-system cargo-build-system) - (arguments - ('quasiquote (#:cargo-development-inputs - (("rust-leaf-alice" - ('unquote rust-leaf-alice-0.7)))))) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0)))) - (define-public 'rust-leaf-alice-0.7 - (package - (name "rust-leaf-alice") - (version "0.7.5") - (source - (origin - (method url-fetch) - (uri (crate-uri "leaf-alice" version)) - (file-name - (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - (? string? hash))))) - (build-system cargo-build-system) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0)))) - (define-public 'rust-leaf-bob-3 - (package - (name "rust-leaf-bob") - (version "3.0.1") - (source - (origin - (method url-fetch) - (uri (crate-uri "leaf-bob" version)) - (file-name - (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - (? string? hash))))) - (build-system cargo-build-system) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0)))) - (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 (#:cargo-inputs - (("rust-leaf-bob" - ('unquote rust-leaf-bob-3)))))) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0)))) - (define-public 'rust-intermediate-a-1 - (package - (name "rust-intermediate-a") - (version "1.0.42") - (source - (origin - (method url-fetch) - (uri (crate-uri "intermediate-a" version)) - (file-name - (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - (? string? hash))))) - (build-system cargo-build-system) - (arguments - ('quasiquote (#:cargo-inputs - (("rust-intermediate-b" - ('unquote rust-intermediate-b-1)) - ("rust-leaf-alice" - ('unquote 'rust-leaf-alice-0.7)) - ("rust-leaf-bob" - ('unquote rust-leaf-bob-3)))))) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0)))) - (define-public 'rust-root-1 - (package - (name "rust-root") - (version "1.0.4") - (source - (origin - (method url-fetch) - (uri (crate-uri "root" version)) - (file-name - (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - (? string? hash))))) - (build-system cargo-build-system) - (arguments - ('quasiquote (#:cargo-inputs - (("rust-intermediate-a" - ('unquote rust-intermediate-a-1)) - ("rust-intermediate-b" - ('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 - (("rust-intermediate-c" - ('unquote rust-intermediate-c-1)))))) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0))))) - #t) - (x - (pk 'fail x #f))))) + (match (crate->guix-package "foo" #:version "1.0.3" #:allow-yanked? #t) + (`(define-public foo + (package (name "foo") + (version "1.0.3") + ,(? comment?) + (source + (origin + (method url-fetch) + (uri (crate-uri "foo" version)) + (file-name (string-append name "-" version "-yanked.tar.gz")) + (sha256 + (base32 + ,(? string? hash))))) + (properties '((crate-version-yanked? . #t))) + (build-system cargo-build-system) + (inputs (cargo-inputs 'foo)) + (home-page "http://example.com") + (synopsis "summary") + (description "This package provides summary.") + (license (list license:expat license:asl2.0)))) + (string=? test-source-hash hash)) + (x + (pk 'fail x #f))))) + +(test-assert "crate->guix-package only yanked available" + (mock + ((guix http-client) http-fetch + (lambda (url . rest) + (match url + ("https://crates.io/api/v1/crates/bar" + (open-input-string test-foo-crate)) + ("https://crates.io/api/v1/crates/bar/1.0.0/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 "bar") + (`(define-public bar + (package (name "bar") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (crate-uri "bar" version)) + (file-name + (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + ,(? string? hash))))) + (build-system cargo-build-system) + (inputs (cargo-inputs 'bar)) + (home-page "http://example.com") + (synopsis "summary") + (description "This package provides summary.") + (license (list license:expat license:asl2.0)))) + (string=? test-source-hash hash)) + (x + (pk 'fail x #f))))) (test-equal "licenses: MIT OR Apache-2.0" '(license:expat license:asl2.0) @@ -977,211 +252,6 @@ '(license:expat license:asl2.0) (string->license "MIT/Apache-2.0")) - - -(unless have-guile-semver? (test-skip 1)) -(test-assert "crate-recursive-import-honors-existing-packages" - (mock - ((gnu packages) find-packages-by-name - (lambda* (name #:optional version) - (match name - ("rust-leaf-bob" - (list rust-leaf-bob-3 rust-leaf-bob-3.0.2-yanked)) - (_ '())))) - (mock - ((guix http-client) http-fetch - (lambda (url . rest) - (match url - ("https://crates.io/api/v1/crates/bar" - (open-input-string test-bar-crate)) - ("https://crates.io/api/v1/crates/bar/1.0.0/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/bar/1.0.0/dependencies" - (open-input-string test-bar-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.2/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/leaf-bob/3.0.2/dependencies" - (open-input-string test-leaf-bob-dependencies)) - ("https://crates.io/api/v1/crates/leaf-bob/4.0.0/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/leaf-bob/4.0.0/dependencies" - (open-input-string test-leaf-bob-dependencies)) - (_ (error "Unexpected URL: " url))))) - (match (crate-recursive-import "bar" - #:allow-yanked? #t) - (((define-public 'rust-bar-1 - (package - (name "rust-bar") - (version "1.0.0") - (source - (origin - (method url-fetch) - (uri (crate-uri "bar" version)) - (file-name - (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - (? string? hash))))) - (build-system cargo-build-system) - (arguments - ('quasiquote (#:cargo-inputs - (("rust-leaf-bob" - ('unquote 'rust-leaf-bob-3))) - #:cargo-development-inputs - (("rust-leaf-bob" - ('unquote 'rust-leaf-bob-3.0.2-yanked)) - ("rust-leaf-bob" - ('unquote 'rust-leaf-bob-4.0.0-yanked)))))) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0))))) - #t) - (x - (pk 'fail x #f)))))) - -(unless have-guile-semver? (test-skip 1)) -(test-assert "crate-import-only-yanked-available" - (mock - ((guix http-client) http-fetch - (lambda (url . rest) - (match url - ("https://crates.io/api/v1/crates/bar" - (open-input-string test-bar-crate)) - ("https://crates.io/api/v1/crates/bar/1.0.0/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/bar/1.0.0/dependencies" - (open-input-string test-bar-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")) - ("https://crates.io/api/v1/crates/leaf-bob/3.0.1/dependencies" - (open-input-string test-leaf-bob-dependencies)) - ("https://crates.io/api/v1/crates/leaf-bob/3.0.2/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/leaf-bob/3.0.2/dependencies" - (open-input-string test-leaf-bob-dependencies)) - ("https://crates.io/api/v1/crates/leaf-bob/4.0.0/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/leaf-bob/4.0.0/dependencies" - (open-input-string test-leaf-bob-dependencies)) - (_ (error "Unexpected URL: " url))))) - (match (crate-recursive-import "bar" - #:recursive-dev-dependencies? #t - #:allow-yanked? #t) - (((define-public 'rust-leaf-bob-4.0.0-yanked - (package - (name "rust-leaf-bob") - (version "4.0.0") - ($ <comment> "; This version was yanked!\n" #t) - (source - (origin - (method url-fetch) - (uri (crate-uri "leaf-bob" version)) - (file-name - (string-append name "-" version "-yanked.tar.gz")) - (sha256 - (base32 - (? string? hash))))) - (properties ('quote (('crate-version-yanked? . #t)))) - (build-system cargo-build-system) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0)))) - (define-public 'rust-leaf-bob-3.0.2-yanked - (package - (name "rust-leaf-bob") - (version "3.0.2") - ($ <comment> "; This version was yanked!\n" #t) - (source - (origin - (method url-fetch) - (uri (crate-uri "leaf-bob" version)) - (file-name - (string-append name "-" version "-yanked.tar.gz")) - (sha256 - (base32 - (? string? hash))))) - (properties ('quote (('crate-version-yanked? . #t)))) - (build-system cargo-build-system) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0)))) - (define-public 'rust-leaf-bob-3 - (package - (name "rust-leaf-bob") - (version "3.0.1") - (source - (origin - (method url-fetch) - (uri (crate-uri "leaf-bob" version)) - (file-name - (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - (? string? hash))))) - (build-system cargo-build-system) - (home-page "http://example.com") - (synopsis "summary") - (description "This package provides summary.") - (license (list license:expat license:asl2.0)))) - (define-public 'rust-bar-1 - (package - (name "rust-bar") - (version "1.0.0") - (source - (origin - (method url-fetch) - (uri (crate-uri "bar" version)) - (file-name - (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - (? string? hash))))) - (build-system cargo-build-system) - (arguments - ('quasiquote (#:cargo-inputs - (("rust-leaf-bob" - ('unquote 'rust-leaf-bob-3))) - #:cargo-development-inputs - (("rust-leaf-bob" - ('unquote 'rust-leaf-bob-3.0.2-yanked)) - ("rust-leaf-bob" - ('unquote 'rust-leaf-bob-4.0.0-yanked)))))) - (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))))) - (test-assert "crate-lockfile-import" (begin |
