@@ -12,7 +12,6 @@ import Control.Monad (filterM, unless, when)
1212import Control.Monad.Except (runExceptT, throwError)
1313import Control.Monad.IO.Class (liftIO)
1414import Control.Monad.Reader (MonadIO)
15−import Data.Containers.ListUtils (nubOrd)
1615import Data.Coerce (coerce)
1716import Data.Either
1817import Data.Foldable (for_)
@@ -125,15 +124,24 @@ runWatch = do
125124-- to the Nix @project@ function.
126125getLocalPkgs :: (MonadObelisk m, MonadIO m) => FilePath -> m [FilePath]
127126getLocalPkgs root = do
127+ rootAbs <- liftIO $ makeAbsolute root
128128 let findPath = $(staticWhich "find")
129129 (_exitCode, out, err') <- readCreateProcessWithExitCode $
130− proc findPath ["-L", root, "-name", "*.cabal", "-o", "-name", Hpack.packageConfig]
130+ proc findPath ["-L", rootAbs, "(", "-name", "*.cabal", "-o", "-name", Hpack.packageConfig, ")", "-a", "-type", "f"]
131131 case T.strip $ T.pack err' of
132132 err | T.null err -> pure ()
133133 | otherwise -> putLog Debug err
134− let unpackedPackagesRelative = lines . T.unpack $ T.strip $ T.pack out
135− rootAbs <- liftIO $ makeAbsolute root
136− pure $ nubOrd $ flip map unpackedPackagesRelative (rootAbs </>)
134+
135+ let packagePaths = filter (not . isIgnored) $ T.lines $ T.strip $ T.pack out
136+ obeliskImplDir = ".obelisk/impl/"
137+ rootObelisk = T.pack (rootAbs </> T.unpack obeliskImplDir)
138+ isIgnored path =
139+ obeliskImplDir `T.isInfixOf` path
140+ && case T.stripPrefix rootObelisk path of
141+ Nothing -> True
142+ Just pathSuffix -> obeliskImplDir `T.isInfixOf` pathSuffix
143+
144+ pure $ map T.unpack packagePaths
137145
138146data GuessPackageFileError = GuessPackageFileError_Ambiguous [FilePath] | GuessPackageFileError_NotFound
139147 deriving (Eq, Ord, Show)