diff options
author | Joey Hess <joey@kitenet.net> | 2014-03-18 12:55:08 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2014-03-18 13:02:10 -0400 |
commit | 1e3542644906536aae36088131923b93dab67d44 (patch) | |
tree | a7af40ec84b889d31f1379725e87a595655c3adc /Remote | |
parent | c134f6e46417fd2f4c159234fd717d56f7c2cdaa (diff) |
rsync special remote: Fix slashes when used on Windows.
Diffstat (limited to 'Remote')
-rw-r--r-- | Remote/Rsync.hs | 22 | ||||
-rw-r--r-- | Remote/Rsync/RsyncUrl.hs | 46 |
2 files changed, 47 insertions, 21 deletions
diff --git a/Remote/Rsync.hs b/Remote/Rsync.hs index 8f00a767e..7d051d6cd 100644 --- a/Remote/Rsync.hs +++ b/Remote/Rsync.hs @@ -28,6 +28,7 @@ import Annex.UUID import Annex.Ssh import Remote.Helper.Special import Remote.Helper.Encryptable +import Remote.Rsync.RsyncUrl import Crypto import Utility.Rsync import Utility.CopyFile @@ -40,16 +41,6 @@ import Types.Creds import qualified Data.ByteString.Lazy as L import qualified Data.Map as M -type RsyncUrl = String - -data RsyncOpts = RsyncOpts - { rsyncUrl :: RsyncUrl - , rsyncOptions :: [CommandParam] - , rsyncUploadOptions :: [CommandParam] - , rsyncDownloadOptions :: [CommandParam] - , rsyncShellEscape :: Bool -} - remote :: RemoteType remote = RemoteType { typename = "rsync", @@ -148,17 +139,6 @@ rsyncSetup mu _ c = do gitConfigSpecialRemote u c' "rsyncurl" url return (c', u) -rsyncEscape :: RsyncOpts -> String -> String -rsyncEscape o s - | rsyncShellEscape o && rsyncUrlIsShell (rsyncUrl o) = shellEscape s - | otherwise = s - -rsyncUrls :: RsyncOpts -> Key -> [String] -rsyncUrls o k = map use annexHashes - where - use h = rsyncUrl o </> h k </> rsyncEscape o (f </> f) - f = keyFile k - store :: RsyncOpts -> Key -> AssociatedFile -> MeterUpdate -> Annex Bool store o k _f p = sendAnnex k (void $ remove o k) $ rsyncSend o p k False diff --git a/Remote/Rsync/RsyncUrl.hs b/Remote/Rsync/RsyncUrl.hs new file mode 100644 index 000000000..61bbe2f3f --- /dev/null +++ b/Remote/Rsync/RsyncUrl.hs @@ -0,0 +1,46 @@ +{- Rsync urls. + - + - Copyright 2014 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Remote.Rsync.RsyncUrl where + +import Types +import Locations +import Utility.Rsync +import Utility.SafeCommand + +import System.FilePath.Posix +#ifdef mingw32_HOST_OS +import Data.String.Utils +#endif + +type RsyncUrl = String + +data RsyncOpts = RsyncOpts + { rsyncUrl :: RsyncUrl + , rsyncOptions :: [CommandParam] + , rsyncUploadOptions :: [CommandParam] + , rsyncDownloadOptions :: [CommandParam] + , rsyncShellEscape :: Bool +} + +rsyncEscape :: RsyncOpts -> RsyncUrl -> RsyncUrl +rsyncEscape o u + | rsyncShellEscape o && rsyncUrlIsShell (rsyncUrl o) = shellEscape u + | otherwise = u + +rsyncUrls :: RsyncOpts -> Key -> [RsyncUrl] +rsyncUrls o k = map use annexHashes + where + use h = rsyncUrl o </> hash h </> rsyncEscape o (f </> f) + f = keyFile k +#ifndef mingw32_HOST_OS + hash h = h k +#else + hash h = replace "\\" "/" (h k) +#endif |