summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2010-10-19 01:19:56 -0400
committerGravatar Joey Hess <joey@kitenet.net>2010-10-19 01:19:56 -0400
commitc7664588f81fe27b3e88d49523ef3c483ac6481a (patch)
treee0cc5dc2f24773a5076f973af38f01ef47f29003
parent15986f01d1fd565da151dcb08697e21a94fc9037 (diff)
use safesystem
-rw-r--r--Backend/File.hs7
-rw-r--r--Backend/URL.hs11
-rw-r--r--GitRepo.hs2
-rw-r--r--TODO3
4 files changed, 10 insertions, 13 deletions
diff --git a/Backend/File.hs b/Backend/File.hs
index c97a354d0..8969d7556 100644
--- a/Backend/File.hs
+++ b/Backend/File.hs
@@ -13,6 +13,7 @@ module Backend.File (backend) where
import Control.Monad.State
import System.IO
import System.Cmd
+import System.Cmd.Utils
import System.Exit
import Control.Exception
@@ -92,11 +93,7 @@ copyFromRemote r key file = do
then getlocal
else getremote
where
- getlocal = do
- res <-rawSystem "cp" ["-a", location, file]
- if (res == ExitSuccess)
- then return ()
- else error "cp failed"
+ getlocal = safeSystem "cp" ["-a", location, file]
getremote = error "get via network not yet implemented!"
location = annexLocation r key
diff --git a/Backend/URL.hs b/Backend/URL.hs
index 5c1fd74c9..c9b6ab6df 100644
--- a/Backend/URL.hs
+++ b/Backend/URL.hs
@@ -3,9 +3,11 @@
module Backend.URL (backend) where
+import Control.Exception
import Control.Monad.State (liftIO)
import Data.String.Utils
import System.Cmd
+import System.Cmd.Utils
import System.Exit
import TypeInternals
@@ -36,9 +38,10 @@ downloadUrl :: Key -> FilePath -> Annex Bool
downloadUrl key file = do
showNote "downloading"
liftIO $ putStrLn "" -- make way for curl progress bar
- result <- liftIO $ rawSystem "curl" ["-#", "-o", file, url]
- if (result == ExitSuccess)
- then return True
- else return False
+ result <- liftIO $ (try curl::IO (Either SomeException ()))
+ case result of
+ Left err -> return False
+ Right succ -> return True
where
+ curl = safeSystem "curl" ["-#", "-o", file, url]
url = join ":" $ drop 1 $ split ":" $ show key
diff --git a/GitRepo.hs b/GitRepo.hs
index 32383197b..5b0e68cd6 100644
--- a/GitRepo.hs
+++ b/GitRepo.hs
@@ -167,7 +167,7 @@ gitCommandLine repo params = assertlocal repo $
{- Runs git in the specified repo. -}
run :: Repo -> [String] -> IO ()
run repo params = assertlocal repo $ do
- r <- rawSystem "git" (gitCommandLine repo params)
+ r <- safeSystem "git" (gitCommandLine repo params)
return ()
{- Runs a git subcommand and returns its output. -}
diff --git a/TODO b/TODO
index eca1922b7..e6fdcd0b2 100644
--- a/TODO
+++ b/TODO
@@ -4,9 +4,6 @@
* bug: doesn't learn new remote's uuids if a known (but maybe not accessible)
uuids has a wanted file
-* bug: ctrl+c does not stop it from running another action; need to
- not catch UserInterrupt exceptions.
-
* --push/--pull should take a reponame and files, and push those files
to that repo; dropping them from the current repo