NixOS / nix

Nix, the purely functional package manager
https://nixos.org/
GNU Lesser General Public License v2.1
12.73k stars 1.52k forks source link

fetchTarball fails after downloading proton-ge #10575

Open babbaj opened 6 months ago

babbaj commented 6 months ago

Describe the bug

In my config I've been using fetchTarball to download proton-ge builds but after updating to nix 2.21.0 I am now getting this error from fetchTarball error: adding a file to a tree builder: failed to insert entry: invalid name for a tree entry - .git

Steps To Reproduce

run nix repl --expr 'fetchTarball { url = "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton9-4/GE-Proton9-4.tar.gz"; sha256 = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; }' (older versions have the same problem)

Expected behavior

fetchTarball should be able to unpack the tar file with no errors

nix-env --version output

babbaj@nixos:~ ❯ nix --version
nix (Nix) 2.21.0

Additional context

There is a .git folder included in the protonfixes subdirectory which is probably what is triggering the error. I believe the error comes specifically from here https://github.com/NixOS/nix/blob/8c4c2156bd786156a57219e78aa14a363ca8f041/src/libfetchers/git-utils.cc#L820 It doesn't make sense to me why git is involved in fetchTarball when it should and seemingly has been able to unpack any abitrary files in stable releases.

This commit is most likely what introduced this regression. https://github.com/NixOS/nix/commit/cabee9815239af426cece729cb765810b8a716ce

proton-ge was also added to nixpkgs recently and uses fetchzip instead of fetchTarball. Using fetchzip in place of fetchTarball works fine.

Priorities

Add :+1: to issues you find important.

thufschmitt commented 6 months ago

cc @edolstra . I can confirm this, and https://github.com/NixOS/nix/commit/cabee9815239af426cece729cb765810b8a716ce is a very likely culprit indeed. If we want to keep this git hashing thing, we'll need to be able to bail out of work around this kind of file names that aren't accepted by libgit2

pluiedev commented 3 months ago

Evidently this is not limited to fetchTarball... fetchTree also fails, triggered by call-flake.nix:


… in the condition of the assert statement
         at «nix-internal»/call-flake.nix:79:13:
           78|           if node.flake or true then
           79|             assert builtins.isFunction flake.outputs;
             |             ^
           80|             result

       … while calling the 'isFunction' builtin
         at «nix-internal»/call-flake.nix:79:20:
           78|           if node.flake or true then
           79|             assert builtins.isFunction flake.outputs;
             |                    ^
           80|             result

       … while calling the 'import' builtin
         at «nix-internal»/call-flake.nix:54:19:
           53|
           54|           flake = import (outPath + "/flake.nix");
             |                   ^
           55|

       … while realising the context of a path

       … while calling the 'fetchTree' builtin
         at «nix-internal»/call-flake.nix:48:15:
           47|               # FIXME: remove obsolete node.info.
           48|               fetchTree (node.info or {} // removeAttrs node.locked ["dir"]);
             |               ^
           49|

       … while fetching the input 'github:ipetkov/crane/529c1a0b1f29f0d78fa3086b8f6a134c71ef3aaf?narHash=sha256-k3oiD2z2AAwBFLa4%2BxfU%2B7G5fisRXfkvrMTCJrjZzXo%3D'

       error: adding a file to a tree builder: failed to insert entry: invalid object specified - test.yml ```
nixos-discourse commented 2 months ago

This issue has been mentioned on NixOS Discourse. There might be relevant details there:

https://discourse.nixos.org/t/need-help-with-this-git-related-flake-update-error/50538/7