From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52415) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dIXCD-0007mw-Ur for guix-patches@gnu.org; Wed, 07 Jun 2017 05:24:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dIXC8-0000vL-Cm for guix-patches@gnu.org; Wed, 07 Jun 2017 05:24:09 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:57636) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dIXC8-0000uZ-92 for guix-patches@gnu.org; Wed, 07 Jun 2017 05:24:04 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1dIXC5-0002Vb-PL for guix-patches@gnu.org; Wed, 07 Jun 2017 05:24:01 -0400 Subject: bug#27271: [PATCH 0/4] Catch collisions at profile creation time Resent-Message-ID: Received: from eggs.gnu.org ([2001:4830:134:3::10]:52189) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dIXB8-0007kl-7w for guix-patches@gnu.org; Wed, 07 Jun 2017 05:23:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dIXB6-0000Wf-SJ for guix-patches@gnu.org; Wed, 07 Jun 2017 05:23:02 -0400 From: Ludovic =?UTF-8?Q?Court=C3=A8s?= Date: Wed, 7 Jun 2017 11:22:42 +0200 Message-Id: <20170607092242.20565-1-ludo@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: 27271@debbugs.gnu.org Hello Guix! These patches allow us to catch problematic collisions when computing a profile derivation. As we know, the profile builder often spits out a number of warnings about collisions but that is not very useful because users cannot distinguish the problematic cases from the harmless cases (an example of a harmless case is when GDB and Binutils provide an almost-identical .info file twice). Concretely, what happens is something like this: --8<---------------cut here---------------start------------->8--- $ ./pre-inst-env guix package -i guile-cairo -n The following package would be upgraded: guile-cairo 1.4.1 → 1.4.1 /gnu/store/k9p7j9ijb9vfkmvcgr4vqy20vkg6nsbg-guile-cairo-1.4.1 guix package: error: profile contains conflicting entries for guile-cairo:out guix package: error: first entry: guile-cairo@1.4.1:out /gnu/store/k9p7j9ijb9vfkmvcgr4vqy20vkg6nsbg-guile-cairo-1.4.1 guix package: error: second entry: guile-cairo@1.4.1:out /gnu/store/x0jp2q06snx7skrqdmlkn0r5fhyvvn00-guile-cairo-1.4.1 guix package: error: ... propagated from guile-rsvg@2.18.1 $ ./pre-inst-env guix package -i guile-cairo guile-rsvg guile-present -n The following packages would be upgraded: guile-cairo 1.4.1 → 1.4.1 /gnu/store/k9p7j9ijb9vfkmvcgr4vqy20vkg6nsbg-guile-cairo-1.4.1 guile-rsvg 2.18.1 → 2.18.1 /gnu/store/xp8wcyvhplsv45gkj9r4n6zmcdancfkn-guile-rsvg-2.18.1 guile-present 0.3.0 → 0.3.0 /gnu/store/qwk8fzijyllaxv4vw114gqzix1qvfmp2-guile-present-0.3.0 guix package: error: profile contains conflicting entries for guile-cairo:out guix package: error: first entry: guile-cairo@1.4.1:out /gnu/store/k9p7j9ijb9vfkmvcgr4vqy20vkg6nsbg-guile-cairo-1.4.1 guix package: error: second entry: guile-cairo@1.4.1:out /gnu/store/x0jp2q06snx7skrqdmlkn0r5fhyvvn00-guile-cairo-1.4.1 guix package: error: ... propagated from guile-charting@0.2.0 $ ./pre-inst-env guix package -i guile-cairo guile-rsvg guile-charting guile-present -n The following packages would be upgraded: guile-cairo 1.4.1 → 1.4.1 /gnu/store/k9p7j9ijb9vfkmvcgr4vqy20vkg6nsbg-guile-cairo-1.4.1 guile-rsvg 2.18.1 → 2.18.1 /gnu/store/xp8wcyvhplsv45gkj9r4n6zmcdancfkn-guile-rsvg-2.18.1 guile-charting 0.2.0 → 0.2.0 /gnu/store/11368xymyhk4zz8zwvbdmp5dzcl0vxvc-guile-charting-0.2.0 guile-present 0.3.0 → 0.3.0 /gnu/store/qwk8fzijyllaxv4vw114gqzix1qvfmp2-guile-present-0.3.0 substitute: updating list of substitutes from 'https://bayfront.guixsd.org'... 100.0% substitute: updating list of substitutes from 'https://mirror.hydra.gnu.org'... 100.0% The following derivations would be built: /gnu/store/r361w7fa57vm7js8lk4bnsc7lwv2avby-profile.drv /gnu/store/l5hf8cg5fx6par39659ihkhdgp3kls1n-xdg-mime-database.drv /gnu/store/k8jmvc8yjk3qg8xbgcfgpgngq7vkygld-info-dir.drv /gnu/store/ivnqmwwxwric5lhw5gqnpkxq6gbzj23i-fonts-dir.drv /gnu/store/hdaasxvm64h06xxzwrnx2gch981h88wf-ca-certificate-bundle.drv /gnu/store/axzp9vj4h59nnbmf6ccaajb9qq97xwb8-gtk-icon-themes.drv /gnu/store/8dkb7k53x1c0zhb9qdgrgr53j5j3biwf-gtk-im-modules.drv /gnu/store/v2w6qpf0kk2d70wv01f3ln1v758sgzqm-manual-database.drv --8<---------------cut here---------------end--------------->8--- As in the example above, conflicts may arise when doing a partial upgrade of a profile, because this is a situation where you can easily end up with conflicting versions of a given package. It’s much less likely when using ‘guix package -m’ or similar. An open question is whether there are commonly used combinations of packages that trigger conflicts. I haven’t had any problems with my profile (with 234 packages) nor with my GuixSD config, but I encourage you to test it on your profile! Thoughts? Ludo’. Ludovic Courtès (3): profiles: Represent propagated inputs as manifest entries. profiles: Manifest entries keep a reference to their parent entry. profiles: Catch and report collisions in the profile. guix/profiles.scm | 241 +++++++++++++++++++++++++++++++++++++++++------------ guix/ui.scm | 27 ++++++ tests/profiles.scm | 87 +++++++++++++++++++ 3 files changed, 301 insertions(+), 54 deletions(-) -- 2.13.0