@@ -72,16 +72,12 @@ import System.Directory
7272import System.Environment (getExecutablePath)
7373import System.FilePath
7474import qualified System.Info
75−import System.IO (hClose, hGetLine)
7675import System.IO.Temp (withSystemTempDirectory)
77−import System.Process (CreateProcess (..), StdStream (..))
7876
7977import Obelisk.App (MonadObelisk, getObelisk, runObelisk)
8078import Obelisk.CliApp (
8179 Severity (..),
82− createProcess_,
8380 failWith,
84− overCreateProcess,
8581 proc,
8682 putLog,
8783 readCreateProcessWithExitCode,
@@ -481,7 +477,7 @@ getGhciSessionSettings (toList -> packageInfos) pathBase useRelativePaths = do
481477 -- all paths to 'pathBase'.
482478 selfExe <- liftIO $ canonicalizePath =<< getExecutablePath
483479 canonicalPathBase <- liftIO $ canonicalizePath pathBase
484− installedPackageIndex <- loadPackageIndex pathBase
480+ installedPackageIndex <- loadPackageIndex packageInfos pathBase
485481
486482 (pkgFiles, pkgSrcPaths :: [NonEmpty FilePath]) <- fmap unzip $ liftIO $ for packageInfos $ \pkg -> do
487483 canonicalSrcDirs <- traverse canonicalizePath $ (_cabalPackageInfo_packageRoot pkg </>) <$> _cabalPackageInfo_sourceDirs pkg
@@ -514,8 +510,8 @@ getGhciSessionSettings (toList -> packageInfos) pathBase useRelativePaths = do
514510 _ -> error $ "Couldn't resolve dependency for " <> prettyShow dep
515511
516512-- Load the package index used by the GHC in this path's nix project
517−loadPackageIndex :: (MonadObelisk m) => FilePath -> m InstalledPackageIndex
518−loadPackageIndex root = do
513+loadPackageIndex :: MonadObelisk m => [CabalPackageInfo] -> FilePath -> m InstalledPackageIndex
514+loadPackageIndex packageInfos root = do
519515 ghcPath <- getPathInNixEnvironment "bash -c 'type -p ghc'"
520516 ghcPkgPath <- getPathInNixEnvironment "bash -c 'type -p ghc-pkg'"
521517 (compiler, _platform, programDb) <- liftIO
@@ -523,13 +519,8 @@ loadPackageIndex root = do
523519 liftIO $ getInstalledPackages Verbosity.silent compiler [GlobalPackageDB] programDb
524520 where
525521 getPathInNixEnvironment cmd = do
526− procSpec <- runProc <$> nixShellRunConfig root True (Just cmd)
527− (_,Just h,_,_) <- createProcess_ "loadPackageIndex" procSpec
528− path <- liftIO $ hGetLine h >>= canonicalizePath
529− liftIO $ hClose h
530− pure path
531− runProc =
532− overCreateProcess (\cs -> cs { std_out = CreatePipe }) . nixShellRunProc
522+ path <- readProcessAndLogStderr Debug =<< mkObNixShellProc root False True (packageInfoToNamePathMap packageInfos) "ghc" (Just cmd)
523+ liftIO $ canonicalizePath $ T.unpack $ T.strip path
533524
534525baseGhciOptions :: [String]
535526baseGhciOptions =