callCabal2nix: Fix calling with a path in the store.

This commit is contained in:
Shea Levy 2018-01-11 10:17:56 -05:00
parent 7fedfeabae
commit 4e78aeb441
No known key found for this signature in database
GPG key ID: 5C0BD6957D86FE27
5 changed files with 24 additions and 2 deletions

View file

@ -93,7 +93,7 @@ let
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

View file

@ -93,4 +93,8 @@ rec {
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));
}

View file

@ -0,0 +1,14 @@
# | 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)

View file

@ -146,7 +146,9 @@ in package-set { inherit pkgs stdenv callPackage; } self // {
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;

View file

@ -20237,4 +20237,6 @@ with pkgs;
wal-g = callPackage ../tools/backup/wal-g {};
tlwg = callPackage ../data/fonts/tlwg { };
safeDiscardStringContext = callPackage ../build-support/safe-discard-string-context.nix { };
}