Skip to content

Commit

Permalink
callCabal2nix: Fix calling with a path in the store.
Browse files Browse the repository at this point in the history
  • Loading branch information
shlevy committed Jan 11, 2018
1 parent 7fedfea commit 4e78aeb
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 2 deletions.
2 changes: 1 addition & 1 deletion lib/default.nix
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions lib/sources.nix
Expand Up @@ -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));
}
14 changes: 14 additions & 0 deletions pkgs/build-support/safe-discard-string-context.nix
@@ -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)
4 changes: 3 additions & 1 deletion pkgs/development/haskell-modules/make-package-set.nix
Expand Up @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions pkgs/top-level/all-packages.nix
Expand Up @@ -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 { };
}

0 comments on commit 4e78aeb

Please sign in to comment.