Subject: bug#67594: Cannot reproduce hash calculation of erlang package

From: Leo Famulari <[email-masked]>
Date: Sat, 2 Dec 2023 20:55:09 -0500

As reported on #guix by jeremyc [0], the standard method for calculating
the hash of a Git checkout is not working as expected for the Erlang
package [1].

Currently, our Erlang package has this source block:

------
    (version "25.3.2")
    (source (origin
              (method git-fetch)
              ;; The tarball from http://erlang.org/download contains many
              ;; pre-compiled files, so we use this snapshot of the source
              ;; repository.
              (uri (git-reference
                    (url "https://github.com/erlang/otp")
                    (commit (string-append "OTP-" version))))
              (file-name (git-file-name name version))
              (sha256
               (base32
                "092lym5a181gz89nscw7kqhw1wa6qvgcpkj80q4i9p79mxmsr1nj"))
              (patches (search-patches "erlang-man-path.patch"))))
------

So, I clone otp.git, check out the tag, and calculate the hash according
to the manual:

------
$ git clone https://github.com/erlang/otp                                                                                                 
Cloning into 'otp'...
remote: Enumerating objects: 491375, done.
remote: Counting objects: 100% (102345/102345), done.
remote: Compressing objects: 100% (3576/3576), done.
remote: Total 491375 (delta 100266), reused 99037 (delta 98766), pack-reused 389030
Receiving objects: 100% (491375/491375), 485.70 MiB | 14.17 MiB/s, done.
Resolving deltas: 100% (396274/396274), done.
Updating files: 100% (12078/12078), done.
$ cd otp
$ git checkout OTP-25.3.2                                                                                                                 
Note: switching to 'OTP-25.3.2'.          
 
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0418c10ec3 Updated OTP version
$ guix hash -x --serializer=nar .
05m2fixgfn2gcisz13zp002hy5i8580ayai3lqs77q8gwzdb22mz
------

It's not the same hash as in the package definition.

Additionally, I used '--check' to make sure I'm not crazy. I commented
out the patch that we apply to the otp.git, and then used this command,
which returned successfully:

------
$ ./pre-inst-env guix build --no-grafts erlang -S --no-substitutes --no-offload --check
------

What's up? Are me and jeremyc missing something here?

[0]
http://logs.guix.gnu.org/guix/2023-12-03.log#020056

[1]
https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/erlang.scm?id=06ebc45e15f2a1bd4526a5a716eed657c902a0c1#n48