Cannot reproduce hash calculation of erlang package

  • Open
  • quality assurance status badge
Details
2 participants
  • Leo Famulari
  • Simon Tournier
Owner
unassigned
Submitted by
Leo Famulari
Severity
normal
L
L
Leo Famulari wrote on 3 Dec 2023 02:55
(address . bug-guix@gnu.org)
ZWvf_aJQDVkqkPRc@jasmine.lan
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/downloadcontains many
;; pre-compiled files, so we use this snapshot of the source
;; repository.
(uri (git-reference
(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:

------
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]

[1]
S
S
Simon Tournier wrote on 8 Dec 2023 18:19
87lea47gt4.fsf@gmail.com
Hi,

On Sat, 02 Dec 2023 at 20:55, Leo Famulari <leo@famulari.name> wrote:

Toggle quote (22 lines)
> (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"))

> $ git clone https://github.com/erlang/otp
> $ cd otp
> $ git checkout OTP-25.3.2
> 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.

Indeed, and I think the issue is coming from that:

./lib/dialyzer/test/options1_SUITE_data/my_include/CVS

It is another case of bug#65979 [1]. Because there is both .git and
CVS, the current implementation of vcs-file? is confused and so exclude
some folders when it should not.

This is fixed by https://issues.guix.gnu.org/66961#7 that I will push
shortly the last revision v4. :-)

Toggle snippet (5 lines)
$ ./pre-inst-env guix hash -x --serializer=nar /tmp/otp
092lym5a181gz89nscw7kqhw1wa6qvgcpkj80q4i9p79mxmsr1nj


?