summaryrefslogtreecommitdiff
path: root/CopyFile.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2010-11-18 13:48:28 -0400
committerGravatar Joey Hess <joey@kitenet.net>2010-11-18 13:49:01 -0400
commit161823d6eaff2adb7b99475b0edfe819fde11be1 (patch)
tree985788fced5af741d7da3b735876ba24e2b7f9d7 /CopyFile.hs
parent54513c69baffa40f2fcce42eb8651fdd98e05277 (diff)
Only use cp -a if it is supported, falling back to cp -p or plain cp.
* cp --reflink=auto is used if supported, and will make git annex unlock much faster on filesystems like btrfs that support copy of write.
Diffstat (limited to 'CopyFile.hs')
-rw-r--r--CopyFile.hs24
1 files changed, 24 insertions, 0 deletions
diff --git a/CopyFile.hs b/CopyFile.hs
new file mode 100644
index 000000000..39f1b0183
--- /dev/null
+++ b/CopyFile.hs
@@ -0,0 +1,24 @@
+{- git-annex file copying
+ -
+ - Copyright 2010 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module CopyFile (copyFile) where
+
+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
+ where
+ opts = if (SysConfig.cp_reflink_auto)
+ then ["--reflink=auto", src, dest]
+ else if (SysConfig.cp_a)
+ then ["-a", src, dest]
+ else if (SysConfig.cp_p)
+ then ["-p", src, dest]
+ else [src, dest]