From 23051899e6497af5fdf66c0989e605d818f75c74 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 30 Dec 2014 15:04:36 -0400 Subject: [PATCH] Windows: Got the rsync special remote working. More aggressive rsync params fixup for windows. Param may contain a url, or a file path, so check if it looks like a local file path and if so, fix it up. On windows only, rsyncUrlIsPath will treat c:foo as a path, rather than as a rsyncurl starting with a host "c". --- Utility/Rsync.hs | 13 ++++++++++++- debian/changelog | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Utility/Rsync.hs b/Utility/Rsync.hs index b314df14e1..ed1eab6f3c 100644 --- a/Utility/Rsync.hs +++ b/Utility/Rsync.hs @@ -5,6 +5,8 @@ - License: BSD-2-clause -} +{-# LANGUAGE CPP #-} + module Utility.Rsync where import Common @@ -53,12 +55,18 @@ rsync = boolSystem "rsync" . rsyncParamsFixup {- On Windows, rsync is from Cygwin, and expects to get Cygwin formatted - paths to files. (It thinks that C:foo refers to a host named "C"). - - Fix up all Files in the Params appropriately. -} + - Fix up the Params appropriately. -} rsyncParamsFixup :: [CommandParam] -> [CommandParam] +#ifdef mingw32_HOST_OS rsyncParamsFixup = map fixup where fixup (File f) = File (toCygPath f) + fixup (Param s) + | rsyncUrlIsPath s = Param (toCygPath s) fixup p = p +#else +rsyncParamsFixup = id +#endif {- Checks if an rsync url involves the remote shell (ssh or rsh). - Use of such urls with rsync requires additional shell @@ -78,6 +86,9 @@ rsyncUrlIsShell s {- Checks if a rsync url is really just a local path. -} rsyncUrlIsPath :: String -> Bool rsyncUrlIsPath s +#ifdef mingw32_HOST_OS + | not (null (takeDrive s)) = True +#endif | rsyncUrlIsShell s = False | otherwise = ':' `notElem` s diff --git a/debian/changelog b/debian/changelog index 4f10dd3336..7f5f9cf887 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,7 @@ git-annex (5.20141220) UNRELEASED; urgency=medium added files even if adding one of the urls fails. * bittorrent: Fix locking problem when using addurl file:// * Windows: Fix local rsync filepath munging (fixes 26 test suite failures). + * Windows: Got the rsync special remote working. -- Joey Hess Mon, 22 Dec 2014 15:16:38 -0400