Just tried updating a linux build of rsync from 2.6.6 to 2.6.7. A previous sync that worked fine against a 2.6.6 windows build now no longer functions. I get an error from the remote side saying --no-r: unknown option. + ./rsync -Wav --force --delete --delete-after --progress --stats --files-from=data/afs_umr.edu_dept_ua/files.clean.dat --from0 /afs/umr.edu/dept/ua/ umr-store3.cc.umr.edu::dept/ua/ building file list ... rsync: link_stat "/afs/umr.edu/dept/ua/SYNC-REPORT/AFS-ACLS.new.txt" failed: No such file or directory (2) rsync: on remote machine: --no-r: unknown option rsync error: requested action not supported (code 4) at /home/lapo/packaging/tmp/rsync-2.6.6/clientserver.c(517) rsync: writefd_unbuffered failed to write 4092 bytes: phase "send_file_entry" [sender]: Connection reset by peer (104) rsync: connection unexpectedly closed (4 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(471) [sender]
This is not a regression, this is rsync preventing an incompatible set of options from causing a hang or a crash. In older rsyncs, using --delete without -r would silently drop the --delete options. Beginning with 2.6.7, rsync allows --delete to also be used when --dirs is in effect (which it is with --files-from), but it needs to ensure that the remote rsync is new enough to handle this combination, or the server might silently drop the --delete option, and the protocol could corrupt or hang (due to differences in the exchange of excludes when one side thinks that --delete is in effect and the other does not). The 3 ways you can deal with this are: 1. Drop the --delete and --delete-after options (they were ignored before anyway). 2. Add the -r option (which will cause all directories referenced in the --files-from file to be recursively transferred). 3. Upgrade the remote rsync to 2.6.7. It would have been nice to have generated a helpful error in this circumstance, but since older versions of rsync silently dropped the --delete option instead of generating an error that the delete option required --relative, I had to come up with a creative (and, unfortunately, cryptic) way to ensure that older versions rejected options that they could not handle properly.