summaryrefslogtreecommitdiff
path: root/Backend/SHA.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Backend/SHA.hs')
-rw-r--r--Backend/SHA.hs17
1 files changed, 10 insertions, 7 deletions
diff --git a/Backend/SHA.hs b/Backend/SHA.hs
index cf61139e0..a1dd1cf64 100644
--- a/Backend/SHA.hs
+++ b/Backend/SHA.hs
@@ -12,6 +12,7 @@ import qualified Annex
import Types.Backend
import Types.Key
import Types.KeySource
+import System.Process
import qualified Build.SysConfig as SysConfig
import Data.Digest.Pure.SHA
@@ -53,14 +54,16 @@ shaN shasize file filesize = do
showAction "checksum"
case shaCommand shasize filesize of
Left sha -> liftIO $ sha <$> L.readFile file
- Right command -> liftIO $ runcommand command
+ Right command -> liftIO $ parse command . lines <$>
+ readProcess command (toCommand [File file]) ""
where
- runcommand command =
- pOpen ReadFromPipe command (toCommand [File file]) $ \h -> do
- sha <- fst . separate (== ' ') <$> hGetLine h
- if null sha
- then error $ command ++ " parse error"
- else return sha
+ parse command [] = bad command
+ parse command (l:_)
+ | null sha = bad command
+ | otherwise = sha
+ where
+ sha = fst $ separate (== ' ') l
+ bad command = error $ command ++ " parse error"
shaCommand :: SHASize -> Integer -> Either (L.ByteString -> String) String
shaCommand shasize filesize