diff options
Diffstat (limited to 'Remote')
-rw-r--r-- | Remote/External.hs | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/Remote/External.hs b/Remote/External.hs index b66e102a4..0ac381b8c 100644 --- a/Remote/External.hs +++ b/Remote/External.hs @@ -375,7 +375,8 @@ startExternal external = do return st where start errrelayer g = liftIO $ do - (cmd, ps) <- findShellCommand basecmd + cmdpath <- searchPath basecmd + (cmd, ps) <- maybe (pure (basecmd, [])) findShellCommand cmdpath let basep = (proc cmd (toCommand ps)) { std_in = CreatePipe , std_out = CreatePipe @@ -383,9 +384,8 @@ startExternal external = do } p <- propgit g basep (Just hin, Just hout, Just herr, ph) <- - createProcess p `catchIO` runerr + createProcess p `catchIO` runerr cmdpath stderrelay <- async $ errrelayer herr - checkearlytermination =<< getProcessExitCode ph cv <- newTVarIO $ externalDefaultConfig external pv <- newTVarIO Unprepared pid <- atomically $ do @@ -409,15 +409,11 @@ startExternal external = do environ <- propGitEnv g return $ p { env = Just environ } - runerr _ = giveup ("Cannot run " ++ basecmd ++ " -- Make sure it's in your PATH and is executable.") - - checkearlytermination Nothing = noop - checkearlytermination (Just exitcode) = ifM (inPath basecmd) - ( giveup $ unwords [ "failed to run", basecmd, "(" ++ show exitcode ++ ")" ] - , do - path <- intercalate ":" <$> getSearchPath - giveup $ basecmd ++ " is not installed in PATH (" ++ path ++ ")" - ) + runerr (Just cmd) _ = + giveup $ "Cannot run " ++ cmd ++ " -- Make sure it's executable and that its dependencies are installed." + runerr Nothing _ = do + path <- intercalate ":" <$> getSearchPath + giveup $ "Cannot run " ++ basecmd ++ " -- It is not installed in PATH (" ++ path ++ ")" stopExternal :: External -> Annex () stopExternal external = liftIO $ do |