summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-01-04 22:17:18 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-01-04 22:17:18 -0400
commit27619497ec02685b740c838e512fc61e013c4ec3 (patch)
treed2602329c27b59665f45cff617007936733262a8
parent446978c1e6de0996144ba30adc178d358ed877b7 (diff)
remove file before running cp
This way, if a temp file was left behind, and permissions don't allow it to be written, cp won't fail.
-rw-r--r--CopyFile.hs9
1 files changed, 8 insertions, 1 deletions
diff --git a/CopyFile.hs b/CopyFile.hs
index 8bd07dc35..e913aa070 100644
--- a/CopyFile.hs
+++ b/CopyFile.hs
@@ -7,13 +7,20 @@
module CopyFile (copyFile) where
+import Control.Monad (when)
+import System.Directory (doesFileExist, removeFile)
+
import Utility
import qualified SysConfig
{- The cp command is used, because I hate reinventing the wheel,
- and because this allows easy access to features like cp --reflink. -}
copyFile :: FilePath -> FilePath -> IO Bool
-copyFile src dest = boolSystem "cp" opts
+copyFile src dest = do
+ e <- doesFileExist dest
+ when e $
+ removeFile dest
+ boolSystem "cp" opts
where
opts = if SysConfig.cp_reflink_auto
then ["--reflink=auto", src, dest]