summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-03-12 22:53:43 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-03-12 22:53:43 -0400
commitb27760aa68d8c4cf1a1b0be3c3a5582539f857b5 (patch)
tree872c0e9c2848fc6268b99b9c1d24d2599792092d
parent6a95240dff4799669ebc14e610f2555c32a86ef3 (diff)
Work around a bug in rsync (IMHO) introduced by openSUSE's SIP patch.
openSUSE patches rsync with a patch adding SIP protocol support. https://gist.github.com/2026167 With this patch, running rsync with no hostname parameter is apparently supposed to list SIP hosts on the network. Practically, it does nothing and exits 0. git-annex uses rsync in a very special way to allow git-annex-shell to be run on the remote host, and so did not need to specify a hostname, or a file to transfer as a rsync parameter. So it sent ":", a degenerate case of "host:file". But the patch cannot differentiate ":" with no host parameter (a bug in the SIP patch surely). Results were that getting files failed, as rsync seemed to succeed, but the requested file failed to arrive. Also I think that sending files will make git-annex think a file has been transferred to the remote when really rsync does nothing. The workaround for this buggy rsync patch is to use "dummy:" as the hostname.
-rw-r--r--Remote/Git.hs7
-rw-r--r--debian/changelog1
2 files changed, 6 insertions, 2 deletions
diff --git a/Remote/Git.hs b/Remote/Git.hs
index 29c50e87f..12a7f1844 100644
--- a/Remote/Git.hs
+++ b/Remote/Git.hs
@@ -290,10 +290,13 @@ rsyncParamsRemote r sending key file = do
then return $ o ++ eparam ++ [dummy, File file]
else return $ o ++ eparam ++ [File file, dummy]
where
- -- the rsync shell parameter controls where rsync
+ -- The rsync shell parameter controls where rsync
-- goes, so the source/dest parameter can be a dummy value,
-- that just enables remote rsync mode.
- dummy = Param ":"
+ -- For maximum compatability with some patched rsyncs,
+ -- the dummy value needs to still contain a hostname,
+ -- even though this hostname will never be used.
+ dummy = Param "dummy:"
rsyncParams :: Git.Repo -> Annex [CommandParam]
rsyncParams r = do
diff --git a/debian/changelog b/debian/changelog
index 8fc2cc330..63797f2ad 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -8,6 +8,7 @@ git-annex (3.20120310) UNRELEASED; urgency=low
are present in the annex in memory.
* status: Fixed to run in constant space.
* status: More accurate display of sizes of tmp and bad keys.
+ * Work around a bug in rsync (IMHO) introduced by openSUSE's SIP patch.
-- Joey Hess <joeyh@debian.org> Sat, 10 Mar 2012 14:03:22 -0400