summaryrefslogtreecommitdiff
path: root/Remote
diff options
context:
space:
mode:
Diffstat (limited to 'Remote')
-rw-r--r--Remote/Bup.hs6
-rw-r--r--Remote/Git.hs14
-rw-r--r--Remote/Hook.hs17
-rw-r--r--Remote/Rsync.hs1
4 files changed, 16 insertions, 22 deletions
diff --git a/Remote/Bup.hs b/Remote/Bup.hs
index 0d1b606d3..9da374174 100644
--- a/Remote/Bup.hs
+++ b/Remote/Bup.hs
@@ -136,9 +136,11 @@ retrieveEncrypted :: BupRepo -> (Cipher, Key) -> Key -> FilePath -> Annex Bool
retrieveEncrypted buprepo (cipher, enck) _ f = do
let params = bupParams "join" buprepo [Param $ bupRef enck]
liftIO $ catchBoolIO $ do
- (pid, h) <- hPipeFrom "bup" $ toCommand params
+ (_, Just h, _, pid)
+ <- createProcess (proc "bup" $ toCommand params)
+ { std_out = CreatePipe }
withDecryptedContent cipher (L.hGetContents h) $ L.writeFile f
- forceSuccess pid
+ forceSuccessProcess pid "bup" $ toCommand params
return True
remove :: Key -> Annex Bool
diff --git a/Remote/Git.hs b/Remote/Git.hs
index d80f580fc..a9a6d6004 100644
--- a/Remote/Git.hs
+++ b/Remote/Git.hs
@@ -9,6 +9,7 @@ module Remote.Git (remote, repoAvail) where
import qualified Data.Map as M
import Control.Exception.Extensible
+import System.Process
import Common.Annex
import Utility.CopyFile
@@ -126,17 +127,20 @@ tryGitConfigRead r
safely a = either (const $ return r) return
=<< liftIO (try a :: IO (Either SomeException Git.Repo))
- pipedconfig cmd params = safely $
- pOpen ReadFromPipe cmd (toCommand params) $
- Git.Config.hRead r
+ pipedconfig cmd params = safely $ do
+ (_, Just h, _, pid) <-
+ createProcess (proc cmd $ toCommand params)
+ { std_out = CreatePipe }
+ r' <- Git.Config.hRead r h
+ forceSuccessProcess pid cmd $ toCommand params
+ return r'
geturlconfig headers = do
s <- Url.get (Git.repoLocation r ++ "/config") headers
withTempFile "git-annex.tmp" $ \tmpfile h -> do
hPutStr h s
hClose h
- pOpen ReadFromPipe "git" ["config", "--null", "--list", "--file", tmpfile] $
- Git.Config.hRead r
+ pipedconfig "git" [Param "config", Param "--null", Param "--list", Param "--file", File tmpfile]
store = observe $ \r' -> do
g <- gitRepo
diff --git a/Remote/Hook.hs b/Remote/Hook.hs
index 9e8d3c620..cad6e2fc9 100644
--- a/Remote/Hook.hs
+++ b/Remote/Hook.hs
@@ -9,7 +9,6 @@ module Remote.Hook (remote) where
import qualified Data.ByteString.Lazy as L
import qualified Data.Map as M
-import System.Exit
import System.Environment
import Common.Annex
@@ -136,17 +135,5 @@ checkPresent r h k = do
findkey s = show k `elem` lines s
check Nothing = error "checkpresent hook misconfigured"
check (Just hook) = do
- (frompipe, topipe) <- createPipe
- pid <- forkProcess $ do
- _ <- dupTo topipe stdOutput
- closeFd frompipe
- executeFile "sh" True ["-c", hook]
- =<< hookEnv k Nothing
- closeFd topipe
- fromh <- fdToHandle frompipe
- reply <- hGetContentsStrict fromh
- hClose fromh
- s <- getProcessStatus True False pid
- case s of
- Just (Exited ExitSuccess) -> return $ findkey reply
- _ -> error "checkpresent hook failed"
+ env <- hookEnv k Nothing
+ findkey <$> readProcessEnv "sh" ["-c", hook] env
diff --git a/Remote/Rsync.hs b/Remote/Rsync.hs
index 29bceb2db..ee516a8a5 100644
--- a/Remote/Rsync.hs
+++ b/Remote/Rsync.hs
@@ -9,6 +9,7 @@ module Remote.Rsync (remote) where
import qualified Data.ByteString.Lazy as L
import qualified Data.Map as M
+import System.Posix.Process (getProcessID)
import Common.Annex
import Types.Remote