summaryrefslogtreecommitdiff
path: root/Remote/External.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Remote/External.hs')
-rw-r--r--Remote/External.hs20
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