diff options
| author | Ben Sima <ben@bsima.me> | 2025-11-14 13:38:28 -0500 |
|---|---|---|
| committer | Ben Sima <ben@bsima.me> | 2025-11-14 13:38:28 -0500 |
| commit | 6e9f06455b04e2110bb14eb2c84689cef62ed856 (patch) | |
| tree | 5880c4695b60ef19c2fa6e8d3169a3983158f045 /Omni/Bild.hs | |
| parent | 4c4dc3a991ffde0aa821f8669024787fb65635ba (diff) | |
Thread LineManager through build functions
- Reserve line for each concurrent build - Release line on completion
with success/failed state - Fix hlint eta reduce warning
Task: t-1a1E3j1
Diffstat (limited to 'Omni/Bild.hs')
| -rwxr-xr-x | Omni/Bild.hs | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/Omni/Bild.hs b/Omni/Bild.hs index 414049b..aa79877 100755 --- a/Omni/Bild.hs +++ b/Omni/Bild.hs @@ -142,6 +142,7 @@ import qualified Network.HostName as HostName import qualified Omni.Bild.Meta as Meta import qualified Omni.Cli as Cli import qualified Omni.Log as Log +import qualified Omni.Log.Concurrent as LogC import Omni.Namespace (Namespace (..)) import qualified Omni.Namespace as Namespace import Omni.Test ((@=?)) @@ -954,12 +955,15 @@ build :: Bool -> Bool -> Int -> Int -> Analysis -> IO [Exit.ExitCode] build andTest loud jobs cpus analysis = do root <- Env.getEnv "CODEROOT" let targets = Map.elems analysis - results <- mapConcurrentlyBounded jobs (buildTarget root) targets - pure (map fst results) + LogC.withLineManager jobs <| \lineMgr -> do + results <- mapConcurrentlyBounded jobs (buildTarget lineMgr root) targets + pure (map fst results) where - buildTarget :: FilePath -> Target -> IO (Exit.ExitCode, ByteString) - buildTarget root target@Target {..} = - case compiler of + buildTarget :: LogC.LineManager -> FilePath -> Target -> IO (Exit.ExitCode, ByteString) + buildTarget lineMgr root target@Target {..} = do + mLineNum <- LogC.reserveLine lineMgr namespace + let doRelease = LogC.releaseLine lineMgr mLineNum + result <- case compiler of CPython -> case out of Just _ -> Log.info ["bild", "nix", "python", nschunk namespace] @@ -1016,6 +1020,8 @@ build andTest loud jobs cpus analysis = do Sbcl -> Log.info ["bild", "dev", "lisp", nschunk namespace] >> proc loud namespace (toNixFlag compiler) compilerFlags + doRelease (isSuccess (fst result) ?: (LogC.Success, LogC.Failed)) + pure result data Proc = Proc { loud :: Bool, |
