From 39966ba4eeb6046c511d3f3b630a3ee2ced5019a Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 27 Apr 2011 20:30:43 -0400 Subject: filter out --delete rsync option rsync does not have a --no-delete, so do it this way instead --- Remote/Rsync.hs | 18 +++++++++++++++--- debian/changelog | 2 +- doc/special_remotes/rsync.mdwn | 3 +-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Remote/Rsync.hs b/Remote/Rsync.hs index 0a62ff92f..21c570a87 100644 --- a/Remote/Rsync.hs +++ b/Remote/Rsync.hs @@ -48,9 +48,7 @@ remote = RemoteType { gen :: Git.Repo -> UUID -> Maybe RemoteConfig -> Annex (Remote Annex) gen r u c = do - url <- getConfig r "rsyncurl" (error "missing rsyncurl") - opts <- getConfig r "rsync-options" "" - let o = RsyncOpts url $ map Param $ words opts + o <- genRsyncOpts r cst <- remoteCost r expensiveRemoteCost return $ encryptableRemote c (storeEncrypted o) @@ -67,6 +65,20 @@ gen r u c = do config = Nothing } +genRsyncOpts :: Git.Repo -> Annex RsyncOpts +genRsyncOpts r = do + url <- getConfig r "rsyncurl" (error "missing rsyncurl") + opts <- getConfig r "rsync-options" "" + return $ RsyncOpts url $ map Param $ filter safe $ words opts + where + safe o + -- Don't allow user to pass --delete to rsync; + -- that could cause it to delete other keys + -- in the same hash bucket as a key it sends. + | o == "--delete" = False + | o == "--delete-excluded" = False + | otherwise = True + rsyncSetup :: UUID -> RemoteConfig -> Annex RemoteConfig rsyncSetup u c = do -- verify configuration is sane diff --git a/debian/changelog b/debian/changelog index 78f65e8b9..991c9e0bb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,7 +3,7 @@ git-annex (0.20110426) UNRELEASED; urgency=low * Switch back to haskell SHA library, so git-annex remains buildable on Debian stable. * Added rsync special remotes. This could be used, for example, to - store annexed content on rsync.net, encrypted naturally. Or anywhere else. + store annexed content on rsync.net (encrypted naturally). Or anywhere else. -- Joey Hess Tue, 26 Apr 2011 11:23:54 -0400 diff --git a/doc/special_remotes/rsync.mdwn b/doc/special_remotes/rsync.mdwn index 593644291..b13f9ace7 100644 --- a/doc/special_remotes/rsync.mdwn +++ b/doc/special_remotes/rsync.mdwn @@ -19,5 +19,4 @@ These parameters can be passed to `git annex initremote` to configure rsync: pass to rsync to tell it where to store content. The `annex-rsync-options` git configuration setting can be used to pass -parameters to rsync. Note that it is **not safe** to put "--delete" -in `annex-rsync-options` when using rsync special remotes. +parameters to rsync. -- cgit v1.2.3