Subject: bug#70339: closed (Re: bug#70339: Constructing hg-fetch fixed-output derivation requires Mercurial)

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 22 Apr 2024 13:46:05 +0000

Your bug report

#70339: Constructing hg-fetch fixed-output derivation requires Mercurial

which was filed against the guix package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
70339: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=70339
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#70339: Constructing hg-fetch fixed-output derivation requires Mercurial
From: Simon Tournier <[email-masked]>
To: Ludovic Courtès <[email-masked]>
Cc: [email-masked]
Date: Mon, 22 Apr 2024 02:22:00 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi,

On ven., 12 avril 2024 at 16:05, Ludovic Courtès <[email-masked]> wrote:

> In this case, what’s happening is grafts: Guix downloads (or builds)
> Mercurial so it can compute its grafted derivation.

Ah indeed!  Damned. :-)

Closing.

Cheers,
simon

Subject: Constructing hg-fetch fixed-output derivation requires Mercurial
From: Simon Tournier <[email-masked]>
To: [email-masked]
Date: Wed, 10 Apr 2024 18:18:14 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi,

For instance,

--8<---------------cut here---------------start------------->8---
$ guix build -S -d hg-commitsigs
substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0%
3,7 MB will be downloaded:
  /gnu/store/6fya762sz5hjdj04vdn5g3v6zii6f11d-mercurial-6.2.2
substituting /gnu/store/6fya762sz5hjdj04vdn5g3v6zii6f11d-mercurial-6.2.2...
downloading from https://ci.guix.gnu.org/nar/lzip/6fya762sz5hjdj04vdn5g3v6zii6f11d-mercurial-6.2.2 ...
 mercurial-6.2.2  3.5MiB                                                   529KiB/s 00:07 ▕██████████████████▏ 100.0%

/gnu/store/pkb6zd9xfmxx6rsh4p7w3glh7xqg5sqy-hg-commitsigs-0.1.0-0.b53eb68-checkout.drv
--8<---------------cut here---------------end--------------->8---

and it is unexpected.  The construction of the fixed-output derivation
does not need to download stuff; it only needs to compose stuff
detailing how to do.  Any download (or build) must happen when running
the derivation itself.

The issue: later – say 1 or 2 years from now – the command:

   guix time-machone --commit=929ddec -- build -S -d hg-commitsigs

will start to build all what Mercurial needs (python etc.).  If for some
reasons*, only one of Mercurial dependencies fails then we are doomed.

    ( Context: I am working on a fixed-output translator; rely on
      current strategies for downloading and do not require all the past
      stack just for downloading source code. )

I think it comes from this part:

--8<---------------cut here---------------start------------->8---
                     (hg-fetch '#$(hg-reference-url ref)
                               '#$(hg-reference-changeset ref)
                               #$output
                               #:hg-command (string-append #+hg "/bin/hg")))
--8<---------------cut here---------------end--------------->8---

from ’hg-fetch’ in (guix hg-download).  Here the #+hg is not required
because just before there is:

            (set-path-environment-variable "PATH" '("bin")
                                           (match '#+inputs
                                             (((names dirs outputs ...) ...)
                                              dirs)))

So relying on string "hg" should be enough; as it is done in
’git-fetch/in-band*’ for one example.

Do I miss something?

Cheers,
simon

*reasons of failures: See
 https://guix.gnu.org/en/blog/2024/adventures-on-the-quest-for-long-term-reproducible-deployment