callCabal2nix: Fix calling with a path in the store.

Changed files
+24 -2
lib
pkgs
build-support
development
haskell-modules
top-level
+1 -1
lib/default.nix
···
hiPrioSet;
inherit (sources) pathType pathIsDirectory cleanSourceFilter
cleanSource sourceByRegex sourceFilesBySuffices
-
commitIdFromGitRepo cleanSourceWith;
+
commitIdFromGitRepo cleanSourceWith pathHasContext canCleanSource;
inherit (modules) evalModules closeModules unifyModuleSyntax
applyIfFunction unpackSubmodule packSubmodule mergeModules
mergeModules' mergeOptionDecls evalOptionValue mergeDefinitions
+4
lib/sources.nix
···
else lib.head matchRef
else throw ("Not a .git directory: " + path);
in lib.flip readCommitFromFile "HEAD";
+
+
pathHasContext = builtins.hasContext or (lib.hasPrefix builtins.storeDir);
+
+
canCleanSource = src: src ? _isLibCleanSourceWith || !(pathHasContext (toString src));
}
+14
pkgs/build-support/safe-discard-string-context.nix
···
+
# | Discard the context of a string while ensuring that expected path
+
# validity invariants hold.
+
#
+
# This relies on import-from-derivation, but it is only useful in
+
# contexts where the string is going to be used in an
+
# import-from-derivation anyway.
+
#
+
# safeDiscardStringContext : String → String
+
{ writeText }: s:
+
builtins.seq
+
(import (writeText
+
"discard.nix"
+
"${builtins.substring 0 0 s}null\n"))
+
(builtins.unsafeDiscardStringContext s)
+3 -1
pkgs/development/haskell-modules/make-package-set.nix
···
overrideCabal (self.callPackage (haskellSrc2nix {
inherit name;
src = pkgs.lib.cleanSourceWith
-
{ inherit src;
+
{ src = if pkgs.lib.canCleanSource src
+
then src
+
else pkgs.safeDiscardStringContext src;
filter = path: type:
pkgs.lib.hasSuffix "${name}.cabal" path ||
pkgs.lib.hasSuffix "package.yaml" path;
+2
pkgs/top-level/all-packages.nix
···
wal-g = callPackage ../tools/backup/wal-g {};
tlwg = callPackage ../data/fonts/tlwg { };
+
+
safeDiscardStringContext = callPackage ../build-support/safe-discard-string-context.nix { };