lib.makeScope: allow overriding callPackage (#500752)

This commit is contained in:
Philip Taron
2026-03-22 06:03:40 +00:00
committed by GitHub
3 changed files with 58 additions and 3 deletions
+5 -2
View File
@@ -631,9 +631,12 @@ rec {
makeScope =
newScope: f:
let
self = f self // {
newScope = scope: newScope (self // scope);
self = {
callPackage = self.newScope { };
}
// f self
// {
newScope = scope: newScope (self // scope);
overrideScope = g: makeScope newScope (extends g f);
packages = f;
};
+52
View File
@@ -4789,6 +4789,58 @@ runTests {
};
};
# Check that makeScope provides a default callPackage
testMakeScopeDefaultCallPackage =
let
scope = lib.makeScope lib.callPackageWith (self: {
foo = self.callPackage ({ }: "foo-value") { };
});
in
{
expr = scope.foo;
expected = "foo-value";
};
# Check that callPackage can be overridden by the scope function
testMakeScopeOverrideCallPackage =
let
customCallPackage =
_self: fn: args:
(fn args) + "-custom";
scope = lib.makeScope lib.callPackageWith (self: {
callPackage = customCallPackage self;
foo = self.callPackage ({ }: "foo-value") { };
});
in
{
expr = scope.foo;
expected = "foo-value-custom";
};
# Check that overriding callPackage persists through overrideScope
testMakeScopeOverrideCallPackagePersistsThroughOverrideScope =
let
customCallPackage =
_self: fn: args:
(fn args) + "-custom";
scope = lib.makeScope lib.callPackageWith (self: {
callPackage = customCallPackage self;
foo = self.callPackage ({ }: "foo-value") { };
});
overridden = scope.overrideScope (
_final: _prev: {
bar = scope.callPackage ({ }: "bar-value") { };
}
);
in
{
expr = { inherit (overridden) foo bar; };
expected = {
foo = "foo-value-custom";
bar = "bar-value-custom";
};
};
testFilesystemResolveDefaultNixFile1 = {
expr = lib.filesystem.resolveDefaultNix ./foo.nix;
expected = ./foo.nix;
+1 -1
View File
@@ -56,7 +56,7 @@ makeScope newScope (
in
{
inherit callPackage buildOctavePackage computeRequiredOctavePackages;
inherit buildOctavePackage computeRequiredOctavePackages;
inherit (callPackage ../development/interpreters/octave/hooks { })
writeRequiredOctavePackagesHook