Subject: bug#47949: Failed to produce output path for guix-package-cache

From: zimoun <[email-masked]>
Date: Wed, 02 Nov 2022 12:02:41 +0100

Hi Vagrant,

On ven., 28 oct. 2022 at 13:23, Vagrant Cascadian <[email-masked]> wrote:

>> Oh yeah, that reminds me to add to the confusion, "guix time-machine
>> --commit=SOMECOMMIT" worked fine, even where "SOMECOMMIT" didn't
>> successfully work with guix pull.
>>
>> Maybe that's a clue pointing to the crufty .cache directories?
>
> Well, after removing ~/.cache/guix/checkouts/ I haven't had the problem
> again, with several successful pulls.

Well, “guix time-machine --commit=<some-commit>” uses,

--8<---------------cut here---------------start------------->8---
(define %default-channel-url
  ;; URL of the default 'guix' channel.
  "https://git.savannah.gnu.org/git/guix.git")

(define %default-guix-channel
  (channel
   (name 'guix)
   (branch "master")
   (url %default-channel-url)
   (introduction %guix-channel-introduction)))

(define %default-channels
  ;; Default list of channels.
  (list %default-guix-channel))
--8<---------------cut here---------------end--------------->8---

which is another directory checkout under ~/.cache/guix/checkouts. :-)

> This suggests to me that guix should make sure to not use a dirty
> checkout to prevent this in the future ... either exporting the guix
> tree it's working with to a temporary location, or something like
> running "git clean -dfx" before using the checkout...

>From my understanding, you have 3 similar checkouts of Guix; the default one:

--8<---------------cut here---------------start------------->8---
$ cat  ~/.cache/guix/checkouts/pjmkglp4t7znuugeurpurzikxq3tnlaywmisyr27shj7apsnalwq/.git/config
[core]
	bare = false
	repositoryformatversion = 0
	filemode = true
	logallrefupdates = true
[remote "origin"]
	url = https://git.savannah.gnu.org/git/guix.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master
--8<---------------cut here---------------end--------------->8---

and then 2 others, probably located at these hash names:

--8<---------------cut here---------------start------------->8---
$ guix repl
GNU Guile 3.0.8
Copyright (C) 1995-2021 Free Software Foundation, Inc.

Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.

Enter `,help' for help.
scheme@(guix-user)> ,use(guix git)
scheme@(guix-user)> ,pp (map url-cache-directory (list
"https://git.savannah.gnu.org/git/guix.git"
"file:///home/vagrant/src/guix"
"file:///home/vagrant/src/guix-master"))
$1 = (
 "/home/simon/.cache/guix/checkouts/pjmkglp4t7znuugeurpurzikxq3tnlaywmisyr27shj7apsnalwq"
 "/home/simon/.cache/guix/checkouts/cbek2jy4zeoea2wj4xppwabceeayfzzuap6iw6uk7kylh4hdolfa"
 "/home/simon/.cache/guix/checkouts/duxgcjge5pc2tzexf4qwjra3uzu3t4htsxojtxralegek3bqkisa"
)
--8<---------------cut here---------------end--------------->8---

then you pulled,

  guix pull --url=/home/vagrant/src/guix --branch=master

and sometimes:

  guix pull --url=/home/vagrant/src/guix-master --branch=master

How clean are these 2 local repositories?

I do not know if “git clean -dfx” would help because here the error is
probably between the repositories src/guix and src/guix-master and Guix
manages them under 2 unrelated directory checkouts.

When you cleaned ~/.cache/guix/checkouts and pulled again, you created a
new directory checkout.  Based on which origin?  Default?  Or src/guix?
Or src/guix-master?

Cheers,
simon