- - Most of the I/O is now buffered, which results in a pretty large
- speedup when running under MS Windows. (Craig Barratt)
-
- - Optimizations to the name-handling/comparing code have made some
- significant reductions in user-CPU time for large file sets.
-
- - Some cleanup of the variable types make the code more consistent.
-
- - Reduced memory requirements of hard link preservation.
- (J.W. Schultz)
-
- - Implemented a new algorithm for hard-link handling that speeds up
- the code significantly. (J.W. Schultz and Wayne Davison)
-
- - The --hard-link option now uses the first existing file in the
- group of linked files as the basis for the transfer. This
- prevents the sub-optimal transfer of a file's data when a new
- hardlink is added on the sending side and it sorts alphabetically
- earlier in the list than the files that are already present on the
- receiving side.
-
- - Dropped support for protocol versions less than 20 (2.3.0 released
- 15 Mar 1999) and activated warnings for protocols less than 25
- (2.5.0 released 23 Aug 2001). (Wayne Davison and J.W. Schultz,
- severally)
-
- - More optimal data transmission for --hard-links (protocol 28).
-
- - More optimal data transmission for --checksum (protocol 28).
-
- - Less memory is used when --checksum is specified.
-
- - Less memory is used in the file list (a per-file savings).
-
- - The generator is now better about not modifying the file list
- during the transfer in order to avoid a copy-on-write memory
- bifurcation (on systems where fork() uses shared memory).
- Previously, rsync's shared memory would slowly become unshared,
- resulting in real memory usage nearly doubling on the receiving
- side by the end of the transfer. Now, as long as permissions
- are being preserved, the shared memory should remain that way
- for the entire transfer.
-
- - Changed hardlink info and file_struct + strings to use allocation
- pools. This reduces memory use for large file-sets and permits
- freeing memory to the OS. (J.W. Schultz)
-
- - The 2 pipes used between the receiver and generator processes
- (which are forked on the same machine) were reduced to 1 pipe and
- the protocol improved so that (1) it is now impossible to have the
- "redo" pipe fill up and hang rsync, and (2) trailing messages from
- the receiver don't get lost on their way through the generator
- over to the sender (which mainly affected hard-link messages and
- verbose --stats output).
-
- - Improved the internal uid/gid code to be more portable and a
- little more optimized.
-
- - The device numbers sent when using --devices are now sent as
- separate major/minor values with 32-bit accuracy (protocol 28).
- Previously, the copied devices were sent as a single 32-bit
- number. This will make inter-operation of 64-bit binaries more
- compatible with their 32-bit brethren (with both ends of the
- connection are using protocol 28). Note that optimizations in the
- binary protocol for sending the device numbers often results in
- fewer bytes being used than before, even though more precision is
- now available.
-
- - Some cleanup of the exclude/include structures and its code made
- things clearer (internally), simpler, and more efficient.
-
- - The reading & writing of the file-list in batch-mode is now
- handled by the same code that sends & receives the list over the
- wire. This makes it much easier to maintain. (Note that the
- batch code is still considered to be experimental.)
+ - The file-list sorting algorithm now uses a sort that keeps any same-
+ named items in the same order as they were specified. This allows
+ rsync to always ensure that the first of the duplicates is the one
+ that will be included in the copy. The new sort was also faster
+ than the glibc version of qsort() and mergesort() in my testing.
+
+ - Rsync now supports the transfer of 64-bit timestamps (time_t values).
+
+ - Fixed a build problem with older (2.x) versions of gcc.
+
+ - Added some isType() functions that make dealing with signed characters
+ easier without forcing variables via casts.
+
+ - Changed strcat/strcpy/sprintf function calls to use safer versions.
+
+ - Upgraded the included popt version to 1.10.2 and improved its use of
+ string-handling functions.
+
+ - Added missing prototypes for compatibility functions from the lib dir.
+
+ - Configure determines if iconv() has a const arg, allowing us to avoid a
+ compiler warning.
+
+ - Made the sending of some numbers more efficient for protocol 30.
+
+ - Make sure that a daemon process doesn't mind if the client was weird and
+ omitted the --server option.
+
+ - Improved the use of "const" on pointers.
+
+ - Improved J.W.'s pool_alloc routines to add a way of freeing older
+ sections of a pool's memory.
+
+ DEVELOPER RELATED:
+
+ - Rsync is now licensed under the GPLv3 or later.
+
+ - When running the tests, we now put our per-test temp dirs into a sub-
+ directory named testtmp (which is created, if missing). This allows
+ someone to symlink the testtmp directory to another filesystem (which is
+ useful if the build dir's filesystem does not support ACLs and xattrs,
+ and another file system does).
+
+ - Rsync now has a way of handling protocol-version changes during the
+ development of a new protocol version. This causes any out-of-sync
+ versions to speak an older protocol rather than fail in a cryptic manner.
+ This addition makes it safe to deploy a pre-release version that may
+ interact with the public. This new exchange of sub-version info does not
+ interfere with the {MIN,MAX}_PROTOCOL_VERSION checking algorithm (which
+ does not have enough range to allow the main protocol number to be
+ incremented for every minor tweak in that happens during development).