prefer-remote-fetch: Fix evaluation for all fetchers and export additional attributes (#475142)

This commit is contained in:
Philip Taron
2026-01-05 15:04:59 +00:00
committed by GitHub
3 changed files with 87 additions and 20 deletions
@@ -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;
}
@@ -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=";
};
}
) { }
+4
View File
@@ -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 { }
);
}