all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: ludo@gnu.org (Ludovic Courtès)
To: Jookia <166291@gmail.com>
Cc: 22423-done@debbugs.gnu.org
Subject: bug#22423: git-fetch does not update checked out tree when commit hash changes
Date: Thu, 21 Jan 2016 17:25:40 +0100	[thread overview]
Message-ID: <87vb6mzypn.fsf@gnu.org> (raw)
In-Reply-To: <20160121115002.GA23171@novena-choice-citizen.lan> (Jookia's message of "Thu, 21 Jan 2016 22:50:02 +1100")

Jookia <166291@gmail.com> skribis:

> On Thu, Jan 21, 2016 at 11:10:14AM +0100, Ludovic Courtès wrote:
>> Pjotr Prins <pjotr.public12@thebird.nl> skribis:
>> 
>> > On Thu, Jan 21, 2016 at 09:50:18AM +0100, Ludovic Courtès wrote:
>> >> This is expected: origins are fixed-output derivations, meaning that it
>> >> does not matter how we perform them (using Git, over HTTP, or thanks to
>> >> an avian carrier), as long as the result has the specified sha256.
>> >> 
>> >> Thus, when you change, say, the Git commit ID or origin ‘method’ without
>> >> changing the ‘sha256’ field, nothing happens: the daemon says “OK, I
>> >> already have a store item with that ‘sha256’, so I don’t do anything.”
>> >> 
>> >> Clearly, one has to be cautious with this, it’s easy to mistakenly use
>> >> the old source.
>> >
>> > Hmmm. I thought the sha256 was calculated over the derivation +
>> > sources
>> 
>> What you’re saying is true of the hash that appears in /gnu/store file
>> name, but I was referring to the ‘sha256’ field of origins, which is a
>> different thing.
>> 
>> Ludo’.
>
> I think this is a bit of a problem even if it's expected: Often times we can't
> calculate the hash until it's downloaded and get a hash mismatch. The other day
> I rebuilt NixOS almost entirely on my machine and changed the revision on
> Firefox to a new branch but didn't change the hash since I expected a mismatch.
>
> Needles to say I realized what happened when I checked Firefox's version. I
> think it'd be great to have a 'INVALID' hash we can use for development that
> just prints a mismatch and errors out like usual. Maybe this is possible in
> Guix, but it didn't seem documented and it's not possible in NixOS.

The problem is that Guix cannot guess that the ‘sha256’ the developer
provided in the ‘origin’ form is actually wrong.  Only the developer
knows.

This is mitigated in Guix by the fact that we usually include the
version string or Git commit ID in the origin’s file name, with patterns
like:

  (define foo
    (let ((commit "deadbeef"))
      (package
        (name "foo")
        (version commit)
        (source (origin
                  (method git-fetch)
                  (uri (git-reference (commit commit) …))
                  (file-name (string-append name "-" commit)) ;<– !
                  (sha256 …)
                  …))
        …)))

The good thing with this pattern is that, when you modify the value of
‘commit’, you also end up modifying ‘file-name’, thus triggering a
re-download.  So if you had forgotten to update ‘sha256’, you
immediately get a hash mismatch error.

In practice, I’ve found this to be rather helpful.

Additionally, ‘guix lint’ emits warnings for packages that do not follow
this pattern, hopefully making the problem that Pjotr describes less
likely.

Ludo’.

      reply	other threads:[~2016-01-21 16:26 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-21  6:54 bug#22423: git-fetch does not update checked out tree when commit hash changes Pjotr Prins
2016-01-21  8:50 ` Ludovic Courtès
2016-01-21  9:08   ` Pjotr Prins
2016-01-21 10:10     ` Ludovic Courtès
2016-01-21 11:50       ` Jookia
2016-01-21 16:25         ` Ludovic Courtès [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87vb6mzypn.fsf@gnu.org \
    --to=ludo@gnu.org \
    --cc=166291@gmail.com \
    --cc=22423-done@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.