diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2025-05-29 22:33:31 +0200 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-05-29 22:33:31 +0200 |
commit | 3a314a0b236d975033a329e98c27e9f35677e2df (patch) | |
tree | fbfb14f18d25ab5ce3d226327a9874660a80bbb0 /src | |
parent | e95f409e90322d1477993eade2462c8c47e69e8d (diff) |
Fix waiting on failed shell command
Diffstat (limited to 'src')
-rw-r--r-- | src/Script/Shell.hs | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/Script/Shell.hs b/src/Script/Shell.hs index 60ec929..8f25ab5 100644 --- a/src/Script/Shell.hs +++ b/src/Script/Shell.hs @@ -33,8 +33,8 @@ data ShellStatement = ShellStatement newtype ShellScript = ShellScript [ ShellStatement ] -executeScript :: Node -> ProcName -> Handle -> Handle -> Handle -> ShellScript -> TestRun () -executeScript node pname pstdin pstdout pstderr (ShellScript statements) = do +executeScript :: Node -> ProcName -> MVar ExitCode -> Handle -> Handle -> Handle -> ShellScript -> TestRun () +executeScript node _ statusVar pstdin pstdout pstderr (ShellScript statements) = do forM_ statements $ \ShellStatement {..} -> case shellCommand of "echo" -> liftIO $ do T.hPutStrLn pstdout $ T.intercalate " " shellArguments @@ -50,9 +50,10 @@ executeScript node pname pstdin pstdout pstderr (ShellScript statements) = do } liftIO (waitForProcess phandle) >>= \case ExitSuccess -> return () - ExitFailure code -> do - outLine OutputChildFail (Just $ textProcName pname) $ T.pack $ "exit code: " ++ show code + status -> do + liftIO $ putMVar statusVar status throwError Failed + liftIO $ putMVar statusVar ExitSuccess spawnShell :: Node -> ProcName -> ShellScript -> TestRun Process spawnShell procNode procName script = do @@ -62,8 +63,7 @@ spawnShell procNode procName script = do ( hout, pstdout ) <- liftIO $ createPipe ( herr, pstderr ) <- liftIO $ createPipe procHandle <- fmap (Right . (, statusVar)) $ forkTest $ do - executeScript procNode procName pstdin pstdout pstderr script - liftIO $ putMVar statusVar ExitSuccess + executeScript procNode procName statusVar pstdin pstdout pstderr script let procKillWith = Nothing let process = Process {..} |