Skip to content

Commit 7c1e092

Browse files
committed
ENH Catch exceptions earlier
Otherwise, errors from exceptions do not make it into the logs (which is important in the case where failed files are generated).
1 parent 7c12bf4 commit 7c1e092

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

Execs/Main.hs

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ import Control.Exception (catch, try, throwIO, fromException, displayException)
4545
import Control.Concurrent (setNumCapabilities)
4646
import System.Console.ANSI (setSGRCode, SGR(..), ConsoleLayer(..), Color(..), ColorIntensity(..))
4747
import System.Exit (exitSuccess, exitFailure, ExitCode(..))
48+
import qualified UnliftIO.Exception
49+
import qualified Control.Monad.Except
4850

4951
import Control.Monad.Trans.Resource
5052

@@ -279,15 +281,25 @@ modeExec [email protected]{} = do
279281
writeCWL sc fname cwlname
280282
exitSuccess
281283
outputListLno' InfoOutput ["Script OK. Starting interpretation..."]
282-
interpret modules (nglBody transformed)
283-
triggerHook FinishOkHook
284-
whenM (nConfCreateReportDirectory <$> nglConfiguration) $ do
285-
odir <- nConfReportDirectory <$> nglConfiguration
286-
liftIO $ createDirectoryIfMissing False odir
287-
liftIO $ setupHtmlViewer odir
288-
liftIO $ T.writeFile (odir </> "script.ngl") ngltext
289-
writeOutputJS odir fname ngltext
290-
writeOutputTSV False (Just $ odir </> "fq.tsv") (Just $ odir </> "mappings.tsv")
284+
UnliftIO.Exception.try (interpret modules (nglBody transformed)) >>= \case
285+
Left e -> case fromException e of
286+
Just ec -> liftIO $ throwIO (ec :: ExitCode) -- rethrow
287+
Nothing -> case fromException e of
288+
Just e@NGError{} -> Control.Monad.Except.throwError e
289+
Nothing -> do
290+
outputListLno' ErrorOutput [show e]
291+
liftIO $ do
292+
triggerFailHook
293+
fatalError (show e)
294+
Right () -> do
295+
triggerHook FinishOkHook
296+
whenM (nConfCreateReportDirectory <$> nglConfiguration) $ do
297+
odir <- nConfReportDirectory <$> nglConfiguration
298+
liftIO $ createDirectoryIfMissing False odir
299+
liftIO $ setupHtmlViewer odir
300+
liftIO $ T.writeFile (odir </> "script.ngl") ngltext
301+
writeOutputJS odir fname ngltext
302+
writeOutputTSV False (Just $ odir </> "fq.tsv") (Just $ odir </> "mappings.tsv")
291303
exitSuccess
292304

293305

0 commit comments

Comments
 (0)