diff options
Diffstat (limited to 'users/Profpatsch/lorri-wait-for-eval/LorriWaitForEval.hs')
-rw-r--r-- | users/Profpatsch/lorri-wait-for-eval/LorriWaitForEval.hs | 56 |
1 files changed, 20 insertions, 36 deletions
diff --git a/users/Profpatsch/lorri-wait-for-eval/LorriWaitForEval.hs b/users/Profpatsch/lorri-wait-for-eval/LorriWaitForEval.hs index 05c5eb9f2b..a1a4586401 100644 --- a/users/Profpatsch/lorri-wait-for-eval/LorriWaitForEval.hs +++ b/users/Profpatsch/lorri-wait-for-eval/LorriWaitForEval.hs @@ -11,33 +11,27 @@ module Main where import Conduit -import qualified Conduit as Cond +import Conduit qualified as Cond import Control.Concurrent -import qualified Control.Concurrent.Async as Async +import Control.Concurrent.Async qualified as Async import Control.Monad -import qualified Data.Aeson.BetterErrors as Json +import Data.Aeson.BetterErrors qualified as Json import Data.Bifunctor -import Data.ByteString (ByteString) -import qualified Data.Conduit.Binary as Conduit.Binary -import qualified Data.Conduit.Combinators as Cond +import Data.Conduit.Binary qualified as Conduit.Binary +import Data.Conduit.Combinators qualified as Cond import Data.Conduit.Process import Data.Error import Data.Function import Data.Functor -import Data.List.NonEmpty (NonEmpty ((:|)), nonEmpty) -import Data.Text (Text) -import qualified Data.Text as Text -import qualified Data.Text.Encoding -import qualified Data.Text.Encoding.Error import Data.Text.IO (hPutStrLn) -import PyF -import qualified System.Directory as Dir -import qualified System.Environment as Env -import qualified System.Exit as Exit +import MyPrelude +import System.Directory qualified as Dir +import System.Environment qualified as Env +import System.Exit qualified as Exit import System.FilePath (takeDirectory) -import qualified System.FilePath.Posix as FilePath +import System.FilePath.Posix qualified as FilePath import System.IO (stderr) -import qualified System.Posix as Posix +import System.Posix qualified as Posix import Prelude hiding (log) data LorriEvent = LorriEvent @@ -46,15 +40,10 @@ data LorriEvent = LorriEvent } deriving stock (Show) -data ChanToken a - = -- | so we can see that the lorri thread has been initialized - NoEventYet - | ChanEvent a - data LorriEventType = Completed | Started - | Failure + | EvalFailure deriving stock (Show) main :: IO () @@ -97,7 +86,7 @@ main = do "Failure" ( do nixFile <- Json.key "nix_file" Json.asText - pure LorriEvent {nixFile, eventType = Failure} + pure LorriEvent {nixFile, eventType = EvalFailure} ) ) & first Json.displayError' @@ -125,7 +114,7 @@ main = do Completed -> do log [fmt|build completed|] exec (inDirenvDir (takeDirectory shellNix) <$> argv) - Failure -> do + EvalFailure -> do log [fmt|evaluation failed! for path {ev & nixFile}|] Exit.exitWith (Exit.ExitFailure 111) @@ -168,11 +157,12 @@ findShellNix curDir = do let file = dir FilePath.</> "shell.nix" Dir.doesFileExist file >>= \case True -> pure (Just file) - False -> pure Nothing - go curDir - -textToString :: Text -> String -textToString = Text.unpack + False -> do + let parent = FilePath.takeDirectory dir + if parent == dir + then pure Nothing + else go parent + go (FilePath.normalise curDir) smushErrors :: Foldable t => Text -> t Error -> Error smushErrors msg errs = @@ -181,9 +171,3 @@ smushErrors msg errs = & foldMap (\err -> "\n- " <> prettyError err) & newError & errorContext msg - --- | decode a Text from a ByteString that is assumed to be UTF-8, --- replace non-UTF-8 characters with the replacment char U+FFFD. -bytesToTextUtf8Lenient :: Data.ByteString.ByteString -> Data.Text.Text -bytesToTextUtf8Lenient = - Data.Text.Encoding.decodeUtf8With Data.Text.Encoding.Error.lenientDecode |