Mention the latest protocol-29 changes.
[rsync/rsync.git] / NEWS
diff --git a/NEWS b/NEWS
index 24cf7dd..edbd15f 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -13,9 +13,20 @@ Changes since 2.6.3:
       being pushed (since the stats come from the sending side).
       (Requires protocol 29 for a pull.)
 
-    - The "%o" (operation) log format now has a third value (besides "send"
-      and "recv"):  "del." (with trailing dot to make it 4 chars).  This
-      changes the way deletions are logged in the daemon's log file.
+    - The "%o" (operation) log-format escape now has a third value (besides
+      "send" and "recv"):  "del." (with trailing dot to make it 4 chars).
+      This changes the way deletions are logged in the daemon's log file.
+
+    - When the --log-format option is combined with --verbose, rsync now
+      avoids outputting the name of the file twice in most circumstances.
+      As long as the --log-format item does not refer to any post-transfer
+      items (such as %b or %c), the --log-format message is output prior to
+      the transfer with --verbose being the equivalent of a --log-format of
+      '%n%L' (which outputs the name and any symlink info).  If the log
+      output must occur after the transfer to be complete, the only time
+      the name is also output prior to the transfer is when --progress was
+      specified (so that the name will precede the progress stats, and the
+      full --log-format output will come after).
   
   BUG FIXES:
 
@@ -36,6 +47,11 @@ Changes since 2.6.3:
     - Fixed a potential hang when verbosity is high, the client side is
       the sender, and the file-list is large.
 
+    - Fixed a potential protocol-corrupting bug where the generator
+      might accidentally merge a message from the receiver into the
+      middle of a multiplexed packet of data that is waiting for the
+      socket to allow it to flush.
+
     - We now check if the OS doesn't support using mknod() for creating
       FIFOs and sockets, and compile-in using mkfifo() and socket() when
       necessary.
@@ -58,6 +74,10 @@ Changes since 2.6.3:
       relative path), the backup code was erroneously trying to backup a
       file that was put into the partial-dir.
 
+    - If a file gets resent in a single transfer and the --backup option is
+      enabled along with --inplace, rsync no longer performs a duplicate
+      backup (it used to overwrite the first backup with the failed file).
+
     - One call to flush_write_file() was not being checked for an error.
 
     - The --no-relative option was not being sent from the client to a
@@ -72,7 +92,7 @@ Changes since 2.6.3:
     - Fixed a bug that would sometimes surface when using --compress and
       sending a file with a block-size larger than 64K (either manually
       specified, or computed due to the file being really large).  Prior
-      versions of rsync would sometimes fail to to decompress the data
+      versions of rsync would sometimes fail to decompress the data
       properly, and thus the transferred file would fail its verification.
 
     - If a daemon can't open the specified log file (i.e. syslog is not
@@ -88,16 +108,37 @@ Changes since 2.6.3:
       is creating (e.g. dirs, symlinks) is now integrated into the progress
       output without overlapping it.  (Requires protocol 29.)
 
+    - When --timeout is specified, lulls that occur in the transfer while
+      the generator is doing work that does not generate socket traffic
+      (looking for changed files, deleting files, doing directory-time
+      touch-ups, etc.) will cause a new keep-alive packet to be sent that
+      should keep the transfer going as long as the generator continues to
+      make progress.  (Requires protocol 29.)
+
+    - The stat size of a device is not added to the total file size of the
+      items in the transfer since the size might be undefined on some OSes.
+
+    - Fixed a problem with refused-option messages sometimes not making it
+      back to the client side when a remote --files-from was in effect and
+      the daemon was the receiver.
+
+    - The --compare-dest option was not updating a file that differred in
+      (the preserved) attributes from the version in the compare-dest DIR.
+
+    - When rsync is copying files into a write-protected directory, fixed
+      the changed-report output for the directory so that we don't report
+      an identical directory as changed.
+
   ENHANCEMENTS:
 
     - Rsync now supports popt's option aliases, which means that you can
       use /etc/popt and/or ~/.popt to create your own option aliases.
 
     - Added the --delete-during (--del) option which will delete files
-      from on the receiving side incrementally as each directory in the
+      from the receiving side incrementally as each directory in the
       transfer is being processed.  This makes it more efficient than the
       default, before-the-transfer behavior, which is now available as
-      --delete-before (that is still the default --delete-WHEN option that
+      --delete-before (and is still the default --delete-WHEN option that
       will be chosen if --delete or --delete-excluded is specified without
       a --delete-WHEN choice).  All the --del* options infer --delete, so
       an rsync daemon that refuses "delete" will still refuse to allow any
@@ -106,11 +147,12 @@ Changes since 2.6.3:
     - All the --delete-WHEN options are now more memory efficient:
       Previously an entire duplicate set of file-list objects was created
       on the receiving side for the entire destination hierarchy.  The new
-      algorithm only creates one directory of objects at a time.
+      algorithm only creates one directory of objects at a time (for files
+      inside the transfer).
 
     - Added support for specifying multiple --compare-dest or --link-dest
       options, but only of a single type. (Promoted from the patches dir
-      and enhanced.)
+      and enhanced.) (Requires protocol 29.)
 
     - Added the --max-size option. (Promoted from the patches dir.)
 
@@ -137,7 +179,7 @@ Changes since 2.6.3:
     - Added the --dirs (-d) option for an easier way to copy directories
       without recursion.
 
-    - Added the --list-only option which is mainly a way for the client to
+    - Added the --list-only option, which is mainly a way for the client to
       put the server into listing mode without needing to resort to any
       internal option kluges (e.g. the age-old use of "-r --exclude="/*/*"
       for a non-recursive listing).  This option is used automatically
@@ -190,11 +232,15 @@ Changes since 2.6.3:
       file was renamed with no other changes) as well as based on a fuzzy
       name-matching algorithm.  This option requires protocol 29 because
       it needs the new file-sorting order.  (Promoted from patches dir
-      and enhanced.)
+      and enhanced.) (Requires protocol 29.)
 
     - Added the --remove-sent-files option, which lets you move files
       between systems.
 
+    - The hostname in HOST:PATH or HOST::PATH may now be an IPv6 literal
+      enclosed in '[' and ']' (e.g. "[::1]").  (We already allowed IPv6
+      literals in the rsync://HOST:PORT/PATH format.)
+
     - When building under windows, the default for --daemon is now to
       avoid detaching, requiring the new --detach option to force rsync
       to detach.
@@ -251,14 +297,24 @@ Changes since 2.6.3:
     - A 16-bit flag-word is transmitted after every file-list index.  This
       indicates what is changing between the sender and the receiver.  The
       generator now transmits an index and a flag-word to indicate when
-      dirs and symlinks have changed, which makes the outputting of the
-      information more consistent and less prone to screen corruption (it
-      resorts to the old-style outputting of generator-created change-
-      messages for older protocol versions).
-
-    - If --inplace is specified, the generator flags any transfer that is
-      using an alternate basis file so that the sender can use the entire
-      file in the rsync algorithm (unlike a normal --inplace update).
+      dirs and symlinks have changed (instead of producing a message),
+      which makes the outputting of the information more consistent and
+      less prone to screen corruption (because either the receiver or the
+      sender is now outputting all the file-change info).
+
+    - If a file is being hard-linked, the appropriate bit is enabled in
+      the flag-word and the name of the file that was linked immediately
+      follows in vstring format (see below).
+
+    - If a file is being transferred with an alternate-basis file, the
+      appropriate bit is enabled in the flag-word and a single-byte
+      follows, indicating what type of basis file was chosen.  If that
+      indicates that a fuzzy-match was selected, the name of the match
+      immediately follows in vstring format.  A vstring is a variable
+      length string that has its size written prior to the string, and
+      no terminating null.  If the string is from 1-127 bytes, the length
+      is a single byte.  If it is from 128-32767 bytes, the length is
+      written as ((len >> 8) | 0x80) followed by (len % 0x100).
 
     - The sending of exclude names is done using filter-rule syntax.  This
       means that all names have a prefixed rule indicator, even excludes
@@ -295,6 +351,12 @@ Changes since 2.6.3:
       option.  Also, the shell script created by --write-batch will use the
       --filter option instead of --exclude-from to capture any filter rules.
 
+    - An index equal to the file-list count is sent as a keep-alive packet
+      from the generator to the sender, which then forwards it on to the
+      receiver.  This normally invalid index is only a valid keep-alive
+      packet if the 16-bit flag-word that follows it contains a single bit
+      (ITEM_IS_NEW, which is normally an illegal flag to appear alone).
+
   BUILD CHANGES:
 
     - Handle an operating system that use mkdev() in place of makedev().