about summary refs log tree commit diff
path: root/users/Profpatsch/lorri-wait-for-eval/LorriWaitForEval.hs
diff options
context:
space:
mode:
Diffstat (limited to 'users/Profpatsch/lorri-wait-for-eval/LorriWaitForEval.hs')
-rw-r--r--users/Profpatsch/lorri-wait-for-eval/LorriWaitForEval.hs56
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