callCabal2nix: Don't rebuild unchanged cabal file

It can be quite annoying that callCabal2nix will build a new derivation
if anything in the source has changed, even if the cabal file hasn't.
This commit is contained in:
Will Fancher 2017-03-13 22:17:29 -04:00
parent 64218d61fc
commit 24b47526ce

View file

@ -84,7 +84,14 @@ let
callHackage = name: version: self.callPackage (hackage2nix name version); callHackage = name: version: self.callPackage (hackage2nix name version);
# Creates a Haskell package from a source package by calling cabal2nix on the source. # Creates a Haskell package from a source package by calling cabal2nix on the source.
callCabal2nix = name: src: self.callPackage (haskellSrc2nix { inherit src name; }); callCabal2nix = name: src: args:
let
# Filter out files other than the cabal file. This ensures
# that we don't create new derivations even when the cabal
# file hasn't changed.
justCabal = builtins.filterSource (path: type: pkgs.lib.hasSuffix ".cabal" path) src;
drv = self.callPackage (haskellSrc2nix { inherit name; src = justCabal; }) args;
in overrideCabal drv (drv': { inherit src; }); # Restore the desired src.
ghcWithPackages = selectFrom: withPackages (selectFrom self); ghcWithPackages = selectFrom: withPackages (selectFrom self);