a1730cd6af
Removed dependency on MissingH, instead depending on the split library. After laying groundwork for this since 2015, it was mostly straightforward. Added Utility.Tuple and Utility.Split. Eyeballed System.Path.WildMatch while implementing the same thing. Since MissingH's progress meter display was being used, I re-implemented my own. Bonus: Now progress is displayed for transfers of files of unknown size. This commit was sponsored by Shane-o on Patreon.
48 lines
1,015 B
Haskell
48 lines
1,015 B
Haskell
{- Rsync urls.
|
|
-
|
|
- Copyright 2014 Joey Hess <id@joeyh.name>
|
|
-
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
-}
|
|
|
|
{-# LANGUAGE CPP #-}
|
|
|
|
module Remote.Rsync.RsyncUrl where
|
|
|
|
import Types
|
|
import Annex.Locations
|
|
import Utility.Rsync
|
|
import Utility.SafeCommand
|
|
|
|
import Data.Default
|
|
import System.FilePath.Posix
|
|
#ifdef mingw32_HOST_OS
|
|
import Utility.Split
|
|
#endif
|
|
import Annex.DirHashes
|
|
|
|
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 dirHashes
|
|
where
|
|
use h = rsyncUrl o </> hash h </> rsyncEscape o (f </> f)
|
|
f = keyFile k
|
|
#ifndef mingw32_HOST_OS
|
|
hash h = h def k
|
|
#else
|
|
hash h = replace "\\" "/" (h def k)
|
|
#endif
|