| 1 | NEWS for rsync 3.0.0 (UNRELEASED) |
| 2 | Protocol: 30 (changed) |
| 3 | Changes since 2.6.9: |
| 4 | |
| 5 | NOTABLE CHANGES IN BEHAVIOR: |
| 6 | |
| 7 | - The handling of implied directories when using --relative has changed to |
| 8 | send them as directories (e.g. no implied dir is ever sent as a symlink). |
| 9 | This avoids unexpected behavior and should not adversely affect most |
| 10 | people. If you're one of those rare individuals who relied upon having |
| 11 | an implied dir be duplicated as a symlink, you should specify the |
| 12 | transfer of the symlink and the transfer of the referent directory as |
| 13 | separate args. (See also --keep-dirlinks and --no-implied-dirs.) |
| 14 | |
| 15 | - Requesting a remote file list without specifying -r (--recursive) now |
| 16 | sends the -d (--dirs) option to the remote rsync rather than sending -r |
| 17 | along with an extra exclude of /*/*. If the remote rsync does not |
| 18 | understand the -d option (i.e. it is 2.6.3 or older), you will need to |
| 19 | either turn off -d (--no-d), or specify -r --exclude='/*/*' manually. |
| 20 | |
| 21 | - In --dry-run mode, the last line of the verbose summary text is output |
| 22 | with a "(DRY RUN)" suffix to help remind you that no updates were made. |
| 23 | |
| 24 | BUG FIXES: |
| 25 | |
| 26 | - Fixed the output of -ii when combined with one of the --*-dest options: |
| 27 | it now itemizes all the items, not just the changed ones. |
| 28 | |
| 29 | - Made the output of all file types consistent when using a --*-dest |
| 30 | option. Prior versions would output too many creation events for |
| 31 | matching items. |
| 32 | |
| 33 | - The code that waits for a child pid now handles being interrupted by a |
| 34 | signal. This fixes a problem with the pre-xfer exec function not being |
| 35 | able to get the exit status from the script. |
| 36 | |
| 37 | - A negated filter rule (i.e. with a '!' modifier) no longer loses the |
| 38 | negation when sending the filter rules to the remote rsync. |
| 39 | |
| 40 | - Fixed a problem with the --out-format (aka --log-format) option %f: it |
| 41 | no longer outputs superfluous directory info for a non-daemon rsync. |
| 42 | |
| 43 | - Fixed a problem with -vv (double --verbose) and --stats when "pushing" |
| 44 | files (which includes local copies). Version 2.6.9 would complete the |
| 45 | copy, but exit with an error when the receiver output its memory stats. |
| 46 | |
| 47 | - If --password-file is used on a non-daemon transfer, rsync now complains |
| 48 | and exits. This should help users figure out that they can't use this |
| 49 | option to control a remote shell's password prompt. |
| 50 | |
| 51 | - Make sure that directory permissions of a newly-created destination |
| 52 | directory are handled right when --perms is left off. |
| 53 | |
| 54 | - The itemized output of a newly-created destination directory is now |
| 55 | output as a creation event, not a change event. |
| 56 | |
| 57 | - Improved --hard-link so that more corner cases are handled correctly |
| 58 | when combined with options such as --link-dest and/or --ignore-existing. |
| 59 | |
| 60 | - The --append option no longer updates a file that has the same size. |
| 61 | |
| 62 | - Fixed a bug when combining --backup and --backup-dir with --inplace: |
| 63 | any missing backup directories are now created. |
| 64 | |
| 65 | - Fixed a bug when using --backup and --inplace with --whole-file or |
| 66 | --read-batch: backup files are actually created now. |
| 67 | |
| 68 | - Starting up an extra copy of an rsync daemon will not clobber the pidfile |
| 69 | for the running daemon -- if the pidfile exists, the new daemon will exit |
| 70 | with an error. |
| 71 | |
| 72 | - The daemon pidfile is checked and created sooner in the startup sequence. |
| 73 | |
| 74 | - If a daemon module's "path" value is not an absolute pathname, the code |
| 75 | now makes it absolute internally (making it work properly). |
| 76 | |
| 77 | - Ensure that a temporary file always has owner-write permission while we |
| 78 | are writing to it. This avoids problems with some network filesystems. |
| 79 | |
| 80 | - Any errors output about password-file reading no longer cause an error at |
| 81 | the end of the run about a partial transfer. |
| 82 | |
| 83 | ENHANCEMENTS: |
| 84 | |
| 85 | - A new incremental-recursion algorithm is now used when rsync is talking |
| 86 | to another 3.x version. This starts the transfer going more quickly |
| 87 | (before all the files have been found), and requires much less memory. |
| 88 | See the --recursive option in the manpage for some restrictions. |
| 89 | |
| 90 | - Lowered memory use in the non-incremental-recursion algorithm for typical |
| 91 | option values (usually saving from 21-29 bytes per file). |
| 92 | |
| 93 | - The default --delete algorithm is now --delete-during when talking to a |
| 94 | 3.x rsync. This is a faster scan than using --delete-before (which is |
| 95 | the default when talking to older rsync versions), and is compatible with |
| 96 | the new incremental recursion mode. |
| 97 | |
| 98 | - Rsync now allows multiple remote-source args to be specified rather than |
| 99 | having to rely on a special space-splitting side-effect of the remote- |
| 100 | shell. Additional remote args must specify the same host or an empty one |
| 101 | (e.g. empty: :file1 or ::module/file2). This means that local use of |
| 102 | brace expansion now works: rsync -av host:dir/{f1,f2} . |
| 103 | |
| 104 | - Added the --protect-args (-s) option, that tells rsync to send most of |
| 105 | the command-line args at the start of the transfer rather than as args |
| 106 | to the remote-shell command. This protects them from space-splitting, |
| 107 | and only interprets basic wildcard special shell characters (*?[). |
| 108 | |
| 109 | - Added the --delete-delay option, which is a more efficient way to delete |
| 110 | files at the end of the transfer without needing a separate delete pass. |
| 111 | |
| 112 | - Added the --acls (-A) option to preserve Access Control Lists. This is |
| 113 | an improved version of the prior patch that was available, and it even |
| 114 | supports OS X ACLs. If you need to have backward compatibility with old, |
| 115 | acl-patched versions of rsync, apply the acls.diff file from the patches |
| 116 | dir. |
| 117 | |
| 118 | - Added the --xattrs (-X) option to preserver extended attributes. This is |
| 119 | an improved version of the prior patch that was available, and it even |
| 120 | supports OS X xattrs (which includes their resource fork data). If you |
| 121 | need to have backward compatibility with old, xattr-patched versions of |
| 122 | rsync, apply the xattrs.diff file from the patches dir. |
| 123 | |
| 124 | - Added the --fake-super option that allows a non-super user to preserve |
| 125 | all attributes of a file by using a special extended-attribute idiom. |
| 126 | It even supports the storing of foreign ACL data on your backup server. |
| 127 | There is also an analogous "fake super" option for an rsync daemon. |
| 128 | |
| 129 | - Added the --iconv option, which allows rsync to convert filenames from |
| 130 | one character-set to another during the transfer. The default is to make |
| 131 | this feature available as long as your system has iconv_open(). If |
| 132 | compilation fails, specify --disable-iconv to configure, and then |
| 133 | rebuild. If you want rsync to perform character-set conversions by |
| 134 | default, you can specify --enable-iconv=CONVERT_STRING with the default |
| 135 | value for the --iconv option that you wish to use. For example, |
| 136 | "--enable-iconv=." is a good choice. See the rsync manpage for an |
| 137 | explanation of the --iconv option's settings. |
| 138 | |
| 139 | - Added the --skip-compress=LIST option to override the default list of |
| 140 | file suffixes that will not be compressed when using --compress. |
| 141 | |
| 142 | - The daemon's default for "dont compress" was extended to include: |
| 143 | *.7z *.mp[34] *.mov *.avi *.ogg *.jpg *.jpeg |
| 144 | The matching routine was also optimized to run more quickly. |
| 145 | |
| 146 | - The --max-delete option now outputs a warning if it skipped any file |
| 147 | deletions, including a count of how many deletions were skipped. (Older |
| 148 | versions just silently stopped deleting things.) |
| 149 | |
| 150 | - You may specify --max-delete=0 to a 3.0.0 client to request that it warn |
| 151 | about extraneous files without deleting anything. If you're not sure |
| 152 | what version the client is, you can use the less-obvious --max-delete=-1, |
| 153 | as both old and new versions will treat that as the same request (though |
| 154 | older versions don't warn). |
| 155 | |
| 156 | - The --hard-link option now uses less memory on both the sending and |
| 157 | receiving side for all protocol versions. For protocol 30, the use of a |
| 158 | hashtable on the sending side allows us to more efficiently convey to the |
| 159 | receiver what files are linked together. This reduces the amount of data |
| 160 | sent over the socket by a considerable margin (rather than adding more |
| 161 | data), and limits the in-memory storage of the device+inode information |
| 162 | to just the sending side for the new protocol 30, or to the receiving |
| 163 | side when speaking an older protocol (note that older rsync versions kept |
| 164 | the device+inode information on both sides). |
| 165 | |
| 166 | - The filter rules now support a perishable ("p") modifier that marks rules |
| 167 | that should not have an effect in a directory that is being deleted. e.g. |
| 168 | -f '-p .svn/' would only affect "live" .svn directories. |
| 169 | |
| 170 | - If we get an error setting the time on a symlink, we don't complain about |
| 171 | it anymore (since some operating systems don't support that, and it's not |
| 172 | that important). |
| 173 | |
| 174 | - Protocol 30 now uses MD5 checksums instead of MD4. |
| 175 | |
| 176 | - Changed the --append option to not checksum the existing data in the |
| 177 | destination file, which speeds up file appending. |
| 178 | |
| 179 | - Added the --append-verify option, which works like the older --append |
| 180 | option (verifying the existing data in the destination file). For |
| 181 | compatibility with older rsync versions, any use of --append that is |
| 182 | talking protocol 29 or older will revert to the --append-verify method. |
| 183 | |
| 184 | - Documented and extended the support for the RSYNC_CONNECT_PROG variable |
| 185 | that can be used to enhance the client side of a daemon connection. |
| 186 | |
| 187 | - Improved the dashes and double-quotes in the nroff manpage output. |
| 188 | |
| 189 | - We now support a lot more --no-OPTION override options. |
| 190 | |
| 191 | INTERNAL: |
| 192 | |
| 193 | - The file-list sorting algorithm now uses a sort that keeps any same- |
| 194 | named items in the same order as they were specified. This allows |
| 195 | rsync to always ensure that the first of the duplicates is the one |
| 196 | that will be included in the copy. The new sort was also faster |
| 197 | than the glibc version of qsort() and mergesort() in my testing. |
| 198 | |
| 199 | - Rsync now supports the transfer of 64-bit timestamps (time_t values). |
| 200 | |
| 201 | - Fixed a build problem with older (2.x) versions of gcc. |
| 202 | |
| 203 | - Added some isType() functions that make dealing with signed characters |
| 204 | easier without forcing variables via casts. |
| 205 | |
| 206 | - Changed strcat/strcpy/sprintf function calls to use safer versions. |
| 207 | |
| 208 | - Upgraded the included popt version to 1.10.2 and improved its use of |
| 209 | string-handling functions. |
| 210 | |
| 211 | - Added missing prototypes for compatibility functions from the lib dir. |
| 212 | |
| 213 | - Configure determines if iconv() has a const arg, allowing us to avoid a |
| 214 | compiler warning. |
| 215 | |
| 216 | - Made the sending of some numbers more efficient for protocol 30. |
| 217 | |
| 218 | - Make sure that a daemon process doesn't mind if the client was weird and |
| 219 | omitted the --server option. |
| 220 | |
| 221 | - Improved the use of "const" on pointers. |
| 222 | |
| 223 | - Improved J.W.'s pool_alloc routines to add a way of freeing older |
| 224 | sections of a pool's memory. |
| 225 | |
| 226 | - The getaddrinfo.c compatibility code in the "lib" dir was replaced with |
| 227 | some new code (derived from samba, derived from PostgreSQL) that has a |
| 228 | better license than the old code. |
| 229 | |
| 230 | DEVELOPER RELATED: |
| 231 | |
| 232 | - Rsync is now licensed under the GPLv3 or later. |
| 233 | |
| 234 | - When running the tests, we now put our per-test temp dirs into a sub- |
| 235 | directory named testtmp (which is created, if missing). This allows |
| 236 | someone to symlink the testtmp directory to another filesystem (which is |
| 237 | useful if the build dir's filesystem does not support ACLs and xattrs, |
| 238 | but another file system does). |
| 239 | |
| 240 | - Rsync now has a way of handling protocol-version changes during the |
| 241 | development of a new protocol version. This causes any out-of-sync |
| 242 | versions to speak an older protocol rather than fail in a cryptic manner. |
| 243 | This addition makes it safe to deploy a pre-release version that may |
| 244 | interact with the public. This new exchange of sub-version info does not |
| 245 | interfere with the {MIN,MAX}_PROTOCOL_VERSION checking algorithm (which |
| 246 | does not have enough range to allow the main protocol number to be |
| 247 | incremented for every minor tweak in that happens during development). |