Unverified Commit 9ff9393b authored by Philip Taron's avatar Philip Taron Committed by GitHub
Browse files

lib.makeScope: allow overriding callPackage (#500752)

parents 422e17a1 4085f24e
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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 −0
Original line number Diff line number Diff line
@@ -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
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ makeScope newScope (
  in
  {

    inherit callPackage buildOctavePackage computeRequiredOctavePackages;
    inherit buildOctavePackage computeRequiredOctavePackages;

    inherit (callPackage ../development/interpreters/octave/hooks { })
      writeRequiredOctavePackagesHook