summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-04-27 20:30:43 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-04-27 20:31:56 -0400
commit39966ba4eeb6046c511d3f3b630a3ee2ced5019a (patch)
tree736288a558d829ba0c801c1082382b69507f8b17
parente68f128a9bf46c8f4ebe51fcb3b6f63955cadd2e (diff)
filter out --delete rsync option
rsync does not have a --no-delete, so do it this way instead
-rw-r--r--Remote/Rsync.hs18
-rw-r--r--debian/changelog2
-rw-r--r--doc/special_remotes/rsync.mdwn3
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 <joeyh@debian.org> 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.