lib.makeScope: allow overriding callPackage (#500752)
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -56,7 +56,7 @@ makeScope newScope (
|
||||
in
|
||||
{
|
||||
|
||||
inherit callPackage buildOctavePackage computeRequiredOctavePackages;
|
||||
inherit buildOctavePackage computeRequiredOctavePackages;
|
||||
|
||||
inherit (callPackage ../development/interpreters/octave/hooks { })
|
||||
writeRequiredOctavePackagesHook
|
||||
|
||||
Reference in New Issue
Block a user