diff options
author | Joey Hess <joey@kitenet.net> | 2010-11-18 13:48:28 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2010-11-18 13:49:01 -0400 |
commit | 161823d6eaff2adb7b99475b0edfe819fde11be1 (patch) | |
tree | 985788fced5af741d7da3b735876ba24e2b7f9d7 /CopyFile.hs | |
parent | 54513c69baffa40f2fcce42eb8651fdd98e05277 (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.hs | 24 |
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] |