aboutsummaryrefslogtreecommitdiff
path: root/tests/guix-build.sh
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-10-20 09:18:07 +0200
committerLudovic Courtès <ludo@gnu.org>2020-10-20 16:30:15 +0200
commit8db4ebb0cd9bfdcf1aea63eb8d20eb6af0c87c93 (patch)
tree8510a314aad6e64e3709ba231ecb13d7959549cf /tests/guix-build.sh
parent2bd60ca1fb1b3a830ee644369b9a7f8c8b5d0404 (diff)
downloadguix-8db4ebb0cd9bfdcf1aea63eb8d20eb6af0c87c93.tar
guix-8db4ebb0cd9bfdcf1aea63eb8d20eb6af0c87c93.tar.gz
packages: Better preserve object identity when rewriting.
Fixes a bug whereby the presence of propagated inputs could lead to two non-eq? but actually equal packages in a bag's inputs. The problem would manifest itself when running, for instance: guix build inkscape -d --with-graft=glib=glib-networking --no-grafts The resulting derivation would differ due from that without '--with-graft'. This was due to the fact that glib propagates libffi; this instance of libffi was not rewritten even though other instances in the graph were rewritten. Thus, glib would end up with two non-eq? libffi instances, which in turn would lead to duplicate entries in its '%build-inputs' variable. Fixes <https://bugs.gnu.org/43890>. * guix/packages.scm (package-mapping)[rewrite]: Remove call to 'cut?' and call 'replace' unconditionally. [replace]: Add 'cut?' case. * tests/guix-build.sh: Add test combining '--no-grafts' and '--with-graft'. * tests/packages.scm ("package-input-rewriting/spec, identity") ("package-input-rewriting, identity"): New tests.
Diffstat (limited to 'tests/guix-build.sh')
-rw-r--r--tests/guix-build.sh6
1 files changed, 6 insertions, 0 deletions
diff --git a/tests/guix-build.sh b/tests/guix-build.sh
index 4a58ea1476..b7602e668c 100644
--- a/tests/guix-build.sh
+++ b/tests/guix-build.sh
@@ -289,6 +289,12 @@ drv1=`guix build glib -d`
drv2=`guix build glib -d --with-input=libreoffice=inkscape`
test "$drv1" = "$drv2"
+# '--with-graft' should have no effect when using '--no-grafts'.
+# See <https://bugs.gnu.org/43890>.
+drv1=`guix build inkscape -d --no-grafts`
+drv2=`guix build inkscape -d --no-grafts --with-graft=glib=glib-networking`
+test "$drv1" = "$drv2"
+
# Rewriting implicit inputs.
drv1=`guix build hello -d`
drv2=`guix build hello -d --with-input=gcc=gcc-toolchain`