Commit graph

2294 commits

Author SHA1 Message Date
Maxim Cournoyer
3ae5c9f2a7
Revert "syscalls: Add mmap support."
This reverts commit e1994a0214.
2025-10-30 16:19:51 +09:00
Maxim Cournoyer
0f39db9c19
Revert "Use mmap for the elf parser, reducing memory usage."
This reverts commit 2c1fe0df11.
2025-10-30 16:19:50 +09:00
Maxim Cournoyer
9d60fdf6a2
Revert "elf: Remove bundled Guile source."
This reverts commit 11cf5b2fe4.
2025-10-30 16:19:49 +09:00
Maxim Cournoyer
11cf5b2fe4
elf: Remove bundled Guile source.
This module has been included in Guile as (system vm elf) since around version
2.1.

* guix/elf.scm: Delete file.
* CODEOWNERS: De-register module.
* Makefile.am (MODULES): Likewise.
* etc/teams.scm (core): Likewise.
* gnu/build/linux-modules.scm: Adjust imports.
* gnu/packages/gnuzilla.scm (icecat-minimal) [modules]: Likewise.
* gnu/packages/librewolf.scm (librewolf): Likewise.
* gnu/packages/sequoia.scm (sequoia): Likewise.
* gnu/packages/tor-browsers.scm (make-torbrowser): Likewise.
* gnu/packages/version-control.scm (hg-commitsigs): Likewise.
* guix/build/debug-link.scm: Likewise.
* guix/build/gnu-build-system.scm: Likewise.
* guix/build/gremlin.scm: Likewise.
* guix/build/meson-build-system.scm: Likewise.
* guix/grafts.scm (graft-derivation/shallow): Likewise.
* guix/scripts/pack.scm (wrapped-package): Likewise.
* tests/debug-link.scm: ("elf-debuglink", "set-debuglink-crc"): Likewise.
* tests/gremlin.scm: Likewise.
* guix/build-system/gnu.scm (%default-gnu-imported-modules): Remove (guix elf).

Change-Id: I86ac4237fdd820a6b54dc0fe7a7d10403a290ef9
2025-10-30 16:13:03 +09:00
Maxim Cournoyer
2c1fe0df11
Use mmap for the elf parser, reducing memory usage.
The `file->bytevector' new procedure uses a memory mapped bytevector, so
parsing the ELF file reads only the sections needed, not the whole file.

* guix/scripts/pack.scm (wrapped-package): Use file->bytevector.
* guix/build/gremlin.scm (file-dynamic-info): Likewise.
(validate-needed-in-runpath): Likewise.
(strip-runpath): Likewise, and write to bytevector directly, avoiding a port.
(set-file-runpath): Likewise.
* tests/gremlin.scm (read-elf): Delete procedure.
("elf-dynamic-info-needed, executable"): Use file-dynamic-info.
("strip-runpath"): Likewise.
("elf-dynamic-info-soname"): Likewise.
 guix/build/debug-link.scm (set-debuglink-crc): Use file->bytevector.
* tests/debug-link.scm (read-elf): Delete procedure.
("elf-debuglink"): Rename to...
("elf-debuglink, no .gnu_debuglink section"): ... this.
("elf-debuglink", "set-debuglink-crc"): Use external store, and adjust to use
file->bytevector.
* gnu/packages/gnuzilla.scm (icecat-minimal) [#:phases]
{build-sandbox-whitelist}: Use `file-runpath'.
* gnu/packages/librewolf.scm (librewolf): Likewise.

Fixes: <https://issues.guix.gnu.org/59365>
Fixes: #1262
Change-Id: I43b77ed0cdc38994ea89d3d401e0d136aa6b187a
2025-10-30 16:13:03 +09:00
Maxim Cournoyer
e1994a0214
syscalls: Add mmap support.
* guix/build/syscalls.scm (PROT_NONE, PROT_READ, PROT_WRITE, PROT_EXEC)
(PROT_SEM, MAP_SHARED, MAP_PRIVATE, MAP_FAILED)
(MS_ASYNC, MS_INVALIDATE, MS_SYNC)
(%mmap-guardian, %unmapped-bytevectors): New variables.
(unmapped-bytevector?, pump-mmap-guardian, %mmap, mmap, %munmap, munmap)
(%msync, msync): New procedures.
* guix/build/io.scm: New file.
* Makefile.am: Register it.
* tests/syscalls.scm (strace-output): New variable.
("mmap and munmap", "file->bytevector, reading", "file->bytevector, writing")
("manual munmap does not lead to double free"): New tests.

Change-Id: I19ec687899eda635559e91200dd8d98669b0e35f
2025-10-30 16:13:03 +09:00
Maxim Cournoyer
79dcb79e1f
tests: New ld-wrapper test.
* tests/ld-wrapper.scm: New file.
* Makefile.am (SCM_TESTS): Register it.

Change-Id: I3cef5ff363226a3ceee2599d4906f107d6ae7151
Reviewed-by: Ludovic Courtès <ludo@gnu.org>
2025-10-29 11:51:24 +09:00
Maxim Cournoyer
1eccea7ffb
build/syscalls: Introduce new safe-clone and use it.
* guix/build/syscalls.scm (without-automatic-finalization): Accept multiple
expressions.
(without-garbage-collection): New syntax.
(without-threads): Likewise.
(ensure-signal-delivery-thread, safe-clone): New procedures.
* tests/syscalls.scm: ("clone and unshare triggers EINVAL")
("safe-clone and unshare succeeds"): New tests.
* gnu/build/linux-container.scm (run-container): Adjust to use 'safe-clone'.

Relates-to: #1169
Change-Id: I044c11a899e24e547a7aed97f30c8e7250ab5363
2025-10-29 11:34:28 +09:00
Maxim Cournoyer
10edda5aa5
Reinstate "linux-container: Remove #:lock-mounts? and related code."
This reverts commit e0e64be8de.
2025-10-29 11:34:28 +09:00
Nicolas Graves
a1b0fde434
style: Add git-source rule.
* guix/scripts/style.scm (transform-to-git-fetch)
(url-fetch->git-fetch): New procedures.
* doc/guix.texi: Add entry for git-source.
* tests/style.scm: Add tests for url-fetch->git-fetch.

Change-Id: I6192fba4d84619b81fbc75850542b9dbd2326d4a
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-24 16:42:54 +02:00
Nicolas Graves
6aaed933bf
import: utils: Add generate-git-source procedure.
This procedure tries to generate a <origin> sexp from a single url and
version.

* guix/import/utils.scm (generate-git-source): Add procedure.
* tests/import/utils.scm: Add tests for generate-git-source.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-24 16:42:53 +02:00
Nicolas Graves
438a003051
import: utils: Fix default-git-error.
This function was missing one argument.

* guix/import/utils.scm (default-git-error): Add and document location
argument.
* tests/import/utils.scm: Add tests for default-git-error.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-24 16:42:53 +02:00
Nigko Yerden
930ea819a5
gexp: Make 'local-file' follow symlinks.
Fix <https://lists.gnu.org/archive/html/guix-devel/2024-08/msg00047.html>
via making 'current-source-directory' always follow symlinks.

* guix/utils.scm (absolute-dirname, current-source-directory): Make
them follow symlinks.
* tests/gexp.scm ("local-file, load through symlink"): New test.

Fixes: guix/guix#3523
Change-Id: Ieb30101275deb56b7436df444f9bc21d240fba59
Signed-off-by: Florian Pelz <pelzflorian@pelzflorian.de>
2025-10-23 12:59:08 +02:00
Martin Schitter
e2ead32fe0
tests: guix-daemon.sh: Ignore guile locale warning.
Ignore "guile: warning: failed to install locale" lines
in the examined build log file. They are irrelevant for
this particular test and cause unexpected errors.

This commit contains the following changes:

    M tests/guix-daemon.sh

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-19 21:29:38 +02:00
Martin Schitter
590eb9ef40
tests: Increase test timeout and honor ‘GUIX_TESTS_BUILD_TIMEOUT’.
Rigid build time limits let some unit tests fail on slow hardware.

Set default timeout to 5 minutes and make it configurable via
`GUIX_TESTS_BUILD_TIMEOUT` environment variable.

* guix/tests.scm (%tests-build-timeout): New variable.
(open-connection-for-tests, call-with-external-store): Use it.
* tests/guix-environment-container.sh, tests/guix-home.sh,
tests/guix-pack-localstatedir.sh, tests/guix-pack-relocatable.sh: Use it to
define ‘GUIX_BUILD_OPTIONS’.

Change-Id: Iab63c2dcf4a3ad311a0cf2f39d7ea2ec158ddbb4
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-17 12:23:54 +02:00
Ludovic Courtès
a92d98a7fa
daemon: Attempt to map the “kvm” group inside the build user namespace.
Fixes <https://issues.guix.gnu.org/77862>.

Previously, the ‘guix-daemon’ account (for unprivileged execution) would
typically have “kvm” as a supplementary group, but that group would not
be mapped in the build user namespace.  Consequently, attempts to
‘chown’ a file to that supplementary group would fail with EINVAL.

The test suites of Coreutils, Python, and Go (among others) exercise
this chown-to-supplementary-group behavior, so they would all fail when
started by the unprivileged ‘guix-daemon’ even though they succeed when
started by ‘guix-daemon’ running as root.

Thanks to keinflue <keinflue@posteo.net> and Reepca Russelstein
<reepca@russelstein.xyz> for helping out.

* nix/libstore/build.cc (initializeUserNamespace): Add ‘extraGIDs’ and
‘haveCapSetGID’ parameters.  Invoke ‘newgidmap’ when ‘extraGIDs’ is
non-empty and ‘haveCapSetGID’ is false.  Honor ‘extraGIDs’ when
‘haveCapSetGID’ is true.
(maxGroups, guestKVMGID): New variables.
(kvmGIDMapping): New function.
(DerivationGoal::startBuilder): Set ‘ctx.lockMountsMapAll’ in the
CLONE_NEWUSER case.  Pass ‘extraGIDs’ to ‘initializeUserNamespace’.
* tests/store.scm ("kvm GID is mapped"): New test.

Change-Id: I10ba710fc1b9ca1e3cd3122be1ec8ede5df18b40
2025-10-16 15:14:37 +02:00
Ludovic Courtès
e0e64be8de
linux-container: Remove #:lock-mounts? and related code.
This reverts commits 437bb9ece5 and
a57ed987ff, which were reported in
guix/guix#1169 to occasionally cause errors like:

  guix shell: error: unshare : 268566528: Invalid argument
2025-10-13 14:48:26 +02:00
Reepca Russelstein
55a10ce4e6
tests: don't use 'file://...' URIs for testing git downloads.
While 'url-fetch*' in (guix download) special-cases these URIs, 'git-fetch'
does not.  Consequently, the recent changes to (guix scripts perform-download)
that disallow these URIs cause tests that use builtin:git-download to fail.

* guix/tests/git.scm (serve-git-repository, call-with-served-git-repository):
  new procedures.
  (with-served-git-repository, with-served-temporary-git-repository): new
  syntax.
* .dir-locals.el (scheme-mode): add indentation information for
  'with-served-git-repository'.
* tests/builders.scm ("git-fetch, file URI"): use git:// URI with
  'with-served-temporary-git-repository'.
* tests/derivations.scm ("'git-download' build-in builder, invalid hash",
  "'git-download' built-in builder, invalid commit", "'git-download' built-in
  builder, not found"): same.
  ("'git-download' built-in builder"): same, and use a nonce in the repo
  contents so that success isn't cached.

Change-Id: Id3e1233bb74d5987faf89c4341e1d37f09c77c80
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-12 22:22:01 +02:00
Maxim Cournoyer
26729b9cf0
tests: guix-system: Add test for 'guix system container'.
* tests/guix-system.sh: Add test.

Change-Id: I26c90741f17257dc50757b7cb5210ea4e645ecce
2025-10-11 21:57:59 +09:00
Nicolas Graves
3fa75fd152
import: gem: Move tests to tests/import/gem.scm.
Follow-up forgotten in 94df3e6f28.

* tests/gem.scm: Move to tests/import/gem.scm.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-08 10:57:00 +02:00
Brennan Vincent
ef42ecb8cb
tests: Fix ‘store-deduplication.scm’ on systems with large blocks.
Fixes <https://issues.guix.gnu.org/74862>.

In particular, this makes it possible to build guix on Asahi, whose tmpfs has
16KiB blocks by default.

* tests/store-deduplication.scm
("copy-file/deduplicate, sparse files (holes: ~a/~a/~a)"): Scale hole sizes so
the test works with blocks bigger than 4KiB.

Change-Id: I92fee04f6f69d4e5bfea7443991303ad68da7b2c
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-06 10:42:08 +02:00
Danny Milosavljevic
548f225f31
grafts: Always depend on all the outputs of the original derivation.
Fixes <https://bugs.gnu.org/75157>.
Fixes problem introduced with commit 482fda2729.

* guix/grafts.scm (cumulative-grafts): Remove parameter "outputs" and replace
it by always all outputs.
(graft-derivation): Fix calls of cumulative-grafts.
* tests/grafts.scm (graft-derivation with #:outputs): Remove.
(graft-derivation, no applicable grafts): Add.
(graft-derivation, unused outputs not depended on): Remove.
(graft-derivation, multi-output graft determinism): Add.
(graft-derivation, consistent cache keys): Add.

Change-Id: Ice924a45c483d6fd1acc9221a0ec650abb039610
2025-10-05 20:30:45 +02:00
Nicolas Graves
1dab0f01bb
import: utils: Move tests to tests/import/utils.scm.
* tests/utils.scm: Move to tests/import/utils.scm.
* Makefile.am: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:04:17 +02:00
Nicolas Graves
12e6d3b48f
import: npm-binary: Move tests to tests/import/npm-binary.scm.
* tests/npm-binary.scm: Move to tests/import/npm-binary.scm.
* Makefile.am: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:04:17 +02:00
Nicolas Graves
a14df09097
import: composer: Move tests to tests/import/composer.scm.
* tests/composer.scm: Move to tests/import/composer.scm.
* Makefile.am: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:04:17 +02:00
Nicolas Graves
a34376aa71
import: texlive: Move tests to tests/import/texlive.scm.
* tests/texlive.scm: Move to tests/import/texlive.scm.
* Makefile.am: Refresh it.
* CODEOWNERS: Refresh it.
* etc/teams.scm: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:04:16 +02:00
Nicolas Graves
0dba512d86
import: luanti: Move tests to tests/import/luanti.scm.
* tests/luanti.scm: Move to tests/import/luanti.scm.
* Makefile.am: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:04:16 +02:00
Nicolas Graves
15b351691e
import: github: Move tests to tests/import/github.scm.
* tests/import-github.scm: Move to tests/import/github.scm.
* Makefile.am: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:04:16 +02:00
Nicolas Graves
16c08ac5d8
import: print: Move tests to tests/import/print.scm.
* tests/print.scm: Move to tests/import/print.scm.
* Makefile.am: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:04:16 +02:00
Nicolas Graves
090d574dbf
import: hexpm: Move tests to tests/import/hexpm.scm.
* tests/hexpm.scm: Move to tests/import/hexpm.scm.
* Makefile.am: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:04:16 +02:00
Nicolas Graves
5507b1bfc0
import: opam: Move tests to tests/import/opam.scm.
* tests/opam.scm: Move to tests/import/opam.scm.
* Makefile.am: Refresh it.
* CODEOWNERS: Refresh it.
* etc/teams.scm: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:04:16 +02:00
Nicolas Graves
fc905a5a69
import: elpa: Move tests to tests/import/elpa.scm.
* tests/elpa.scm: Move to tests/import/elpa.scm.
* Makefile.am: Refresh it.
* CODEOWNERS: Refresh it.
* etc/teams.scm: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:04:16 +02:00
Nicolas Graves
7a41349bed
import: cran: Move tests to tests/import/cran.scm.
* tests/cran.scm: Move to tests/import/cran.scm.
* Makefile.am: Refresh it.
* CODEOWNERS: Refresh it.
* etc/teams.scm: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:04:16 +02:00
Nicolas Graves
02f1ff69c6
import: git: Move tests to tests/import/git.scm.
* tests/import-git.scm: Move to tests/import/git.scm.
* Makefile.am: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:04:15 +02:00
Nicolas Graves
9bf4e572df
import: elm: Move tests to tests/import/elm.scm.
* tests/elm.scm: Move to tests/import/elm.scm.
* Makefile.am: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:00:36 +02:00
Nicolas Graves
bf468f4b70
import: egg: Move tests to tests/import/egg.scm.
* tests/egg.scm: Move to tests/import/egg.scm.
* Makefile.am: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:00:36 +02:00
Nicolas Graves
d4fda72d8f
import: go: Move tests to tests/import/go.scm.
* tests/go.scm: Move to tests/import/go.scm.
* Makefile.am: Refresh it.
* CODEOWNERS: Refresh it.
* etc/teams.scm: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:00:36 +02:00
Nicolas Graves
fbc1da99ea
import: crate: Move tests to tests/import/crate.scm.
* tests/crate.scm: Move to tests/import/crate.scm.
* Makefile.am: Refresh it.
* CODEOWNERS: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:00:36 +02:00
Nicolas Graves
d950c929e9
import: cpan: Move tests to tests/import/cpan.scm.
* tests/cpan.scm: Move to tests/import/cpan.scm.
* gnu/packages/admin.scm (ansible): Update comment.
* Makefile.am: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:00:36 +02:00
Nicolas Graves
5cf0daa657
import: hackage: Move tests to tests/import/hackage.scm.
* tests/hackage.scm: Move to tests/import/hackage.scm.
* Makefile.am: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:00:35 +02:00
Nicolas Graves
f1a3bf940c
import: pypi: Move tests to tests/import/pypi.scm
* tests/pypi.scm: Move to tests/import/pypi.scm
* CODEOWNERS: Refresh it.
* Makefile.am: Refresh it.
* etc/teams.scm: Refresh it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-10-01 11:00:35 +02:00
Maxim Cournoyer
8330598740
tests/pack: Fix rpm tests.
The rpm-for-tests would no longer build, due to the parent package having
migrated to CMake. Use the --dbpath argument instead of a variant test
package.

* tests/pack.scm (rpm-for-tests): Delete variable.
(rpm archive can be installed/uninstalled): Invoke rpm, not rpm-for-tests, but
with the --dbpath location specified.

Change-Id: I1b578db3ef8f1309c32c6ef92615814ca49fd22c
2025-09-30 16:52:07 +09:00
Maxim Cournoyer
539c37bcde
tests/builders: Avoid races in unpack tests.
* tests/builders.scm
<gnu-build-system unpack phase, single file>: Add sync call.

Change-Id: Iac992e0899fe3b9c9e727bd42860ec564e1dc9a2
2025-09-30 16:52:07 +09:00
Nicolas Graves via Guix-patches via
bd2470ca4d
import: utils: Add function git->origin.
* guix/import/utils.scm: (git-origin, git->origin): Add procedures.

* guix/import/elpa.scm
(download-git-repository): Remove function download-git-repository.
(git-repository->origin): Remove function git-repository->origin.
(ref): Add function ref.
(melpa-recipe->origin): Use functions git->origin and ref.

* guix/import/go.scm
(git-checkout-hash): Remove function git-checkout-hash.
(transform-version): Add function transform-version.
(vcs->origin): Use functions git->origin and transform-version. Add
optional argument transform-version.

* tests/import/go.scm
(go-module->guix-package): Adapt test case to changes in guix/import/go.scm.

* guix/import/luanti.scm
(download-git-repository): Remove function download-git-repository.
(make-luanti-sexp): Use function git->origin.

* tests/luanti.scm
(make-package-sexp): Refresh function accordingly.

* guix/import/composer.scm
(make-php-sexp): Use function git->origin.

Change-Id: Ied05a63bdd60fbafe26fbbb4e115ff6f0bb9db3c
Signed-off-by: Liliana Marie Prikler <liliana.prikler@gmail.com>
2025-09-24 19:16:53 +02:00
Ludovic Courtès
ea4eeeed03
tests: Adjust ‘package-transitive-supported-systems’ test.
This test broke with commit 8c9493cb31.

* tests/packages.scm ("package-transitive-supported-systems, implicit inputs"):
Change ‘%current-system’ to “riscv64-linux”.

Change-Id: Ia6d69f086cffea4144d2f032038b27ec91e904f3
2025-09-23 14:53:36 +02:00
Reepca Russelstein
c87a9b855e
daemon: Restore post-canonicalization permissions after moving.
At this point the value of 'st.st_mode' is from before canonicalization, so
restoring to that will undo the permissions aspect of the canonicalization for
a top-level directory store item.

Fixes #1104, introduced in
ae18b3d9e6 (ae18b3d9e6).

* nix/libstore/build.cc (DerivationGoal::registerOutputs): update 'st' with
  post-canonicalization permissions before making actualPath
  temporarily-writable.
* tests/store.scm ("build outputs aren't writable"): new test.

Change-Id: I5e5eaa79fa6b7f81e1d12fd285883c762a22ce5a
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-09-23 11:13:22 +02:00
Ludovic Courtès
e1cf791ddd
Revert "publish: Prevent publication of non-substitutable derivation outputs."
Fixes guix/guix#2450.

This reverts commit b5745a327e, which introduced
discrepancies in how substitutes are served; in particular, narinfos of
non-substitutable items would still be served, and likewise for narinfos and
nars of dependents of non-substitutable items.
2025-09-21 18:47:23 +02:00
Maxim Cournoyer
10482f731e
Reapply "Update Maxim's email address."
This reverts commit a7db92d9b3, this time with
the more careful command, to avoid a world rebuild:

grep -rl --exclude-dir=build --exclude-dir=patches --exclude=ld-wrapper.in \
  --exclude=sitecustomize.py --exclude=guix-emacs.el maxim.cournoyer@gmail.com |
  xargs sed -i 's/maxim.cournoyer@gmail.com/maxim@guixotic.coop/g'

Change-Id: I0871f5cf9ace79e34e78e24154d0da6ea95a3a91
2025-09-18 13:44:12 +09:00
Maxim Cournoyer
a7db92d9b3
Revert "Update Maxim's email address."
This reverts commit d0d87a744d. Oops! This
caused a world rebuild.

Change-Id: I25fff644b2b61d0ee93d69b457b04c72b5b74d15
2025-09-18 12:07:31 +09:00
Maxim Cournoyer
d0d87a744d
Update Maxim's email address.
The change was automated via:

  git grep -l maxim.cournoyer@gmail.com |
    xargs sed -i 's/maxim.cournoyer@gmail.com/maxim@guixotic.coop/g'

* .mailmap: New entry.

Change-Id: Iaa88b1e51c94159c49138fb43910badb990eb169
2025-09-18 08:05:19 +09:00