on master help sign in
thread BW.Scope around to give lots of time to write large project files
8ce703fEvan Czaplicki
terminal/src/Bump.hs+3−1
@@ -8,6 +8,7 @@ module Bump
8import qualified Data.List as List
8import qualified Data.List as List
9import qualified Data.NonEmptyList as NE
9import qualified Data.NonEmptyList as NE
10
10
11+import qualified BackgroundWriter as BW
11import qualified Build
12import qualified Build
12import qualified Deps.Bump as Bump
13import qualified Deps.Bump as Bump
13import qualified Deps.Diff as Diff
14import qualified Deps.Diff as Diff
@@ -135,7 +136,8 @@ suggestVersion (Env root cache manager _ outline@(Outline.PkgOutline pkg _ _ vsn
135generateDocs :: FilePath -> Outline.PkgOutline -> Task.Task Exit.Bump Docs.Documentation
136generateDocs :: FilePath -> Outline.PkgOutline -> Task.Task Exit.Bump Docs.Documentation
136generateDocs root (Outline.PkgOutline _ _ _ _ exposed _ _ _) =
137generateDocs root (Outline.PkgOutline _ _ _ _ exposed _ _ _) =
137 do details <-
138 do details <-
139+ Task.eio Exit.BumpBadDetails $ BW.withScope $ \scope ->
138− Task.eio Exit.BumpBadDetails $ Details.load Reporting.silent root
140+ Details.load Reporting.silent scope root
139
141
140 case Outline.flattenExposed exposed of
142 case Outline.flattenExposed exposed of
141 [] ->
143 [] ->
terminal/src/Develop.hs+3−2
@@ -20,6 +20,7 @@ import Snap.Core hiding (path)
20import Snap.Http.Server
20import Snap.Http.Server
21import Snap.Util.FileServe
21import Snap.Util.FileServe
22
22
23+import qualified BackgroundWriter as BW
23import qualified Build
24import qualified Build
24import qualified Elm.Details as Details
25import qualified Elm.Details as Details
25import qualified Develop.Generate.Help as Help
26import qualified Develop.Generate.Help as Help
@@ -156,8 +157,8 @@ compile path =
156 return $ Left $ Exit.ReactorNoOutline
157 return $ Left $ Exit.ReactorNoOutline
157
158
158 Just root ->
159 Just root ->
159− Stuff.withRootLock root $ Task.run $
160+ BW.withScope $ \scope -> Stuff.withRootLock root $ Task.run $
160− do details <- Task.eio Exit.ReactorBadDetails $ Details.load Reporting.silent root
161+ do details <- Task.eio Exit.ReactorBadDetails $ Details.load Reporting.silent scope root
161 artifacts <- Task.eio Exit.ReactorBadBuild $ Build.fromMains Reporting.silent root details (NE.List path [])
162 artifacts <- Task.eio Exit.ReactorBadBuild $ Build.fromMains Reporting.silent root details (NE.List path [])
162 javascript <- Task.mapError Exit.ReactorBadGenerate $ Generate.dev root details artifacts
163 javascript <- Task.mapError Exit.ReactorBadGenerate $ Generate.dev root details artifacts
163 let (NE.List name _) = Build.getMainNames artifacts
164 let (NE.List name _) = Build.getMainNames artifacts
terminal/src/Develop/Generate/Index.hs+3−1
@@ -13,6 +13,7 @@ import qualified Data.Map as Map
13import qualified System.Directory as Dir
13import qualified System.Directory as Dir
14import System.FilePath ((</>), splitDirectories, takeExtension)
14import System.FilePath ((</>), splitDirectories, takeExtension)
15
15
16+import qualified BackgroundWriter as BW
16import qualified Develop.Generate.Help as Help
17import qualified Develop.Generate.Help as Help
17import qualified Elm.Details as Details
18import qualified Elm.Details as Details
18import qualified Elm.Outline as Outline
19import qualified Elm.Outline as Outline
@@ -167,7 +168,8 @@ getExactDeps maybeOutline =
167 return Map.empty
168 return Map.empty
168
169
169 Just root ->
170 Just root ->
171+ BW.withScope $ \scope ->
170− do result <- Details.load Reporting.silent root
172+ do result <- Details.load Reporting.silent scope root
171 case result of
173 case result of
172 Left _ ->
174 Left _ ->
173 return Map.empty
175 return Map.empty
terminal/src/Develop/StaticFiles/Build.hs+4−2
@@ -13,12 +13,13 @@ import qualified Data.NonEmptyList as NE
13import qualified System.Directory as Dir
13import qualified System.Directory as Dir
14import System.FilePath ((</>))
14import System.FilePath ((</>))
15
15
16−import qualified Reporting.Task as Task
16+import qualified BackgroundWriter as BW
17import qualified Build
17import qualified Build
18import qualified Elm.Details as Details
18import qualified Elm.Details as Details
19import qualified Generate
19import qualified Generate
20import qualified Reporting
20import qualified Reporting
21import qualified Reporting.Exit as Exit
21import qualified Reporting.Exit as Exit
22+import qualified Reporting.Task as Task
22
23
23
24
24
25
@@ -36,10 +37,11 @@ readAsset path =
36
37
37buildReactorFrontEnd :: IO BS.ByteString
38buildReactorFrontEnd :: IO BS.ByteString
38buildReactorFrontEnd =
39buildReactorFrontEnd =
40+ BW.withScope $ \scope ->
39 Dir.withCurrentDirectory "reactor" $
41 Dir.withCurrentDirectory "reactor" $
40 do root <- Dir.getCurrentDirectory
42 do root <- Dir.getCurrentDirectory
41 runTaskUnsafe $
43 runTaskUnsafe $
42− do details <- Task.eio Exit.ReactorBadDetails $ Details.load Reporting.silent root
44+ do details <- Task.eio Exit.ReactorBadDetails $ Details.load Reporting.silent scope root
43 artifacts <- Task.eio Exit.ReactorBadBuild $ Build.fromMains Reporting.silent root details mains
45 artifacts <- Task.eio Exit.ReactorBadBuild $ Build.fromMains Reporting.silent root details mains
44 javascript <- Task.mapError Exit.ReactorBadGenerate $ Generate.prod root details artifacts
46 javascript <- Task.mapError Exit.ReactorBadGenerate $ Generate.prod root details artifacts
45 return (LBS.toStrict (B.toLazyByteString javascript))
47 return (LBS.toStrict (B.toLazyByteString javascript))
terminal/src/Diff.hs+3−2
@@ -13,6 +13,7 @@ import qualified Data.Maybe as Maybe
13import qualified Data.Name as Name
13import qualified Data.Name as Name
14import qualified Data.NonEmptyList as NE
14import qualified Data.NonEmptyList as NE
15
15
16+import qualified BackgroundWriter as BW
16import qualified Build
17import qualified Build
17import Deps.Diff (PackageChanges(..), ModuleChanges(..), Changes(..))
18import Deps.Diff (PackageChanges(..), ModuleChanges(..), Changes(..))
18import qualified Deps.Diff as DD
19import qualified Deps.Diff as DD
@@ -171,8 +172,8 @@ generateDocs (Env maybeRoot _ _ _) =
171
172
172 Just root ->
173 Just root ->
173 do details <-
174 do details <-
174− Task.eio Exit.DiffBadDetails $
175+ Task.eio Exit.DiffBadDetails $ BW.withScope $ \scope ->
175− Details.load Reporting.silent root
176+ Details.load Reporting.silent scope root
176
177
177 case Details._outline details of
178 case Details._outline details of
178 Details.ValidApp _ ->
179 Details.ValidApp _ ->
terminal/src/Install.hs+3−1
@@ -10,6 +10,7 @@ import Data.Map ((!))
10import qualified Data.Map as Map
10import qualified Data.Map as Map
11import qualified Data.Map.Merge.Strict as Map
11import qualified Data.Map.Merge.Strict as Map
12
12
13+import qualified BackgroundWriter as BW
13import qualified Deps.Solver as Solver
14import qualified Deps.Solver as Solver
14import qualified Deps.Registry as Registry
15import qualified Deps.Registry as Registry
15import qualified Elm.Constraint as C
16import qualified Elm.Constraint as C
@@ -124,11 +125,12 @@ attemptChanges root env pkg oldOutline toChars changes =
124attemptChangesHelp :: FilePath -> Solver.Env -> Pkg.Name -> Outline.Outline -> Outline.Outline -> D.Doc -> Task ()
125attemptChangesHelp :: FilePath -> Solver.Env -> Pkg.Name -> Outline.Outline -> Outline.Outline -> D.Doc -> Task ()
125attemptChangesHelp root env pkg oldOutline newOutline question =
126attemptChangesHelp root env pkg oldOutline newOutline question =
126 Task.eio (\_ -> Exit.InstallHasBadDetails pkg (Outline.encode newOutline)) $
127 Task.eio (\_ -> Exit.InstallHasBadDetails pkg (Outline.encode newOutline)) $
128+ BW.withScope $ \scope ->
127 do approved <- Reporting.ask question
129 do approved <- Reporting.ask question
128 if approved
130 if approved
129 then
131 then
130 do Outline.write root newOutline
132 do Outline.write root newOutline
131− result <- Details.verifyInstall root env newOutline
133+ result <- Details.verifyInstall scope root env newOutline
132 case result of
134 case result of
133 Left exit ->
135 Left exit ->
134 do Outline.write root oldOutline
136 do Outline.write root oldOutline
terminal/src/Make.hs+3−1
@@ -17,6 +17,7 @@ import qualified Data.NonEmptyList as NE
17import qualified System.FilePath as FP
17import qualified System.FilePath as FP
18
18
19import qualified AST.Optimized as Opt
19import qualified AST.Optimized as Opt
20+import qualified BackgroundWriter as BW
20import qualified Build
21import qualified Build
21import qualified Elm.Details as Details
22import qualified Elm.Details as Details
22import qualified Elm.ModuleName as ModuleName
23import qualified Elm.ModuleName as ModuleName
@@ -73,9 +74,10 @@ run paths flags@(Flags _ _ _ report _) =
73
74
74runHelp :: FilePath -> [FilePath] -> Reporting.Style -> Flags -> IO (Either Exit.Make ())
75runHelp :: FilePath -> [FilePath] -> Reporting.Style -> Flags -> IO (Either Exit.Make ())
75runHelp root paths style (Flags debug optimize maybeOutput _ maybeDocs) =
76runHelp root paths style (Flags debug optimize maybeOutput _ maybeDocs) =
77+ BW.withScope $ \scope ->
76 Stuff.withRootLock root $ Task.run $
78 Stuff.withRootLock root $ Task.run $
77 do desiredMode <- getMode debug optimize
79 do desiredMode <- getMode debug optimize
78− details <- Task.eio Exit.MakeBadDetails (Details.load style root)
80+ details <- Task.eio Exit.MakeBadDetails (Details.load style scope root)
79 case paths of
81 case paths of
80 [] ->
82 [] ->
81 do exposed <- getExposed details
83 do exposed <- getExposed details
terminal/src/Publish.hs+6−4
@@ -17,6 +17,7 @@ import qualified System.Info as Info
17import qualified System.IO as IO
17import qualified System.IO as IO
18import qualified System.Process as Process
18import qualified System.Process as Process
19
19
20+import qualified BackgroundWriter as BW
20import qualified Build
21import qualified Build
21import qualified Deps.Bump as Bump
22import qualified Deps.Bump as Bump
22import qualified Deps.Diff as Diff
23import qualified Deps.Diff as Diff
@@ -170,10 +171,11 @@ verifyLicense root =
170
171
171verifyBuild :: FilePath -> Task.Task Exit.Publish Docs.Documentation
172verifyBuild :: FilePath -> Task.Task Exit.Publish Docs.Documentation
172verifyBuild root =
173verifyBuild root =
173− reportBuildCheck $ Task.run $
174+ reportBuildCheck $ BW.withScope $ \scope ->
175+ Task.run $
174 do details@(Details.Details _ outline _ _ _) <-
176 do details@(Details.Details _ outline _ _ _) <-
175 Task.eio Exit.PublishBadDetails $
177 Task.eio Exit.PublishBadDetails $
176− Details.load Reporting.silent root
178+ Details.load Reporting.silent scope root
177
179
178 exposed <-
180 exposed <-
179 case outline of
181 case outline of
@@ -293,10 +295,10 @@ withTempDir root callback =
293
295
294verifyZipBuild :: FilePath -> IO (Either Exit.Publish ())
296verifyZipBuild :: FilePath -> IO (Either Exit.Publish ())
295verifyZipBuild root =
297verifyZipBuild root =
296− Task.run $
298+ BW.withScope $ \scope -> Task.run $
297 do details@(Details.Details _ outline _ _ _) <-
299 do details@(Details.Details _ outline _ _ _) <-
298 Task.eio Exit.PublishZipBadDetails $
300 Task.eio Exit.PublishZipBadDetails $
299− Details.load Reporting.silent root
301+ Details.load Reporting.silent scope root
300
302
301 exposed <-
303 exposed <-
302 case outline of
304 case outline of
terminal/src/Repl.hs+5−2
@@ -29,6 +29,7 @@ import qualified System.IO as IO
29import qualified System.Process as Proc
29import qualified System.Process as Proc
30
30
31import qualified AST.Source as Src
31import qualified AST.Source as Src
32+import qualified BackgroundWriter as BW
32import qualified Build
33import qualified Build
33import qualified Elm.Constraint as C
34import qualified Elm.Constraint as C
34import qualified Elm.Details as Details
35import qualified Elm.Details as Details
@@ -377,10 +378,12 @@ data Output
377
378
378attemptEval :: Env -> State -> State -> Output -> IO State
379attemptEval :: Env -> State -> State -> Output -> IO State
379attemptEval (Env root interpreter ansi) oldState newState output =
380attemptEval (Env root interpreter ansi) oldState newState output =
381+ do result <-
382+ BW.withScope $ \scope ->
380− do result <- Stuff.withRootLock root $ Task.run $
383+ Stuff.withRootLock root $ Task.run $
381 do details <-
384 do details <-
382 Task.eio Exit.ReplBadDetails $
385 Task.eio Exit.ReplBadDetails $
383− Details.load Reporting.silent root
386+ Details.load Reporting.silent scope root
384
387
385 artifacts <-
388 artifacts <-
386 Task.eio id $
389 Task.eio id $