Subject: bug#45173: ‘guix search’ traverses all the modules when extra channels are used

From: Ludovic Courtès <[email-masked]>
Date: Fri, 11 Dec 2020 10:29:42 +0100

When a single channel is in use, ‘guix search’ understandable traverses
nothing but gnu/packages/*.scm:

--8<---------------cut here---------------start------------->8---
$ strace -o /tmp/,,s guix search sdfsdf
$ grep gnu/services /tmp/,,s
$ echo $?
1
--8<---------------cut here---------------end--------------->8---

But with multiple channels, all of the guile-module-union directory is
traversed, and that includes *everything*:

--8<---------------cut here---------------start------------->8---
$ /tmp/past/bin/guix describe
Generacio 1     Dec 11 2020 10:26:58    (nuna)
  guix-past 829923f
    repository URL: https://gitlab.inria.fr/guix-hpc/guix-past
    branch: master
    commit: 829923f01f894f1e687735627025ada26230832f
  guix f765577
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: f765577dec0340d035021d030f17b54a3a5fd6b1
$ strace -o /tmp/,,s /tmp/past/bin/guix search sdfsdf
$ grep gnu/services /tmp/,,s
stat("/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/share/guile/site/3.0/gnu/services.scm", {st_mode=S_IFREG|0444, st_size=41045, ...}) = 0
stat("/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/lib/guile/3.0/site-ccache/gnu/services.go", {st_mode=S_IFREG|0444, st_size=420021, ...}) = 0
openat(AT_FDCWD, "/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/lib/guile/3.0/site-ccache/gnu/services.go", O_RDONLY|O_CLOEXEC) = 14
stat("/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/share/guile/site/3.0/gnu/services/shepherd.scm", {st_mode=S_IFREG|0444, st_size=23156, ...}) = 0
stat("/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/lib/guile/3.0/site-ccache/gnu/services/shepherd.go", {st_mode=S_IFREG|0444, st_size=405997, ...}) = 0
openat(AT_FDCWD, "/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/lib/guile/3.0/site-ccache/gnu/services/shepherd.go", O_RDONLY|O_CLOEXEC) = 14
stat("/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/share/guile/site/3.0/gnu/services/herd.scm", {st_mode=S_IFREG|0444, st_size=10387, ...}) = 0
stat("/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/lib/guile/3.0/site-ccache/gnu/services/herd.go", {st_mode=S_IFREG|0444, st_size=188509, ...}) = 0
openat(AT_FDCWD, "/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/lib/guile/3.0/site-ccache/gnu/services/herd.go", O_RDONLY|O_CLOEXEC) = 14
stat("/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/share/guile/site/3.0/gnu/services/base.scm", {st_mode=S_IFREG|0444, st_size=110305, ...}) = 0
stat("/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/lib/guile/3.0/site-ccache/gnu/services/base.go", {st_mode=S_IFREG|0444, st_size=2203613, ...}) = 0
openat(AT_FDCWD, "/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/lib/guile/3.0/site-ccache/gnu/services/base.go", O_RDONLY|O_CLOEXEC) = 14
stat("/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/share/guile/site/3.0/gnu/services/admin.scm", {st_mode=S_IFREG|0444, st_size=12494, ...}) = 0
stat("/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/lib/guile/3.0/site-ccache/gnu/services/admin.go", {st_mode=S_IFREG|0444, st_size=416133, ...}) = 0
openat(AT_FDCWD, "/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/lib/guile/3.0/site-ccache/gnu/services/admin.go", O_RDONLY|O_CLOEXEC) = 14
stat("/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/share/guile/site/3.0/gnu/services/mcron.scm", {st_mode=S_IFREG|0444, st_size=7667, ...}) = 0
stat("/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/lib/guile/3.0/site-ccache/gnu/services/mcron.go", {st_mode=S_IFREG|0444, st_size=187549, ...}) = 0
openat(AT_FDCWD, "/gnu/store/3jnlvi2akawnxd1jq6m58kxc7nj07phc-guix-module-union/lib/guile/3.0/site-ccache/gnu/services/mcron.go", O_RDONLY|O_CLOEXEC) = 14
--8<---------------cut here---------------end--------------->8---

This was reported by bdju on #guix, who were getting the new SSH
password warning while running ‘guix search’.

Ludo’.