diff --git a/lib/stack-cache-generator.nix b/lib/stack-cache-generator.nix index a8d3c2fc..6c6f3e86 100644 --- a/lib/stack-cache-generator.nix +++ b/lib/stack-cache-generator.nix @@ -32,8 +32,18 @@ let then haskellLib.cleanSourceWith { inherit src; filter = path: type: - pkgs.lib.hasSuffix ("/" + stackYaml) path - || (resolver != null && pkgs.lib.hasSuffix ("/" + resolver) path); + let + origSrc = if src ? _isLibCleanSourceWith then src.origSrc else src; + origSubDir = if src ? _isLibCleanSourceWithEx then src.origSubDir else ""; + relPath = pkgs.lib.removePrefix (toString origSrc + origSubDir + "/") path; + + # checks if path1 is a parent directory for path2 + isParent = path1: path2: pkgs.lib.hasPrefix "${path1}/" path2; + + in + (relPath == stackYaml) + || (resolver != null && (relPath == resolver || isParent relPath resolver)) + ; } else src; diff --git a/test/default.nix b/test/default.nix index d779d81d..bac54753 100644 --- a/test/default.nix +++ b/test/default.nix @@ -158,6 +158,7 @@ let builder-haddock = callTest ./builder-haddock {}; stack-simple = callTest ./stack-simple {}; stack-local-resolver = callTest ./stack-local-resolver {}; + stack-local-resolver-subdir = callTest ./stack-local-resolver-subdir {}; stack-remote-resolver = callTest ./stack-remote-resolver {}; shell-for-setup-deps = callTest ./shell-for-setup-deps { inherit compiler-nix-name; }; setup-deps = import ./setup-deps { inherit pkgs compiler-nix-name; }; diff --git a/test/stack-local-resolver-subdir/.gitignore b/test/stack-local-resolver-subdir/.gitignore new file mode 100644 index 00000000..d14118b6 --- /dev/null +++ b/test/stack-local-resolver-subdir/.gitignore @@ -0,0 +1,2 @@ +/.stack-work/ +/*.cabal diff --git a/test/stack-local-resolver-subdir/default.nix b/test/stack-local-resolver-subdir/default.nix new file mode 100644 index 00000000..9fabff83 --- /dev/null +++ b/test/stack-local-resolver-subdir/default.nix @@ -0,0 +1,14 @@ +{ project', recurseIntoAttrs, testSrc }: + +let + project = project' { + src = testSrc "stack-local-resolver-subdir"; + }; + packages = project.hsPkgs; + +in recurseIntoAttrs { + ifdInputs = { + inherit (project) stack-nix; + }; + inherit (packages.stack-local-resolver.components) library; +} diff --git a/test/stack-local-resolver-subdir/package.yaml b/test/stack-local-resolver-subdir/package.yaml new file mode 100644 index 00000000..b7f2bb1f --- /dev/null +++ b/test/stack-local-resolver-subdir/package.yaml @@ -0,0 +1,7 @@ +name: stack-local-resolver + +dependencies: +- base + +library: + source-dirs: src diff --git a/test/stack-local-resolver-subdir/snapshot/snapshot.yaml b/test/stack-local-resolver-subdir/snapshot/snapshot.yaml new file mode 100644 index 00000000..d175fc8f --- /dev/null +++ b/test/stack-local-resolver-subdir/snapshot/snapshot.yaml @@ -0,0 +1,4 @@ +name: local-snapshot +resolver: lts-14.13 + +packages: [] diff --git a/test/stack-local-resolver-subdir/src/Lib.hs b/test/stack-local-resolver-subdir/src/Lib.hs new file mode 100644 index 00000000..d36ff271 --- /dev/null +++ b/test/stack-local-resolver-subdir/src/Lib.hs @@ -0,0 +1,6 @@ +module Lib + ( someFunc + ) where + +someFunc :: IO () +someFunc = putStrLn "someFunc" diff --git a/test/stack-local-resolver-subdir/stack.yaml b/test/stack-local-resolver-subdir/stack.yaml new file mode 100644 index 00000000..24adef39 --- /dev/null +++ b/test/stack-local-resolver-subdir/stack.yaml @@ -0,0 +1,4 @@ +resolver: snapshot/snapshot.yaml + +packages: +- .