From: rennes@openmailbox.org
To: Mathieu Lirzin <mthl@gnu.org>
Cc: 22475@debbugs.gnu.org
Subject: bug#22475: guix make check FAIL
Date: Wed, 27 Jan 2016 18:27:27 +0100 [thread overview]
Message-ID: <224f732389ffa6f4aad0d4056082d8ba@openmailbox.org> (raw)
In-Reply-To: <874mdz5589.fsf@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 1317 bytes --]
Hi,
i attached files required.
regards
On 2016-01-27 17:58, Mathieu Lirzin wrote:
> Hi,
>
> rennes@openmailbox.org writes:
>
>> i clone guix from git(in GuixSD), and when run 'make check' display
>> FAIL message. But the command './pre-inst-env' works.
>>
>> These are the commands that run:
>>
>> git clone git://git.savannah.gnu.org/guix.git
>> guix environment guix
>> ./bootstrap
>> ./configure --with-libgcrypt-prefix=$HOME/.guix-profile/
>> --localstatedir=/var
>> make
>> make check
>>
>>
>> this is the error message:
> [...]
>> FAIL: tests/store.scm
>> FAIL: tests/lint.scm
>> FAIL: tests/guix-download.sh
> [...]
>> ============================================================================
>> Testsuite summary for GNU Guix 0.9.1
>> ============================================================================
>> # TOTAL: 58
>> # PASS: 55
>> # SKIP: 0
>> # XFAIL: 0
>> # FAIL: 3
>> # XPASS: 0
>> # ERROR: 0
>> ============================================================================
>> See ./test-suite.log
>> Please report to bug-guix@gnu.org
>> ============================================================================
>
> Can you provide the following files from the root of the repository?
>
> - tests-suite.log
> - store.log
> - lint.log
>
> Thanks,
>
> --
> Mathieu Lirzin
[-- Attachment #2: test-suite.log --]
[-- Type: text/plain, Size: 18699 bytes --]
======================================
GNU Guix 0.9.1: ./test-suite.log
======================================
# TOTAL: 58
# PASS: 55
# SKIP: 0
# XFAIL: 0
# FAIL: 3
# XPASS: 0
# ERROR: 0
.. contents:: :depth: 2
FAIL: tests/store
=================
accepted connection from pid 3433, user bob
accepted connection from pid 3433, user bob
accepted connection from pid 3433, user bob
random seed for tests: 1453914072
;;; note: source file ./srfi/srfi-64.scm
;;; newer than compiled /gnu/store/5i87jzm90nw8j692y7z1j2qfx16h6ni3-guile-2.0.11/lib/guile/2.0/ccache/srfi/srfi-64.go
finding garbage collector roots...
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;; or pass the --no-auto-compile argument to disable.
;;; compiling /home/bob/guix/nix/scripts/list-runtime-roots
;;; compiled /home/bob/guix/test-tmp/var/3424/cache-3424/guile/ccache/2.0-LE-8-2.0/home/bob/guix/nix/scripts/list-runtime-roots.go
removing stale temporary roots file `/home/bob/guix/test-tmp/var/3424/temproots/3441'
determining live/dead paths...
accepted connection from pid 3433, user bob
finding garbage collector roots...
determining live/dead paths...
finding garbage collector roots...
determining live/dead paths...
finding garbage collector roots...
deleting unused links...
accepted connection from pid 3433, user bob
finding garbage collector roots...
removing stale temporary roots file `/home/bob/guix/test-tmp/var/3424/temproots/3473'
deleting `/home/bob/guix/test-tmp/store/h4s3qibk12fxkgprpi0fbv0wwbm4nnhj-delete-me'
deleting `/home/bob/guix/test-tmp/store/trash'
deleting unused links...
note: currently hard linking saves 19.65 MiB
accepted connection from pid 3433, user bob
finding garbage collector roots...
removing stale temporary roots file `/home/bob/guix/test-tmp/var/3424/temproots/3480'
deleting `/home/bob/guix/test-tmp/store/qbxdfzkscmajhhinvfci172jyk923js6-delete-me'
deleting `/home/bob/guix/test-tmp/store/trash'
deleting unused links...
note: currently hard linking saves 19.65 MiB
@ build-started /home/bob/guix/test-tmp/store/m3v4x81ckg9rawdbkqqb4psn94x576z2-the-thing.drv - x86_64-linux /home/bob/guix/test-tmp/var/log/guix/drvs/m3//v4x81ckg9rawdbkqqb4psn94x576z2-the-thing.drv.bz2
@ build-succeeded /home/bob/guix/test-tmp/store/m3v4x81ckg9rawdbkqqb4psn94x576z2-the-thing.drv -
@ build-started /home/bob/guix/test-tmp/store/zyn8hdy2b78di969fm24j9393dlifc0v-the-thing.drv - x86_64-linux /home/bob/guix/test-tmp/var/log/guix/drvs/zy//n8hdy2b78di969fm24j9393dlifc0v-the-thing.drv.bz2
@ build-succeeded /home/bob/guix/test-tmp/store/zyn8hdy2b78di969fm24j9393dlifc0v-the-thing.drv -
@ build-started /home/bob/guix/test-tmp/store/fcvyrljisgr1vbmsbrjbxmxkylhvks9h-the-thing.drv - x86_64-linux /home/bob/guix/test-tmp/var/log/guix/drvs/fc//vyrljisgr1vbmsbrjbxmxkylhvks9h-the-thing.drv.bz2
@ build-succeeded /home/bob/guix/test-tmp/store/fcvyrljisgr1vbmsbrjbxmxkylhvks9h-the-thing.drv -
accepted connection from pid 3433, user bob
substitute: warning: authentication and authorization of substitutes disabled!
substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
accepted connection from pid 3433, user bob
substitute: warning: authentication and authorization of substitutes disabled!
substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
accepted connection from pid 3433, user bob
substitute: warning: authentication and authorization of substitutes disabled!
substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
accepted connection from pid 3433, user bob
accepted connection from pid 3433, user bob
substitute: warning: authentication and authorization of substitutes disabled!
substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
accepted connection from pid 3433, user bob
substitute: warning: authentication and authorization of substitutes disabled!
substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
substitute: guix substitute: warning: while fetching http://does-not-exist/nix-cache-info: server is somewhat slow
substitute: guix substitute: warning: try `--no-substitutes' if the problem persists
substitute: Backtrace:
substitute: In ice-9/boot-9.scm:
substitute: 157: 19 [catch #t #<catch-closure 1d7f580> ...]
substitute: In unknown file:
substitute: ?: 18 [apply-smob/1 #<catch-closure 1d7f580>]
substitute: In ice-9/boot-9.scm:
substitute: 63: 17 [call-with-prompt prompt0 ...]
substitute: In ice-9/eval.scm:
substitute: 432: 16 [eval # #]
substitute: In ice-9/boot-9.scm:
substitute: 2401: 15 [save-module-excursion #<procedure 1d9d940 at ice-9/boot-9.scm:4045:3 ()>]
substitute: 4050: 14 [#<procedure 1d9d940 at ice-9/boot-9.scm:4045:3 ()>]
substitute: 1724: 13 [%start-stack load-stack ...]
substitute: 1729: 12 [#<procedure 1db4ea0 ()>]
substitute: In unknown file:
substitute: ?: 11 [primitive-load "/home/bob/guix/scripts/guix"]
substitute: In guix/ui.scm:
substitute: 1175: 10 [run-guix-command substitute "--query"]
substitute: In ice-9/boot-9.scm:
substitute: 157: 9 [catch getaddrinfo-error ...]
substitute: 157: 8 [catch srfi-34 #<procedure 2c708a0 at guix/ui.scm:411:2 ()> ...]
substitute: 157: 7 [catch system-error ...]
substitute: In guix/scripts/substitute.scm:
substitute: 946: 6 [#<procedure 2c708c0 at guix/scripts/substitute.scm:939:3 ()>]
substitute: 797: 5 [process-query "have /home/bob/guix/test-tmp/store/nmng5jh0yybqqm6j4jf3wva9rlxcfxhb-guile-bootstrap-2.0 " ...]
substitute: 633: 4 [lookup-narinfos/diverse # #]
substitute: 617: 3 [lookup-narinfos "http://does-not-exist" #]
substitute: 589: 2 [fetch-narinfos "http://does-not-exist" #]
substitute: 222: 1 [download-cache-info "http://does-not-exist"]
substitute: In unknown file:
substitute: ?: 0 [scm-error misc-error #f ...]
substitute:
substitute: ERROR: In procedure scm-error:
substitute: ERROR: unmatched line "<html><head><meta http-equiv=\"refresh\" content=\"0;url=http://searchguide.level3.com/search/?q=http://does-not-exist/nix-cache-info&t=0\"/></head><body><script>window.location=\"http://searchguide.level3.com/search/?q=\"+escape(window.location)+\"&r=\"+escape(document.referrer)+\"&t=0\";</script></body></html>"
accepted connection from pid 3433, user bob
substitute: warning: authentication and authorization of substitutes disabled!
substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
@ substituter-started /home/bob/guix/test-tmp/store/hwl3dai5lm15vg2r6684lvcqgp679iaf-substitute-me /home/bob/guix/nix/scripts/substitute
warning: authentication and authorization of substitutes disabled!
guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
Downloading /home/bob/guix/test-tmp/store/hwl3dai5lm15vg2r6684lvcqgp679iaf-substitute-me (1KiB installed)...
file:///.../example.nar 176B 0B/s 00:00 [####################] 100.0%
@ substituter-succeeded /home/bob/guix/test-tmp/store/hwl3dai5lm15vg2r6684lvcqgp679iaf-substitute-me
accepted connection from pid 3433, user bob
substitute: warning: authentication and authorization of substitutes disabled!
substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
@ substituter-started /home/bob/guix/test-tmp/store/kyyxyqfvahi1fn2nqdslzgaaab9sygss-substitute-me /home/bob/guix/nix/scripts/substitute
warning: authentication and authorization of substitutes disabled!
guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
Downloading /home/bob/guix/test-tmp/store/kyyxyqfvahi1fn2nqdslzgaaab9sygss-substitute-me (1KiB installed)...
file:///.../example.nar 176B 0B/s 00:00 [####################] 100.0%
@ substituter-succeeded /home/bob/guix/test-tmp/store/kyyxyqfvahi1fn2nqdslzgaaab9sygss-substitute-me
accepted connection from pid 3433, user bob
substitute: warning: authentication and authorization of substitutes disabled!
substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
@ substituter-started /home/bob/guix/test-tmp/store/hidfbfxwglxmq7cyvyhzhkrcrd4mj1yf-corrupt-substitute /home/bob/guix/nix/scripts/substitute
warning: authentication and authorization of substitutes disabled!
guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
Downloading /home/bob/guix/test-tmp/store/hidfbfxwglxmq7cyvyhzhkrcrd4mj1yf-corrupt-substitute (1KiB installed)...
file:///.../example.nar 128B 0B/s 00:00 [####################] 100.0%
@ substituter-failed /home/bob/guix/test-tmp/store/hidfbfxwglxmq7cyvyhzhkrcrd4mj1yf-corrupt-substitute 0 hash mismatch in downloaded path `/home/bob/guix/test-tmp/store/hidfbfxwglxmq7cyvyhzhkrcrd4mj1yf-corrupt-substitute': expected 0000000000000000000000000000000000000000000000000000000000000000, got b8f73a6eb280e63169b1de2a5b5e154676fe1ada685f1e5c7183cbb2c1dcd535
accepted connection from pid 3433, user bob
substitute: warning: authentication and authorization of substitutes disabled!
substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
@ substituter-started /home/bob/guix/test-tmp/store/q56qh3v1rl8wj9rq0bm74w7lc9r2i3rn-substitute-me-not /home/bob/guix/nix/scripts/substitute
warning: authentication and authorization of substitutes disabled!
guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
Downloading /home/bob/guix/test-tmp/store/q56qh3v1rl8wj9rq0bm74w7lc9r2i3rn-substitute-me-not (1KiB installed)...
guix substitute: error: open-file: No such file or directory: "/home/bob/guix/test-tmp/var/3424/substituter-data/example.nar"
@ substituter-failed /home/bob/guix/test-tmp/store/q56qh3v1rl8wj9rq0bm74w7lc9r2i3rn-substitute-me-not 256 fetching path `/home/bob/guix/test-tmp/store/q56qh3v1rl8wj9rq0bm74w7lc9r2i3rn-substitute-me-not' failed with exit code 1
@ substituter-started /home/bob/guix/test-tmp/store/q56qh3v1rl8wj9rq0bm74w7lc9r2i3rn-substitute-me-not /home/bob/guix/nix/scripts/substitute
warning: authentication and authorization of substitutes disabled!
guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
Downloading /home/bob/guix/test-tmp/store/q56qh3v1rl8wj9rq0bm74w7lc9r2i3rn-substitute-me-not (1KiB installed)...
guix substitute: error: open-file: No such file or directory: "/home/bob/guix/test-tmp/var/3424/substituter-data/example.nar"
@ substituter-failed /home/bob/guix/test-tmp/store/q56qh3v1rl8wj9rq0bm74w7lc9r2i3rn-substitute-me-not 256 fetching path `/home/bob/guix/test-tmp/store/q56qh3v1rl8wj9rq0bm74w7lc9r2i3rn-substitute-me-not' failed with exit code 1
@ build-started /home/bob/guix/test-tmp/store/7hx9y64lciabmw3vz3jn01k8l9jgzs64-substitute-me-not.drv - x86_64-linux /home/bob/guix/test-tmp/var/log/guix/drvs/7h//x9y64lciabmw3vz3jn01k8l9jgzs64-substitute-me-not.drv.bz2
@ build-succeeded /home/bob/guix/test-tmp/store/7hx9y64lciabmw3vz3jn01k8l9jgzs64-substitute-me-not.drv -
finding garbage collector roots...
deleting unused links...
finding garbage collector roots...
deleting unused links...
finding garbage collector roots...
deleting unused links...
finding garbage collector roots...
deleting unused links...
@ build-started /home/bob/guix/test-tmp/store/ir9qcvkcgi69diylfgyx489mfif8zra0-bunch.drv - x86_64-linux /home/bob/guix/test-tmp/var/log/guix/drvs/ir//9qcvkcgi69diylfgyx489mfif8zra0-bunch.drv.bz2
@ build-succeeded /home/bob/guix/test-tmp/store/ir9qcvkcgi69diylfgyx489mfif8zra0-bunch.drv -
finding garbage collector roots...
deleting unused links...
finding garbage collector roots...
deleting unused links...
reading the Nix store...
reading the Nix store...
path `/home/bob/guix/test-tmp/store/phii884551vrqcxvlj6nfw3389204ggx-foo' disappeared, but it still has valid referrers!
reading the Nix store...
accepted connection from pid 3433, user bob
substitute: warning: authentication and authorization of substitutes disabled!
substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
fetching path `/home/bob/guix/test-tmp/store/74qgba0svij37jfnx8lqrd0x55ppyrrf-corrupt'...
warning: authentication and authorization of substitutes disabled!
guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
Downloading /home/bob/guix/test-tmp/store/74qgba0svij37jfnx8lqrd0x55ppyrrf-corrupt (1KiB installed)...
file:///.../example.nar 176B 0B/s 00:00 [####################] 100.0%
reading the Nix store...
checking path existence...
checking hashes...
reading the Nix store...
checking path existence...
checking hashes...
path `/home/bob/guix/test-tmp/store/74qgba0svij37jfnx8lqrd0x55ppyrrf-corrupt' was modified! expected hash `1c4b66e1fcac86c73e74231eaf91ca18168a857e25583345880fd737f2667981', got `e09c480e2e93336cd3c45aa129f81a0d7ba56c410b849d7779a8136074413b3d'
finding garbage collector roots...
removing stale temporary roots file `/home/bob/guix/test-tmp/var/3424/temproots/3830'
deleting `/home/bob/guix/test-tmp/store/74qgba0svij37jfnx8lqrd0x55ppyrrf-corrupt'
deleting `/home/bob/guix/test-tmp/store/trash'
deleting unused links...
note: currently hard linking saves 19.65 MiB
accepted connection from pid 3433, user bob
substitute: warning: authentication and authorization of substitutes disabled!
substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable
building path(s) `/home/bob/guix/test-tmp/store/zwy70i89sggp86iahxn9gqpd4wshf7k0-non-deterministic'
checking path(s) `/home/bob/guix/test-tmp/store/zwy70i89sggp86iahxn9gqpd4wshf7k0-non-deterministic'
warning: rewriting hashes in `/home/bob/guix/test-tmp/store/zwy70i89sggp86iahxn9gqpd4wshf7k0-non-deterministic'; cross fingers
accepted connection from pid 3433, user bob
@ build-started /home/bob/guix/test-tmp/store/r26lhmh1p231lqmysl3crjzgr0njgyfc-non-deterministic.drv - x86_64-linux /home/bob/guix/test-tmp/var/log/guix/drvs/r2//6lhmh1p231lqmysl3crjzgr0njgyfc-non-deterministic.drv.bz2
@ build-started /home/bob/guix/test-tmp/store/r26lhmh1p231lqmysl3crjzgr0njgyfc-non-deterministic.drv - x86_64-linux /home/bob/guix/test-tmp/var/log/guix/drvs/r2//6lhmh1p231lqmysl3crjzgr0njgyfc-non-deterministic.drv.bz2
result of ?/home/bob/guix/test-tmp/store/r26lhmh1p231lqmysl3crjzgr0njgyfc-non-deterministic.drv? differs from previous round; rejecting as non-deterministic
@ build-failed /home/bob/guix/test-tmp/store/r26lhmh1p231lqmysl3crjzgr0njgyfc-non-deterministic.drv - 1 result of ?/home/bob/guix/test-tmp/store/r26lhmh1p231lqmysl3crjzgr0njgyfc-non-deterministic.drv? differs from previous round; rejecting as non-deterministic
%%%% Starting test store (Writing full log to "store.log")
;;; ("/home/bob/guix/test-tmp/var/log/guix/drvs/zy/n8hdy2b78di969fm24j9393dlifc0v-the-thing.drv.bz2")
;;; ("/home/bob/guix/test-tmp/var/log/guix/drvs/fc/vyrljisgr1vbmsbrjbxmxkylhvks9h-the-thing.drv.bz2")
;;; (spi (#<<substitutable> path: "/home/bob/guix/test-tmp/store/nmng5jh0yybqqm6j4jf3wva9rlxcfxhb-guile-bootstrap-2.0" deriver: "/home/bob/guix/test-tmp/store/k5qb593w7bsg2hyazdfa0jssvfgg3hdn-guile-bootstrap-2.0.drv" refs: () dl-size: 0 nar-size: 1234>))
tests/store.scm:392: FAIL substitute query, alternating URLs
;;; (corrupt #<condition &nix-protocol-error [message: "some substitutes for the outputs of derivation `/home/bob/guix/test-tmp/store/j737r7h6l1mpy7nz4ff1yp602dj5ciy8-corrupt-substitute.drv' failed (usually happens due to networking issues); try `--fallback' to build derivation from source " status: 1] 26e9bd0>)
;;; (c #<condition &nix-protocol-error [message: "signed hash doesn't match actual contents of imported archive; archive could be corrupt, or someone is trying to import a Trojan horse" status: 1] 29372a0>)
;;; (verify1 #t)
;;; (verify2 #f)
;;; (verify3 #t)
;;; (determinism-exception #<condition &nix-protocol-error [message: "derivation `/home/bob/guix/test-tmp/store/9h60dzz99lxb7lrsnfhhyb4jjrq7l56y-non-deterministic.drv' may not be deterministic: hash mismatch in output `/home/bob/guix/test-tmp/store/zwy70i89sggp86iahxn9gqpd4wshf7k0-non-deterministic'" status: 1] 290ba20>)
;;; (multiple-build #<condition &nix-protocol-error [message: "build of `/home/bob/guix/test-tmp/store/r26lhmh1p231lqmysl3crjzgr0njgyfc-non-deterministic.drv' failed" status: 1] 2a2bb70>)
# of expected passes 45
# of unexpected failures 1
./test-env: line 1: 3432 Terminated "/home/bob/guix/pre-inst-env" "/home/bob/guix/guix-daemon" --disable-chroot --substitute-urls="$GUIX_BINARY_SUBSTITUTE_URL"
FAIL tests/store.scm (exit status: 1)
FAIL: tests/lint
================
accepted connection from pid 4253, user bob
random seed for tests: 1453910643
;;; note: source file ./srfi/srfi-64.scm
;;; newer than compiled /gnu/store/5i87jzm90nw8j692y7z1j2qfx16h6ni3-guile-2.0.11/lib/guile/2.0/ccache/srfi/srfi-64.go
%%%% Starting test lint (Writing full log to "lint.log")
tests/lint.scm:370: FAIL home-page: host not found
# of expected passes 45
# of unexpected failures 1
./test-env: line 1: 4252 Terminated "/home/bob/guix/pre-inst-env" "/home/bob/guix/guix-daemon" --disable-chroot --substitute-urls="$GUIX_BINARY_SUBSTITUTE_URL"
FAIL tests/lint.scm (exit status: 1)
FAIL: tests/guix-download
=========================
+ guix download --version
guix download (GNU Guix) 0.9.1
Copyright (C) 2016 the Guix authors
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
+ guix download http://does.not/exist
accepted connection from pid 5114, user bob
Starting download of /tmp/guix-file.qSJyZC
From http://does.not/exist...
exist 0B/s 00:00 | 0B transferred\r exist 1.1MiB/s 00:00 | 288B transferred
/home/bob/guix/test-tmp/store/ma3hazzz1y783d577p07w66cpn5qjsir-exist
0f5cx1vmxl5b0ihmgkpng0qs02zi1ip9q0nhhii67lsw2kpgf6c4
+ false
./test-env: line 1: 5099 Terminated "/home/bob/guix/pre-inst-env" "/home/bob/guix/guix-daemon" --disable-chroot --substitute-urls="$GUIX_BINARY_SUBSTITUTE_URL"
FAIL tests/guix-download.sh (exit status: 1)
[-- Attachment #3: store.log --]
[-- Type: text/plain, Size: 30034 bytes --]
%%%% Starting test store
Group begin: store
Test begin:
test-name: "store-path-hash-part"
source-file: "tests/store.scm"
source-line: 51
source-form: (test-equal "store-path-hash-part" "283gqy39v3g9dxjy26rynl0zls82fmcg" (store-path-hash-part (string-append (%store-prefix) "/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7")))
Test end:
result-kind: pass
actual-value: "283gqy39v3g9dxjy26rynl0zls82fmcg"
expected-value: "283gqy39v3g9dxjy26rynl0zls82fmcg"
Test begin:
test-name: "store-path-hash-part #f"
source-file: "tests/store.scm"
source-line: 57
source-form: (test-equal "store-path-hash-part #f" #f (store-path-hash-part (string-append (%store-prefix) "/foo/bar/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7")))
Test end:
result-kind: pass
actual-value: #f
expected-value: #f
Test begin:
test-name: "store-path-package-name"
source-file: "tests/store.scm"
source-line: 63
source-form: (test-equal "store-path-package-name" "guile-2.0.7" (store-path-package-name (string-append (%store-prefix) "/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7")))
Test end:
result-kind: pass
actual-value: "guile-2.0.7"
expected-value: "guile-2.0.7"
Test begin:
test-name: "store-path-package-name #f"
source-file: "tests/store.scm"
source-line: 69
source-form: (test-equal "store-path-package-name #f" #f (store-path-package-name "/foo/bar/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7"))
Test end:
result-kind: pass
actual-value: #f
expected-value: #f
Test begin:
test-name: "direct-store-path?"
source-file: "tests/store.scm"
source-line: 74
source-form: (test-assert "direct-store-path?" (and (direct-store-path? (string-append (%store-prefix) "/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7")) (not (direct-store-path? (string-append (%store-prefix) "/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7/bin/guile"))) (not (direct-store-path? (%store-prefix)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "valid-path? live"
source-file: "tests/store.scm"
source-line: 86
source-form: (test-assert "valid-path? live" (let ((p (add-text-to-store %store "hello" "hello, world"))) (valid-path? %store p)))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "valid-path? false"
source-file: "tests/store.scm"
source-line: 90
source-form: (test-assert "valid-path? false" (not (valid-path? %store (string-append (%store-prefix) "/" (make-string 32 #\e) "-foobar"))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "valid-path? error"
source-file: "tests/store.scm"
source-line: 95
source-form: (test-assert "valid-path? error" (with-store s (guard (c ((nix-protocol-error? c) #t)) (valid-path? s "foo") #f)))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "valid-path? recovery"
source-file: "tests/store.scm"
source-line: 101
source-form: (test-assert "valid-path? recovery" (with-store s (let-syntax ((true-if-error (syntax-rules () ((_ exp) (guard (c ((nix-protocol-error? c) #t)) exp #f))))) (and (true-if-error (valid-path? s "foo")) (true-if-error (valid-path? s "bar")) (true-if-error (valid-path? s "baz")) (true-if-error (valid-path? s "chbouib")) (valid-path? s (add-text-to-store s "valid" "yeah"))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "hash-part->path"
source-file: "tests/store.scm"
source-line: 118
source-form: (test-assert "hash-part->path" (let ((p (add-text-to-store %store "hello" "hello, world"))) (equal? (hash-part->path %store (store-path-hash-part p)) p)))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "dead-paths"
source-file: "tests/store.scm"
source-line: 123
source-form: (test-assert "dead-paths" (let ((p (add-text-to-store %store "random-text" (random-text)))) (->bool (member p (dead-paths %store)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "permanent root"
source-file: "tests/store.scm"
source-line: 144
source-form: (test-assert "permanent root" (let* ((p (with-store store (let ((p (add-text-to-store store "random-text" (random-text)))) (add-permanent-root p) (add-permanent-root p) p)))) (and (member p (live-paths %store)) (begin (remove-permanent-root p) (->bool (member p (dead-paths %store)))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "dead path can be explicitly collected"
source-file: "tests/store.scm"
source-line: 156
source-form: (test-assert "dead path can be explicitly collected" (let ((p (add-text-to-store %store "random-text" (random-text) (quote ())))) (let-values (((paths freed) (delete-paths %store (list p)))) (and (equal? paths (list p)) (> freed 0) (not (file-exists? p))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "add-text-to-store vs. delete-paths"
source-file: "tests/store.scm"
source-line: 164
source-form: (test-assert "add-text-to-store vs. delete-paths" (with-store store (let* ((text (random-text)) (path (add-text-to-store store "delete-me" text)) (deleted (delete-paths store (list path))) (path2 (add-text-to-store store "delete-me" text))) (and (string=? path path2) (equal? deleted (list path)) (valid-path? store path) (file-exists? path)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "add-to-store vs. delete-paths"
source-file: "tests/store.scm"
source-line: 177
source-form: (test-assert "add-to-store vs. delete-paths" (with-store store (let* ((file (search-path %load-path "guix.scm")) (path (add-to-store store "delete-me" #t "sha256" file)) (deleted (delete-paths store (list path))) (path2 (add-to-store store "delete-me" #t "sha256" file))) (and (string=? path path2) (equal? deleted (list path)) (valid-path? store path) (file-exists? path)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "references"
source-file: "tests/store.scm"
source-line: 189
source-form: (test-assert "references" (let* ((t1 (add-text-to-store %store "random1" (random-text))) (t2 (add-text-to-store %store "random2" (random-text) (list t1)))) (and (equal? (list t1) (references %store t2)) (equal? (list t2) (referrers %store t1)) (null? (references %store t1)) (null? (referrers %store t2)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "requisites"
source-file: "tests/store.scm"
source-line: 199
source-form: (test-assert "requisites" (let* ((t1 (add-text-to-store %store "random1" (random-text) (quote ()))) (t2 (add-text-to-store %store "random2" (random-text) (list t1))) (t3 (add-text-to-store %store "random3" (random-text) (list t2))) (t4 (add-text-to-store %store "random4" (random-text) (list t1 t3)))) (define (same? x y) (and (= (length x) (length y)) (lset= equal? x y))) (and (same? (requisites %store t1) (list t1)) (same? (requisites %store t2) (list t1 t2)) (same? (requisites %store t3) (list t1 t2 t3)) (same? (requisites %store t4) (list t1 t2 t3 t4)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "derivers"
source-file: "tests/store.scm"
source-line: 217
source-form: (test-assert "derivers" (let* ((b (add-text-to-store %store "build" "echo $foo > $out" (quote ()))) (s (add-to-store %store "bash" #t "sha256" (search-bootstrap-binary "bash" (%current-system)))) (d (derivation %store "the-thing" s (quasiquote ("-e" (unquote b))) #:env-vars (quasiquote (("foo" unquote (random-text)))) #:inputs (quasiquote (((unquote b)) ((unquote s)))))) (o (derivation->output-path d))) (and (build-derivations %store (list d)) (equal? (query-derivation-outputs %store (derivation-file-name d)) (list o)) (equal? (valid-derivers %store o) (list (derivation-file-name d))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "topologically-sorted, one item"
source-file: "tests/store.scm"
source-line: 233
source-form: (test-assert "topologically-sorted, one item" (let* ((a (add-text-to-store %store "a" "a")) (b (add-text-to-store %store "b" "b" (list a))) (c (add-text-to-store %store "c" "c" (list b))) (d (add-text-to-store %store "d" "d" (list c))) (s (topologically-sorted %store (list d)))) (equal? s (list a b c d))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "topologically-sorted, several items"
source-file: "tests/store.scm"
source-line: 241
source-form: (test-assert "topologically-sorted, several items" (let* ((a (add-text-to-store %store "a" "a")) (b (add-text-to-store %store "b" "b" (list a))) (c (add-text-to-store %store "c" "c" (list b))) (d (add-text-to-store %store "d" "d" (list c))) (s1 (topologically-sorted %store (list d a c b))) (s2 (topologically-sorted %store (list b d c a b d)))) (equal? s1 s2 (list a b c d))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "topologically-sorted, more difficult"
source-file: "tests/store.scm"
source-line: 250
source-form: (test-assert "topologically-sorted, more difficult" (let* ((a (add-text-to-store %store "a" "a")) (b (add-text-to-store %store "b" "b" (list a))) (c (add-text-to-store %store "c" "c" (list b))) (d (add-text-to-store %store "d" "d" (list c))) (w (add-text-to-store %store "w" "w")) (x (add-text-to-store %store "x" "x" (list w))) (y (add-text-to-store %store "y" "y" (list x d))) (s1 (topologically-sorted %store (list y))) (s2 (topologically-sorted %store (list c y))) (s3 (topologically-sorted %store (cons y (references %store y))))) (let* ((x-then-d? (equal? (references %store y) (list x d)))) (and (equal? s1 (if x-then-d? (list w x a b c d y) (list a b c d w x y))) (equal? s2 (if x-then-d? (list a b c w x d y) (list a b c d w x y))) (lset= string=? s1 s3)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "current-build-output-port, UTF-8"
source-file: "tests/store.scm"
source-line: 274
source-form: (test-assert "current-build-output-port, UTF-8" (string-contains (with-fluids ((%default-port-encoding "UTF-8")) (call-with-output-string (lambda (port) (parameterize ((current-build-output-port port)) (let* ((s "Here\u2019s a Greek letter: \u03bb.") (d (build-expression->derivation %store "foo" (quasiquote (display (unquote s))) #:guile-for-build (package-derivation s %bootstrap-guile (%current-system))))) (guard (c ((nix-protocol-error? c) #t)) (build-derivations %store (list d)))))))) "Here\u2019s a Greek letter: \u03bb."))
Test end:
result-kind: pass
actual-value: 191
Test begin:
test-name: "current-build-output-port, UTF-8 + garbage"
source-file: "tests/store.scm"
source-line: 290
source-form: (test-assert "current-build-output-port, UTF-8 + garbage" (string-contains (with-fluids ((%default-port-encoding "UTF-8")) (call-with-output-string (lambda (port) (parameterize ((current-build-output-port port)) (let ((d (build-expression->derivation %store "foo" (quasiquote (begin (use-modules (rnrs io ports)) (display "garbage: ") (put-bytevector (current-output-port) #vu8(128)) (display "lambda: \u03bb\n"))) #:guile-for-build (package-derivation %store %bootstrap-guile)))) (guard (c ((nix-protocol-error? c) #t)) (build-derivations %store (list d)))))))) "garbage: ?lambda: \u03bb"))
Test end:
result-kind: pass
actual-value: 191
Test begin:
test-name: "log-file, derivation"
source-file: "tests/store.scm"
source-line: 310
source-form: (test-assert "log-file, derivation" (let* ((b (add-text-to-store %store "build" "echo $foo > $out" (quote ()))) (s (add-to-store %store "bash" #t "sha256" (search-bootstrap-binary "bash" (%current-system)))) (d (derivation %store "the-thing" s (quasiquote ("-e" (unquote b))) #:env-vars (quasiquote (("foo" unquote (random-text)))) #:inputs (quasiquote (((unquote b)) ((unquote s))))))) (and (build-derivations %store (list d)) (file-exists? (pk (log-file %store (derivation-file-name d)))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "log-file, output file name"
source-file: "tests/store.scm"
source-line: 322
source-form: (test-assert "log-file, output file name" (let* ((b (add-text-to-store %store "build" "echo $foo > $out" (quote ()))) (s (add-to-store %store "bash" #t "sha256" (search-bootstrap-binary "bash" (%current-system)))) (d (derivation %store "the-thing" s (quasiquote ("-e" (unquote b))) #:env-vars (quasiquote (("foo" unquote (random-text)))) #:inputs (quasiquote (((unquote b)) ((unquote s)))))) (o (derivation->output-path d))) (and (build-derivations %store (list d)) (file-exists? (pk (log-file %store o))) (string=? (log-file %store (derivation-file-name d)) (log-file %store o)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "no substitutes"
source-file: "tests/store.scm"
source-line: 337
source-form: (test-assert "no substitutes" (with-store s (let* ((d1 (package-derivation s %bootstrap-guile (%current-system))) (d2 (package-derivation s %bootstrap-glibc (%current-system))) (o (map derivation->output-path (list d1 d2)))) (set-build-options s #:use-substitutes? #f) (and (not (has-substitutes? s (derivation-file-name d1))) (not (has-substitutes? s (derivation-file-name d2))) (null? (substitutable-paths s o)) (null? (substitutable-path-info s o))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "build-things with output path"
source-file: "tests/store.scm"
source-line: 348
source-form: (test-assert "build-things with output path" (with-store s (let* ((c (random-text)) (d (build-expression->derivation s "substitute-me" (quasiquote (call-with-output-file %output (lambda (p) (display (unquote c) p)))) #:guile-for-build (package-derivation s %bootstrap-guile (%current-system)))) (o (derivation->output-path d))) (set-build-options s #:use-substitutes? #f) (build-things s (list o)) (not (valid-path? s o)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "substitute query"
source-file: "tests/store.scm"
source-line: 368
source-form: (test-assert "substitute query" (with-store s (let* ((d (package-derivation s %bootstrap-guile (%current-system))) (o (derivation->output-path d))) (with-derivation-narinfo d (false-if-exception (delete-file-recursively (string-append (getenv "XDG_CACHE_HOME") "/guix/substitute"))) (set-build-options s #:use-substitutes? #t #:substitute-urls (%test-substitute-urls)) (and (has-substitutes? s o) (equal? (list o) (substitutable-paths s (list o))) (match (pk (quote spi) (substitutable-path-info s (list o))) (((? substitutable? s)) (and (string=? (substitutable-deriver s) (derivation-file-name d)) (null? (substitutable-references s)) (equal? (substitutable-nar-size s) 1234)))))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "substitute query, alternating URLs"
source-file: "tests/store.scm"
source-line: 392
source-form: (test-assert "substitute query, alternating URLs" (let* ((d (with-store s (package-derivation s %bootstrap-guile (%current-system)))) (o (derivation->output-path d))) (with-derivation-narinfo d (false-if-exception (delete-file-recursively (string-append (getenv "XDG_CACHE_HOME") "/guix/substitute"))) (and (with-store s (set-build-options s #:use-substitutes? #t #:substitute-urls (%test-substitute-urls)) (has-substitutes? s o)) (with-store s (set-build-options s #:use-substitutes? #t #:substitute-urls (list "http://does-not-exist")) (not (has-substitutes? s o))) (with-store s (set-build-options s #:use-substitutes? #t #:substitute-urls (%test-substitute-urls)) (has-substitutes? s o))))))
Test end:
result-kind: fail
actual-value: #f
actual-error: (srfi-34 #<condition &nix-protocol-error [message: "substituter `substitute' died unexpectedly" status: 1] 2682de0>)
Test begin:
test-name: "substitute"
source-file: "tests/store.scm"
source-line: 420
source-form: (test-assert "substitute" (with-store s (let* ((c (random-text)) (d (build-expression->derivation s "substitute-me" (quasiquote (call-with-output-file %output (lambda (p) (exit 1) (display (unquote c) p)))) #:guile-for-build (package-derivation s %bootstrap-guile (%current-system)))) (o (derivation->output-path d))) (with-derivation-substitute d c (set-build-options s #:use-substitutes? #t #:substitute-urls (%test-substitute-urls)) (and (has-substitutes? s o) (build-derivations s (list d)) (equal? c (call-with-input-file o get-string-all)))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "substitute + build-things with output path"
source-file: "tests/store.scm"
source-line: 439
source-form: (test-assert "substitute + build-things with output path" (with-store s (let* ((c (random-text)) (d (build-expression->derivation s "substitute-me" (quasiquote (call-with-output-file %output (lambda (p) (exit 1) (display (unquote c) p)))) #:guile-for-build (package-derivation s %bootstrap-guile (%current-system)))) (o (derivation->output-path d))) (with-derivation-substitute d c (set-build-options s #:use-substitutes? #t #:substitute-urls (%test-substitute-urls)) (and (has-substitutes? s o) (build-things s (list o)) (valid-path? s o) (equal? c (call-with-input-file o get-string-all)))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "substitute, corrupt output hash"
source-file: "tests/store.scm"
source-line: 459
source-form: (test-assert "substitute, corrupt output hash" (with-store s (let* ((c "hello, world") (d (build-expression->derivation s "corrupt-substitute" (quasiquote (mkdir %output)) #:guile-for-build (package-derivation s %bootstrap-guile (%current-system)))) (o (derivation->output-path d))) (with-derivation-substitute d c (sha256 => (make-bytevector 32 0)) (set-build-options s #:use-substitutes? #t #:fallback? #f #:substitute-urls (%test-substitute-urls)) (and (has-substitutes? s o) (guard (c ((nix-protocol-error? c) (pk (quote corrupt) c) (not (zero? (nix-protocol-error-status c))))) (build-derivations s (list d)) #f))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "substitute --fallback"
source-file: "tests/store.scm"
source-line: 489
source-form: (test-assert "substitute --fallback" (with-store s (let* ((t (random-text)) (d (build-expression->derivation s "substitute-me-not" (quasiquote (call-with-output-file %output (lambda (p) (display (unquote t) p)))) #:guile-for-build (package-derivation s %bootstrap-guile (%current-system)))) (o (derivation->output-path d))) (with-derivation-narinfo d (set-build-options s #:use-substitutes? #t #:substitute-urls (%test-substitute-urls)) (and (has-substitutes? s o) (guard (c ((nix-protocol-error? c) (set-build-options s #:use-substitutes? #t #:substitute-urls (%test-substitute-urls) #:fallback? #t) (and (build-derivations s (list d)) (equal? t (call-with-input-file o get-string-all))))) (build-derivations s (list d)) #f))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "export/import several paths"
source-file: "tests/store.scm"
source-line: 521
source-form: (test-assert "export/import several paths" (let* ((texts (unfold (cut >= <> 10) (lambda _ (random-text)) #{1+}# 0)) (files (map (cut add-text-to-store %store "text" <>) texts)) (dump (call-with-bytevector-output-port (cut export-paths %store files <>)))) (delete-paths %store files) (and (every (negate file-exists?) files) (let* ((source (open-bytevector-input-port dump)) (imported (import-paths %store source))) (and (equal? imported files) (every file-exists? files) (equal? texts (map (lambda (file) (call-with-input-file file get-string-all)) files)))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "export/import paths, ensure topological order"
source-file: "tests/store.scm"
source-line: 541
source-form: (test-assert "export/import paths, ensure topological order" (let* ((file0 (add-text-to-store %store "baz" (random-text))) (file1 (add-text-to-store %store "foo" (random-text) (list file0))) (file2 (add-text-to-store %store "bar" (random-text) (list file1))) (files (list file1 file2)) (dump1 (call-with-bytevector-output-port (cute export-paths %store (list file1 file2) <>))) (dump2 (call-with-bytevector-output-port (cute export-paths %store (list file2 file1) <>)))) (delete-paths %store files) (and (every (negate file-exists?) files) (bytevector=? dump1 dump2) (let* ((source (open-bytevector-input-port dump1)) (imported (import-paths %store source))) (and (equal? imported (list file1 file2)) (every file-exists? files) (equal? (list file0) (references %store file1)) (equal? (list file1) (references %store file2)))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "export/import incomplete"
source-file: "tests/store.scm"
source-line: 563
source-form: (test-assert "export/import incomplete" (let* ((file0 (add-text-to-store %store "baz" (random-text))) (file1 (add-text-to-store %store "foo" (random-text) (list file0))) (file2 (add-text-to-store %store "bar" (random-text) (list file1))) (dump (call-with-bytevector-output-port (cute export-paths %store (list file2) <>)))) (delete-paths %store (list file0 file1 file2)) (guard (c ((nix-protocol-error? c) (and (not (zero? (nix-protocol-error-status c))) (string-contains (nix-protocol-error-message c) "not valid")))) (import-paths %store (open-bytevector-input-port dump)))))
Test end:
result-kind: pass
actual-value: 77
Test begin:
test-name: "export/import recursive"
source-file: "tests/store.scm"
source-line: 580
source-form: (test-assert "export/import recursive" (let* ((file0 (add-text-to-store %store "baz" (random-text))) (file1 (add-text-to-store %store "foo" (random-text) (list file0))) (file2 (add-text-to-store %store "bar" (random-text) (list file1))) (dump (call-with-bytevector-output-port (cute export-paths %store (list file2) <> #:recursive? #t)))) (delete-paths %store (list file0 file1 file2)) (let ((imported (import-paths %store (open-bytevector-input-port dump)))) (and (equal? imported (list file0 file1 file2)) (every file-exists? (list file0 file1 file2)) (equal? (list file0) (references %store file1)) (equal? (list file1) (references %store file2))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "write-file & export-path yield the same result"
source-file: "tests/store.scm"
source-line: 596
source-form: (test-assert "write-file & export-path yield the same result" (run-with-store %store (mlet* %store-monad ((drv1 (package->derivation %bootstrap-guile)) (out1 -> (derivation->output-path drv1)) (data -> (unfold (cut >= <> 26) (lambda (i) (random-bytevector 128)) #{1+}# 0)) (build -> (gexp (begin (use-modules (rnrs io ports) (srfi srfi-1)) (let () (define letters (map (lambda (i) (string (integer->char (+ i (char->integer #\a))))) (iota 26))) (define (touch file data) (call-with-output-file file (lambda (port) (put-bytevector port data)))) (mkdir (ungexp output)) (chdir (ungexp output)) (for-each touch (append (drop letters 10) (take letters 10)) (list (ungexp-splicing data))) #t)))) (drv2 (gexp->derivation "bunch" build)) (out2 -> (derivation->output-path drv2)) (item-info -> (store-lift query-path-info))) (mbegin %store-monad (built-derivations (list drv1 drv2)) (foldm %store-monad (lambda (item result) (define ref-hash (let-values (((port get) (open-sha256-port))) (write-file item port) (close-port port) (get))) (>>= (item-info item) (lambda (info) (return (and result (bytevector=? (path-info-hash info) ref-hash)))))) #t (list out1 out2)))) #:guile-for-build (%guile-for-build)))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "import corrupt path"
source-file: "tests/store.scm"
source-line: 662
source-form: (test-assert "import corrupt path" (let* ((text (random-text)) (file (add-text-to-store %store "text" text)) (dump (call-with-bytevector-output-port (cut export-paths %store (list file) <>)))) (delete-paths %store (list file)) (let* ((index (quotient (bytevector-length dump) 4)) (byte (bytevector-u8-ref dump index))) (bytevector-u8-set! dump index (logxor 255 byte))) (and (not (file-exists? file)) (guard (c ((nix-protocol-error? c) (pk (quote c) c) (and (not (zero? (nix-protocol-error-status c))) (string-contains (nix-protocol-error-message c) "corrupt")))) (let* ((source (open-bytevector-input-port dump)) (imported (import-paths %store source))) (pk (quote corrupt-imported) imported) #f)))))
Test end:
result-kind: pass
actual-value: 80
Test begin:
test-name: "register-path"
source-file: "tests/store.scm"
source-line: 685
source-form: (test-assert "register-path" (let ((file (string-append (%store-prefix) "/" (make-string 32 #\f) "-fake"))) (when (valid-path? %store file) (delete-paths %store (list file))) (false-if-exception (delete-file file)) (let ((ref (add-text-to-store %store "ref-of-fake" (random-text))) (drv (string-append file ".drv"))) (call-with-output-file file (cut display "This is a fake store item.\n" <>)) (register-path file #:references (list ref) #:deriver drv) (and (valid-path? %store file) (equal? (references %store file) (list ref)) (null? (valid-derivers %store file)) (null? (referrers %store file))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "verify-store"
source-file: "tests/store.scm"
source-line: 705
source-form: (test-assert "verify-store" (let* ((text (random-text)) (file1 (add-text-to-store %store "foo" text)) (file2 (add-text-to-store %store "bar" (random-text) (list file1)))) (and (pk (quote verify1) (verify-store %store)) (begin (delete-file file1) (not (pk (quote verify2) (verify-store %store)))) (begin (call-with-output-file file1 (lambda (port) (display text port))) (pk (quote verify3) (verify-store %store))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "verify-store + check-contents"
source-file: "tests/store.scm"
source-line: 722
source-form: (test-assert "verify-store + check-contents" (with-store s (let* ((text (random-text)) (drv (build-expression->derivation s "corrupt" (quasiquote (let ((out (assoc-ref %outputs "out"))) (call-with-output-file out (lambda (port) (display (unquote text) port))) #t)) #:guile-for-build (package-derivation s %bootstrap-guile (%current-system)))) (file (derivation->output-path drv))) (with-derivation-substitute drv text (and (build-derivations s (list drv)) (verify-store s #:check-contents? #t) (begin (chmod file 420) (call-with-output-file file (lambda (port) (display "corrupt!" port))) #t) (not (verify-store s #:check-contents? #t)) (delete-paths s (list file)))))))
Test end:
result-kind: pass
actual-value: ("/home/bob/guix/test-tmp/store/74qgba0svij37jfnx8lqrd0x55ppyrrf-corrupt")
Test begin:
test-name: "build-things, check mode"
source-file: "tests/store.scm"
source-line: 759
source-form: (test-assert "build-things, check mode" (with-store store (call-with-temporary-output-file (lambda (entropy entropy-port) (write (random-text) entropy-port) (force-output entropy-port) (let* ((drv (build-expression->derivation store "non-deterministic" (quasiquote (begin (use-modules (rnrs io ports)) (let ((out (assoc-ref %outputs "out"))) (call-with-output-file out (lambda (port) (display (call-with-input-file (unquote entropy) get-string-all) port))) #t))) #:guile-for-build (package-derivation store %bootstrap-guile (%current-system)))) (file (derivation->output-path drv))) (and (build-things store (list (derivation-file-name drv))) (begin (write (random-text) entropy-port) (force-output entropy-port) (guard (c ((nix-protocol-error? c) (pk (quote determinism-exception) c) (and (not (zero? (nix-protocol-error-status c))) (string-contains (nix-protocol-error-message c) "deterministic")))) (build-things store (list (derivation-file-name drv)) (build-mode check)) #f))))))))
Test end:
result-kind: pass
actual-value: 79
Test begin:
test-name: "build multiple times"
source-file: "tests/store.scm"
source-line: 796
source-form: (test-assert "build multiple times" (with-store store (set-build-options store #:rounds 2 #:use-substitutes? #f) (call-with-temporary-output-file (lambda (entropy entropy-port) (write (random-text) entropy-port) (force-output entropy-port) (let* ((drv (build-expression->derivation store "non-deterministic" (quasiquote (begin (use-modules (rnrs io ports)) (let ((out (assoc-ref %outputs "out"))) (call-with-output-file out (lambda (port) (display (call-with-input-file (unquote entropy) get-string-all) port) (call-with-output-file (unquote entropy) (lambda (port) (write (quote foobar) port))))) #t))) #:guile-for-build (package-derivation store %bootstrap-guile (%current-system)))) (file (derivation->output-path drv))) (guard (c ((nix-protocol-error? c) (pk (quote multiple-build) c) (and (not (zero? (nix-protocol-error-status c))) (string-contains (nix-protocol-error-message c) "deterministic")))) (current-build-output-port (current-error-port)) (build-things store (list (derivation-file-name drv))) #f))))))
Test end:
result-kind: pass
actual-value: 77
Test begin:
test-name: "store-lower"
source-file: "tests/store.scm"
source-line: 834
source-form: (test-equal "store-lower" "Lowered." (let* ((add (store-lower text-file)) (file (add %store "foo" "Lowered."))) (call-with-input-file file get-string-all)))
Test end:
result-kind: pass
actual-value: "Lowered."
expected-value: "Lowered."
Test begin:
test-name: "query-path-info"
source-file: "tests/store.scm"
source-line: 840
source-form: (test-assert "query-path-info" (let* ((ref (add-text-to-store %store "ref" "foo")) (item (add-text-to-store %store "item" "bar" (list ref))) (info (query-path-info %store item))) (and (equal? (path-info-references info) (list ref)) (equal? (path-info-hash info) (sha256 (string->utf8 (call-with-output-string (cut write-file item <>))))))))
Test end:
result-kind: pass
actual-value: #t
Group end: store
# of expected passes 45
# of unexpected failures 1
[-- Attachment #4: lint.log --]
[-- Type: text/plain, Size: 18583 bytes --]
%%%% Starting test lint
Group begin: lint
Test begin:
test-name: "description: not empty"
source-file: "tests/lint.scm"
source-line: 141
source-form: (test-assert "description: not empty" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (description "")))) (check-description-style pkg))) "description should not be empty")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "description: valid Texinfo markup"
source-file: "tests/lint.scm"
source-line: 149
source-form: (test-assert "description: valid Texinfo markup" (->bool (string-contains (with-warnings (check-description-style (dummy-package "x" (description "f{oo}b@r")))) "Texinfo markup in description is invalid")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "description: does not start with an upper-case letter"
source-file: "tests/lint.scm"
source-line: 156
source-form: (test-assert "description: does not start with an upper-case letter" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (description "bad description.")))) (check-description-style pkg))) "description should start with an upper-case letter")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "description: may start with a digit"
source-file: "tests/lint.scm"
source-line: 164
source-form: (test-assert "description: may start with a digit" (string-null? (with-warnings (let ((pkg (dummy-package "x" (description "2-component library.")))) (check-description-style pkg)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "description: may start with lower-case package name"
source-file: "tests/lint.scm"
source-line: 171
source-form: (test-assert "description: may start with lower-case package name" (string-null? (with-warnings (let ((pkg (dummy-package "x" (description "x is a dummy package.")))) (check-description-style pkg)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "description: two spaces after end of sentence"
source-file: "tests/lint.scm"
source-line: 178
source-form: (test-assert "description: two spaces after end of sentence" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (description "Bad. Quite bad.")))) (check-description-style pkg))) "sentences in description should be followed by two spaces")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "description: end-of-sentence detection with abbreviations"
source-file: "tests/lint.scm"
source-line: 186
source-form: (test-assert "description: end-of-sentence detection with abbreviations" (string-null? (with-warnings (let ((pkg (dummy-package "x" (description "E.g. Foo, i.e. Bar resp. Baz (a.k.a. DVD).")))) (check-description-style pkg)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "synopsis: not empty"
source-file: "tests/lint.scm"
source-line: 194
source-form: (test-assert "synopsis: not empty" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (synopsis "")))) (check-synopsis-style pkg))) "synopsis should not be empty")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "synopsis: does not start with an upper-case letter"
source-file: "tests/lint.scm"
source-line: 202
source-form: (test-assert "synopsis: does not start with an upper-case letter" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (synopsis "bad synopsis.")))) (check-synopsis-style pkg))) "synopsis should start with an upper-case letter")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "synopsis: may start with a digit"
source-file: "tests/lint.scm"
source-line: 210
source-form: (test-assert "synopsis: may start with a digit" (string-null? (with-warnings (let ((pkg (dummy-package "x" (synopsis "5-dimensional frobnicator")))) (check-synopsis-style pkg)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "synopsis: ends with a period"
source-file: "tests/lint.scm"
source-line: 217
source-form: (test-assert "synopsis: ends with a period" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (synopsis "Bad synopsis.")))) (check-synopsis-style pkg))) "no period allowed at the end of the synopsis")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "synopsis: ends with 'etc.'"
source-file: "tests/lint.scm"
source-line: 225
source-form: (test-assert "synopsis: ends with 'etc.'" (string-null? (with-warnings (let ((pkg (dummy-package "x" (synopsis "Foo, bar, etc.")))) (check-synopsis-style pkg)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "synopsis: starts with 'A'"
source-file: "tests/lint.scm"
source-line: 231
source-form: (test-assert "synopsis: starts with 'A'" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (synopsis "A bad synop\u015dis")))) (check-synopsis-style pkg))) "no article allowed at the beginning of the synopsis")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "synopsis: starts with 'An'"
source-file: "tests/lint.scm"
source-line: 239
source-form: (test-assert "synopsis: starts with 'An'" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (synopsis "An awful synopsis")))) (check-synopsis-style pkg))) "no article allowed at the beginning of the synopsis")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "synopsis: starts with 'a'"
source-file: "tests/lint.scm"
source-line: 247
source-form: (test-assert "synopsis: starts with 'a'" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (synopsis "a bad synopsis")))) (check-synopsis-style pkg))) "no article allowed at the beginning of the synopsis")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "synopsis: starts with 'an'"
source-file: "tests/lint.scm"
source-line: 255
source-form: (test-assert "synopsis: starts with 'an'" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (synopsis "an awful synopsis")))) (check-synopsis-style pkg))) "no article allowed at the beginning of the synopsis")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "synopsis: too long"
source-file: "tests/lint.scm"
source-line: 263
source-form: (test-assert "synopsis: too long" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (synopsis (make-string 80 #\x))))) (check-synopsis-style pkg))) "synopsis should be less than 80 characters long")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "synopsis: start with package name"
source-file: "tests/lint.scm"
source-line: 271
source-form: (test-assert "synopsis: start with package name" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (name "foo") (synopsis "foo, a nice package")))) (check-synopsis-style pkg))) "synopsis should not start with the package name")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "synopsis: start with package name prefix"
source-file: "tests/lint.scm"
source-line: 280
source-form: (test-assert "synopsis: start with package name prefix" (string-null? (with-warnings (let ((pkg (dummy-package "arb" (synopsis "Arbitrary precision")))) (check-synopsis-style pkg)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "synopsis: start with abbreviation"
source-file: "tests/lint.scm"
source-line: 287
source-form: (test-assert "synopsis: start with abbreviation" (string-null? (with-warnings (let ((pkg (dummy-package "uucp" (synopsis "UUCP implementation") (description "Imagine this is Taylor UUCP.")))) (check-synopsis-style pkg)))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "inputs: pkg-config is probably a native input"
source-file: "tests/lint.scm"
source-line: 296
source-form: (test-assert "inputs: pkg-config is probably a native input" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (inputs (quasiquote (("pkg-config" (unquote pkg-config)))))))) (check-inputs-should-be-native pkg))) "pkg-config should probably be a native input")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "patches: file names"
source-file: "tests/lint.scm"
source-line: 305
source-form: (test-assert "patches: file names" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (source (origin (method url-fetch) (uri "someurl") (sha256 "somesha") (patches (list "/path/to/y.patch"))))))) (check-patch-file-names pkg))) "file names of patches should start with the package name")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "patches: not found"
source-file: "tests/lint.scm"
source-line: 319
source-form: (test-assert "patches: not found" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (source (origin (method url-fetch) (uri "someurl") (sha256 "somesha") (patches (list (search-patch "this-patch-does-not-exist!")))))))) (check-patch-file-names pkg))) "patch not found")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "derivation: invalid arguments"
source-file: "tests/lint.scm"
source-line: 334
source-form: (test-assert "derivation: invalid arguments" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (arguments (quote (#:imported-modules (invalid-module))))))) (check-derivation pkg))) "failed to create derivation")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "license: invalid license"
source-file: "tests/lint.scm"
source-line: 344
source-form: (test-assert "license: invalid license" (string-contains (with-warnings (check-license (dummy-package "x" (license #f)))) "invalid license"))
Test end:
result-kind: pass
actual-value: 28
Test begin:
test-name: "home-page: wrong home-page"
source-file: "tests/lint.scm"
source-line: 350
source-form: (test-assert "home-page: wrong home-page" (->bool (string-contains (with-warnings (let ((pkg (package (inherit (dummy-package "x")) (home-page #f)))) (check-home-page pkg))) "invalid")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "home-page: invalid URI"
source-file: "tests/lint.scm"
source-line: 360
source-form: (test-assert "home-page: invalid URI" (->bool (string-contains (with-warnings (let ((pkg (package (inherit (dummy-package "x")) (home-page "foobar")))) (check-home-page pkg))) "invalid home page URL")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "home-page: host not found"
source-file: "tests/lint.scm"
source-line: 370
source-form: (test-assert "home-page: host not found" (->bool (string-contains (with-warnings (let ((pkg (package (inherit (dummy-package "x")) (home-page "http://does-not-exist")))) (check-home-page pkg))) "domain not found")))
Test end:
result-kind: fail
actual-value: #f
Test begin:
test-name: "home-page: Connection refused"
source-file: "tests/lint.scm"
source-line: 381
source-form: (test-assert "home-page: Connection refused" (->bool (string-contains (with-warnings (let ((pkg (package (inherit (dummy-package "x")) (home-page %local-url)))) (check-home-page pkg))) "Connection refused")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "home-page: 200"
source-file: "tests/lint.scm"
source-line: 392
source-form: (test-equal "home-page: 200" "" (with-warnings (with-http-server 200 (let ((pkg (package (inherit (dummy-package "x")) (home-page %local-url)))) (check-home-page pkg)))))
Test end:
result-kind: pass
actual-value: ""
expected-value: ""
Test begin:
test-name: "home-page: 404"
source-file: "tests/lint.scm"
source-line: 402
source-form: (test-assert "home-page: 404" (->bool (string-contains (with-warnings (with-http-server 404 (let ((pkg (package (inherit (dummy-package "x")) (home-page %local-url)))) (check-home-page pkg)))) "not reachable: 404")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "source-file-name"
source-file: "tests/lint.scm"
source-line: 413
source-form: (test-assert "source-file-name" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (version "3.2.1") (source (origin (method url-fetch) (uri "http://www.example.com/3.2.1.tar.gz") (sha256 %null-sha256)))))) (check-source-file-name pkg))) "file name should contain the package name")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "source-file-name: v prefix"
source-file: "tests/lint.scm"
source-line: 427
source-form: (test-assert "source-file-name: v prefix" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (version "3.2.1") (source (origin (method url-fetch) (uri "http://www.example.com/v3.2.1.tar.gz") (sha256 %null-sha256)))))) (check-source-file-name pkg))) "file name should contain the package name")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "source-file-name: bad checkout"
source-file: "tests/lint.scm"
source-line: 441
source-form: (test-assert "source-file-name: bad checkout" (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (version "3.2.1") (source (origin (method git-fetch) (uri (git-reference (url "http://www.example.com/x.git") (commit "0"))) (sha256 %null-sha256)))))) (check-source-file-name pkg))) "file name should contain the package name")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "source-file-name: good checkout"
source-file: "tests/lint.scm"
source-line: 457
source-form: (test-assert "source-file-name: good checkout" (not (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (version "3.2.1") (source (origin (method git-fetch) (uri (git-reference (url "http://git.example.com/x.git") (commit "0"))) (file-name (string-append "x-" version)) (sha256 %null-sha256)))))) (check-source-file-name pkg))) "file name should contain the package name"))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "source-file-name: valid"
source-file: "tests/lint.scm"
source-line: 475
source-form: (test-assert "source-file-name: valid" (not (->bool (string-contains (with-warnings (let ((pkg (dummy-package "x" (version "3.2.1") (source (origin (method url-fetch) (uri "http://www.example.com/x-3.2.1.tar.gz") (sha256 %null-sha256)))))) (check-source-file-name pkg))) "file name should contain the package name"))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "source: 200"
source-file: "tests/lint.scm"
source-line: 491
source-form: (test-equal "source: 200" "" (with-warnings (with-http-server 200 (let ((pkg (package (inherit (dummy-package "x")) (source (origin (method url-fetch) (uri %local-url) (sha256 %null-sha256)))))) (check-source pkg)))))
Test end:
result-kind: pass
actual-value: ""
expected-value: ""
Test begin:
test-name: "source: 404"
source-file: "tests/lint.scm"
source-line: 504
source-form: (test-assert "source: 404" (->bool (string-contains (with-warnings (with-http-server 404 (let ((pkg (package (inherit (dummy-package "x")) (source (origin (method url-fetch) (uri %local-url) (sha256 %null-sha256)))))) (check-source pkg)))) "not reachable: 404")))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "cve"
source-file: "tests/lint.scm"
source-line: 518
source-form: (test-assert "cve" (mock ((guix scripts lint) package-vulnerabilities (const (quote ()))) (string-null? (with-warnings (check-vulnerabilities (dummy-package "x"))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "cve: one vulnerability"
source-file: "tests/lint.scm"
source-line: 523
source-form: (test-assert "cve: one vulnerability" (mock ((guix scripts lint) package-vulnerabilities (lambda (package) (list (make-struct (@@ (guix cve) <vulnerability>) 0 "CVE-2015-1234" (list (cons (package-name package) (package-version package))))))) (string-contains (with-warnings (check-vulnerabilities (dummy-package "pi" (version "3.14")))) "vulnerable to CVE-2015-1234")))
Test end:
result-kind: pass
actual-value: 41
Test begin:
test-name: "cve: one patched vulnerability"
source-file: "tests/lint.scm"
source-line: 535
source-form: (test-assert "cve: one patched vulnerability" (mock ((guix scripts lint) package-vulnerabilities (lambda (package) (list (make-struct (@@ (guix cve) <vulnerability>) 0 "CVE-2015-1234" (list (cons (package-name package) (package-version package))))))) (string-null? (with-warnings (check-vulnerabilities (dummy-package "pi" (version "3.14") (source (dummy-origin (patches (list "/a/b/pi-CVE-2015-1234.patch"))))))))))
Test end:
result-kind: pass
actual-value: #t
Test begin:
test-name: "formatting: lonely parentheses"
source-file: "tests/lint.scm"
source-line: 552
source-form: (test-assert "formatting: lonely parentheses" (string-contains (with-warnings (check-formatting (dummy-package "ugly as hell!"))) "lonely"))
Test end:
result-kind: pass
actual-value: 66
Test begin:
test-name: "formatting: tabulation"
source-file: "tests/lint.scm"
source-line: 562
source-form: (test-assert "formatting: tabulation" (string-contains (with-warnings (check-formatting (dummy-package "leave the tab here:\t"))) "tabulation"))
Test end:
result-kind: pass
actual-value: 47
Test begin:
test-name: "formatting: trailing white space"
source-file: "tests/lint.scm"
source-line: 568
source-form: (test-assert "formatting: trailing white space" (string-contains (with-warnings (check-formatting (dummy-package "x"))) "trailing white space"))
Test end:
result-kind: pass
actual-value: 28
Test begin:
test-name: "formatting: long line"
source-file: "tests/lint.scm"
source-line: 575
source-form: (test-assert "formatting: long line" (string-contains (with-warnings (check-formatting (dummy-package "x"))) "too long"))
Test end:
result-kind: pass
actual-value: 43
Test begin:
test-name: "formatting: alright"
source-file: "tests/lint.scm"
source-line: 583
source-form: (test-assert "formatting: alright" (string-null? (with-warnings (check-formatting (dummy-package "x")))))
Test end:
result-kind: pass
actual-value: #t
Group end: lint
# of expected passes 45
# of unexpected failures 1
next prev parent reply other threads:[~2016-01-27 17:28 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-27 15:53 bug#22475: guix make check FAIL rennes
2016-01-27 16:58 ` Mathieu Lirzin
2016-01-27 17:18 ` Andreas Enge
2016-01-27 17:27 ` rennes [this message]
2016-01-31 9:21 ` Ludovic Courtès
2016-01-28 21:11 ` Alex Kost
2016-01-29 2:43 ` rennes
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=224f732389ffa6f4aad0d4056082d8ba@openmailbox.org \
--to=rennes@openmailbox.org \
--cc=22475@debbugs.gnu.org \
--cc=mthl@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).