From bf6d39d8e21ce647bfa7ac3b9bfcbcf13b7aed9d Mon Sep 17 00:00:00 2001 From: Tom Welsh Date: Wed, 2 May 2018 14:14:39 +0100 Subject: [PATCH 1/3] Add integration test --- .../tests/4001-excess-recompilation/Main.hs | 19 ++++++++++++++ .../4001-excess-recompilation/files/Setup.hs | 2 ++ .../files/bench/Main1.hs | 5 ++++ .../files/bench/Main2.hs | 5 ++++ .../files/files.cabal | 25 +++++++++++++++++++ .../files/src/Lib.hs | 2 ++ .../files/stack.yaml | 1 + .../files/test/Main1.hs | 5 ++++ .../files/test/Main2.hs | 5 ++++ 9 files changed, 69 insertions(+) create mode 100644 test/integration/tests/4001-excess-recompilation/Main.hs create mode 100644 test/integration/tests/4001-excess-recompilation/files/Setup.hs create mode 100644 test/integration/tests/4001-excess-recompilation/files/bench/Main1.hs create mode 100644 test/integration/tests/4001-excess-recompilation/files/bench/Main2.hs create mode 100644 test/integration/tests/4001-excess-recompilation/files/files.cabal create mode 100644 test/integration/tests/4001-excess-recompilation/files/src/Lib.hs create mode 100644 test/integration/tests/4001-excess-recompilation/files/stack.yaml create mode 100644 test/integration/tests/4001-excess-recompilation/files/test/Main1.hs create mode 100644 test/integration/tests/4001-excess-recompilation/files/test/Main2.hs diff --git a/test/integration/tests/4001-excess-recompilation/Main.hs b/test/integration/tests/4001-excess-recompilation/Main.hs new file mode 100644 index 0000000000..20b99b9a5a --- /dev/null +++ b/test/integration/tests/4001-excess-recompilation/Main.hs @@ -0,0 +1,19 @@ +import Control.Monad (unless) +import Data.List (isInfixOf) +import StackTest + +main :: IO () +main = do + copy "test/Main1.hs" "test/Main.hs" + copy "bench/Main1.hs" "bench/Main.hs" + stack ["build"] + + copy "test/Main2.hs" "test/Main.hs" + copy "bench/Main2.hs" "bench/Main.hs" + res <- unregisteringLines . snd <$> stackStderr ["build"] + removeFileIgnore "test/Main.hs" + removeFileIgnore "bench/Main.hs" + unless (null res) $ fail "Stack recompiled when a test or benchmark file was changed, but only the library was targeted" + +unregisteringLines :: String -> [String] +unregisteringLines = filter (isInfixOf " unregistering ") . lines diff --git a/test/integration/tests/4001-excess-recompilation/files/Setup.hs b/test/integration/tests/4001-excess-recompilation/files/Setup.hs new file mode 100644 index 0000000000..9a994af677 --- /dev/null +++ b/test/integration/tests/4001-excess-recompilation/files/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/test/integration/tests/4001-excess-recompilation/files/bench/Main1.hs b/test/integration/tests/4001-excess-recompilation/files/bench/Main1.hs new file mode 100644 index 0000000000..dbd8a1e159 --- /dev/null +++ b/test/integration/tests/4001-excess-recompilation/files/bench/Main1.hs @@ -0,0 +1,5 @@ +import Lib + +main :: IO () +main = putStrLn "I am Main1" + diff --git a/test/integration/tests/4001-excess-recompilation/files/bench/Main2.hs b/test/integration/tests/4001-excess-recompilation/files/bench/Main2.hs new file mode 100644 index 0000000000..9c51c0f9ef --- /dev/null +++ b/test/integration/tests/4001-excess-recompilation/files/bench/Main2.hs @@ -0,0 +1,5 @@ +import Lib + +main :: IO () +main = putStrLn "I am Main2" + diff --git a/test/integration/tests/4001-excess-recompilation/files/files.cabal b/test/integration/tests/4001-excess-recompilation/files/files.cabal new file mode 100644 index 0000000000..00c3ca0303 --- /dev/null +++ b/test/integration/tests/4001-excess-recompilation/files/files.cabal @@ -0,0 +1,25 @@ +name: files +version: 0.1.0.0 +build-type: Simple +cabal-version: >= 2.0 + +library + hs-source-dirs: src + exposed-modules: Lib + build-depends: base + default-language: Haskell2010 + +test-suite test + hs-source-dirs: test + main-is: Main.hs + build-depends: base, files + default-language: Haskell2010 + type: exitcode-stdio-1.0 + +benchmark bench + hs-source-dirs: bench + main-is: Main.hs + build-depends: base, files + default-language: Haskell2010 + type: exitcode-stdio-1.0 + diff --git a/test/integration/tests/4001-excess-recompilation/files/src/Lib.hs b/test/integration/tests/4001-excess-recompilation/files/src/Lib.hs new file mode 100644 index 0000000000..2aa67d6a94 --- /dev/null +++ b/test/integration/tests/4001-excess-recompilation/files/src/Lib.hs @@ -0,0 +1,2 @@ +module Lib where + diff --git a/test/integration/tests/4001-excess-recompilation/files/stack.yaml b/test/integration/tests/4001-excess-recompilation/files/stack.yaml new file mode 100644 index 0000000000..a95908b164 --- /dev/null +++ b/test/integration/tests/4001-excess-recompilation/files/stack.yaml @@ -0,0 +1 @@ +resolver: ghc-8.2.2 diff --git a/test/integration/tests/4001-excess-recompilation/files/test/Main1.hs b/test/integration/tests/4001-excess-recompilation/files/test/Main1.hs new file mode 100644 index 0000000000..dbd8a1e159 --- /dev/null +++ b/test/integration/tests/4001-excess-recompilation/files/test/Main1.hs @@ -0,0 +1,5 @@ +import Lib + +main :: IO () +main = putStrLn "I am Main1" + diff --git a/test/integration/tests/4001-excess-recompilation/files/test/Main2.hs b/test/integration/tests/4001-excess-recompilation/files/test/Main2.hs new file mode 100644 index 0000000000..9c51c0f9ef --- /dev/null +++ b/test/integration/tests/4001-excess-recompilation/files/test/Main2.hs @@ -0,0 +1,5 @@ +import Lib + +main :: IO () +main = putStrLn "I am Main2" + From 676777bf2b0329955136a09f46d22fce2600c499 Mon Sep 17 00:00:00 2001 From: Tom Welsh Date: Wed, 2 May 2018 14:37:31 +0100 Subject: [PATCH 2/3] Change getPackageFilesForTargets to look at lib + internal libs + targets --- src/Stack/Build/Source.hs | 3 ++- src/Stack/Types/NamedComponent.hs | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Stack/Build/Source.hs b/src/Stack/Build/Source.hs index 8a268617bb..f1cb548d3d 100644 --- a/src/Stack/Build/Source.hs +++ b/src/Stack/Build/Source.hs @@ -437,7 +437,8 @@ getPackageFilesForTargets getPackageFilesForTargets pkg cabalFP nonLibComponents = do (components',compFiles,otherFiles,warnings) <- getPackageFiles (packageFiles pkg) cabalFP - let components = M.keysSet components' `Set.union` nonLibComponents + let necessaryComponents = Set.insert CLib $ Set.filter isCInternalLib (M.keysSet components') + components = necessaryComponents `Set.union` nonLibComponents componentsFiles = M.map (\files -> Set.union otherFiles (Set.map dotCabalGetPath files)) $ M.filterWithKey (\component _ -> component `Set.member` components) compFiles diff --git a/src/Stack/Types/NamedComponent.hs b/src/Stack/Types/NamedComponent.hs index 68b0a52dda..b98f5bcb73 100644 --- a/src/Stack/Types/NamedComponent.hs +++ b/src/Stack/Types/NamedComponent.hs @@ -9,6 +9,7 @@ module Stack.Types.NamedComponent , testComponents , benchComponents , isCLib + , isCInternalLib , isCExe , isCTest , isCBench @@ -63,6 +64,10 @@ isCLib :: NamedComponent -> Bool isCLib CLib{} = True isCLib _ = False +isCInternalLib :: NamedComponent -> Bool +isCInternalLib CInternalLib{} = True +isCInternalLib _ = False + isCExe :: NamedComponent -> Bool isCExe CExe{} = True isCExe _ = False From d1600ce1c94d4c53e08644cc957175610b769ec8 Mon Sep 17 00:00:00 2001 From: Tom Welsh Date: Wed, 2 May 2018 14:54:40 +0100 Subject: [PATCH 3/3] Add changelog entry --- ChangeLog.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog.md b/ChangeLog.md index 45001c931c..8ee355e704 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -14,6 +14,8 @@ Other enhancements: Bug fixes: * `~/.stack/config.yaml` and `stack.yaml` terminating by newline +* A regression in recompilation checking introduced in v1.7.1 has been fixed. + See [#4001](https://github.com/commercialhaskell/stack/issues/4001) ## v1.7.1