From b27760aa68d8c4cf1a1b0be3c3a5582539f857b5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 12 Mar 2012 22:53:43 -0400 Subject: [PATCH] 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. --- Remote/Git.hs | 7 +++++-- debian/changelog | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Remote/Git.hs b/Remote/Git.hs index 29c50e87fd..12a7f18448 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 8fc2cc3304..63797f2ad1 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 Sat, 10 Mar 2012 14:03:22 -0400