From 96ed29f4b73476643a3e4f4a7544c632e88cb61f Mon Sep 17 00:00:00 2001 From: Dustin Frisch Date: Mon, 29 Dec 2025 20:59:29 +0100 Subject: [PATCH] prefer-remote-fetch: Fix evaluation for all fetchers and export additional attributes --- .../prefer-remote-fetch/default.nix | 54 ++++++++++++------- .../prefer-remote-fetch/tests.nix | 49 +++++++++++++++++ pkgs/test/default.nix | 4 ++ 3 files changed, 87 insertions(+), 20 deletions(-) create mode 100644 pkgs/build-support/prefer-remote-fetch/tests.nix diff --git a/pkgs/build-support/prefer-remote-fetch/default.nix b/pkgs/build-support/prefer-remote-fetch/default.nix index d686533f69e0f..c39caf4d6b4df 100644 --- a/pkgs/build-support/prefer-remote-fetch/default.nix +++ b/pkgs/build-support/prefer-remote-fetch/default.nix @@ -10,24 +10,38 @@ # $ mkdir ~/.config/nixpkgs/overlays/ # $ echo 'self: super: super.prefer-remote-fetch self super' > ~/.config/nixpkgs/overlays/prefer-remote-fetch.nix # -self: super: { - binary-cache = args: super.binary-cache ({ preferLocalBuild = false; } // args); - buildenv = args: super.buildenv ({ preferLocalBuild = false; } // args); - fetchfossil = args: super.fetchfossil ({ preferLocalBuild = false; } // args); - fetchdocker = args: super.fetchdocker ({ preferLocalBuild = false; } // args); - fetchgit = args: super.fetchgit ({ preferLocalBuild = false; } // args); - fetchgx = args: super.fetchgx ({ preferLocalBuild = false; } // args); - fetchhg = args: super.fetchhg ({ preferLocalBuild = false; } // args); - fetchipfs = args: super.fetchipfs ({ preferLocalBuild = false; } // args); - fetchrepoproject = args: super.fetchrepoproject ({ preferLocalBuild = false; } // args); - fetchs3 = args: super.fetchs3 ({ preferLocalBuild = false; } // args); - fetchsvn = args: super.fetchsvn ({ preferLocalBuild = false; } // args); - fetchurl = - fpArgs: - super.fetchurl ( - super.lib.extends (finalAttrs: args: { preferLocalBuild = args.preferLocalBuild or false; }) ( - super.lib.toFunction fpArgs - ) - ); - mkNugetSource = args: super.mkNugetSource ({ preferLocalBuild = false; } // args); +self: super: +let + preferLocal = + orig: + self.lib.extendMkDerivation { + constructDrv = orig; + extendDrvArgs = + finalAttrs: + { + preferLocalBuild ? false, + ... + }: + { + inherit preferLocalBuild; + }; + }; + +in +{ + binary-cache = preferLocal super.binary-cache; + buildenv = preferLocal super.buildenv; + fetchfossil = preferLocal super.fetchfossil; + fetchdocker = preferLocal super.fetchdocker; + fetchgit = (preferLocal super.fetchgit) // { + inherit (super.fetchgit) getRevWithTag; + }; + fetchgx = preferLocal super.fetchgx; + fetchhg = preferLocal super.fetchhg; + fetchipfs = preferLocal super.fetchipfs; + fetchrepoproject = preferLocal super.fetchrepoproject; + fetchs3 = preferLocal super.fetchs3; + fetchsvn = preferLocal super.fetchsvn; + fetchurl = preferLocal super.fetchurl; + mkNugetSource = preferLocal super.mkNugetSource; } diff --git a/pkgs/build-support/prefer-remote-fetch/tests.nix b/pkgs/build-support/prefer-remote-fetch/tests.nix new file mode 100644 index 0000000000000..a9bd1f2b2e241 --- /dev/null +++ b/pkgs/build-support/prefer-remote-fetch/tests.nix @@ -0,0 +1,49 @@ +{ pkgs, ... }: + +let + pkgs' = pkgs.extend (self: super: super.prefer-remote-fetch self super); + + check = + fn: args: + let + drv = pkgs'.testers.invalidateFetcherByDrvHash fn args; + in + if drv.preferLocalBuild then throw "Fetcher must not prefer local builds" else drv; + +in +pkgs'.callPackage ( + { + testers, + fetchgit, + fetchFromGitHub, + fetchurl, + fetchzip, + ... + }: + { + fetchgit = check fetchgit { + name = "simple-nix-source"; + url = "https://github.com/NixOS/nix"; + rev = "9d9dbe6ed05854e03811c361a3380e09183f4f4a"; + sha256 = "sha256-7DszvbCNTjpzGRmpIVAWXk20P0/XTrWZ79KSOGLrUWY="; + }; + + fetchFromGitHub = check fetchFromGitHub { + name = "simple-nix-source"; + owner = "NixOS"; + repo = "nix"; + rev = "9d9dbe6ed05854e03811c361a3380e09183f4f4a"; + hash = "sha256-7DszvbCNTjpzGRmpIVAWXk20P0/XTrWZ79KSOGLrUWY="; + }; + + fetchurl = check fetchurl { + url = "https://gist.github.com/glandium/01d54cefdb70561b5f6675e08f2990f2/archive/2f430f0c136a69b0886281d0c76708997d8878af.zip"; + sha256 = "sha256-J/ZWC23GmFfew/56NQvPqKzqkWgjOaPvbMicFJnuJxI="; + }; + + fetchzip = check fetchzip { + url = "https://gist.github.com/glandium/01d54cefdb70561b5f6675e08f2990f2/archive/2f430f0c136a69b0886281d0c76708997d8878af.zip"; + sha256 = "sha256-0ecwgL8qUavSj1+WkaxpmRBmu7cvj53V5eXQV71fddU="; + }; + } +) { } diff --git a/pkgs/test/default.nix b/pkgs/test/default.nix index 4c613135e9771..cf49620be1000 100644 --- a/pkgs/test/default.nix +++ b/pkgs/test/default.nix @@ -246,4 +246,8 @@ in build-environment-info = callPackage ./build-environment-info { }; rust-hooks = recurseIntoAttrs (callPackages ../build-support/rust/hooks/test { }); + + prefer-remote-fetch = recurseIntoAttrs ( + callPackages ../build-support/prefer-remote-fetch/tests.nix { } + ); }