Subject: Re: bug#41908: guix time-machine fails; XXXX is not related to introductory commit of channel 'guix'
From: Ludovic Courtès <[email-masked]>
To: Jan Nieuwenhuizen <[email-masked]>
Cc: [email-masked], Marius Bakke <[email-masked]>
Date: Sun, 21 Jun 2020 17:43:17 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi, Sunday hackers!

Ludovic Courtès <[email-masked]> skribis:

> Jan Nieuwenhuizen <[email-masked]> skribis:
>
>> $ guix pull --commit=559491ea5b36b89b2a2f9d48dacf6a2d7e219910
>> Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
>> Building from this channel:
>>   guix      https://git.savannah.gnu.org/git/guix.git	559491e
>> [...]
>> hint: Run `guix pull --news' to read all the news.
>>
>> 11:23:19 janneke@dundal:~/src/guix/master
>> $ guix time-machine --commit=36640207c9543e48cd6daa92930f023f80065a5d -- environment hello
>> Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
>> guix time-machine: error: '36640207c9543e48cd6daa92930f023f80065a5d' is not related to introductory commit of channel 'guix'
>>
>> [1]11:23:25 janneke@dundal:~/src/guix/master
>> git log --pretty=oneline | grep 36640207c9543e48cd6daa92930f023f80065a5d
>> 36640207c9543e48cd6daa92930f023f80065a5d quirks: Build 'compute-guix-derivation' modules with 2.2 when needed.
>
> I think ‘commit-relation’ is right: the two commits are unrelated.
>
> AIUI, commit 36640207c9543e48cd6daa92930f023f80065a5d was made on master
> (May 29) after commit 9edb3f66fd807b096b48283debdcddccfea34bad (May
> 26).  Thus, they really existed in different branches, and they’re
> unrelated.

Thinking more about it, I think the test that leads to the error above
is in fact bogus (that’s what you were hinting at, Simon).  Namely, it
reads:

    (define commits
      ;; Commits to authenticate, excluding the closure of
      ;; AUTHENTICATED-COMMITS.
      (commit-difference end-commit start-commit
                         authenticated-commits))

     ;; When COMMITS is empty, it's either because AUTHENTICATED-COMMITS
     ;; contains END-COMMIT or because END-COMMIT is not a descendant of
     ;; START-COMMIT.  Check that.

But that’s wrong: If START-COMMIT and END-COMMIT are unrelated, then
‘commit-difference’ will return a whole lot of commits (those who are
not both in the closure of START-COMMIT and that of END-COMMIT).

The difference between 36640207c9543e48cd6daa92930f023f80065a5d and
9edb3f66fd807b096b48283debdcddccfea34bad is a set of 664 commits, as
shown with “git log --oneline 9edb3f6..3664020 | wc -l” or by calling
‘commit-difference’.

Those 664 commits are those that were made on master between
9edb3f66fd807b096b48283debdcddccfea34bad’s parent on master, and
36640207c9543e48cd6daa92930f023f80065a5d.  They can be authenticated
just fine.

If someone passed ‘--allow-downgrades’ and tries to jump to an unrelated
commit, authentication will fail on some commit.  So I think the test
was just enforcing an additional restriction that was unnecessary.

I removed that test in e4a4287c5fb51c0e47431606df5ee78b953d71f8; we can
keep the introductory commit unchanged, all is good!  Let me know what
you think.

Thanks,
Ludo’.