X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/a324d49bfc85cffe74786df66d5f85f8034640f5..f65e6a127684da61c429eabafa702c9915474621:/NEWS diff --git a/NEWS b/NEWS index f0f2aa53..b5633fb2 100644 --- a/NEWS +++ b/NEWS @@ -8,13 +8,38 @@ Changes since 2.6.6: clumping them together with the 'D' for devices. The number of characters is also different (to remove an unused field). + - The way rsync escapes unreadable characters has changed. First, rsync + now has support for recognizing valid multibyte character sequences in + your current locale, allowing it to escape fewer characters than before + for a locale such as UTF-8. Second, it now uses an escape idiom of + "\#123", which is the literal string "\#" followed by exactly 3 octal + digits. Rsync no longer doubles a backslash character in a filename + (e.g. it used to output "foo\\bar" when copying "foo\bar") -- now it only + escapes a backslash that is followed by a hash-sign and 3 digits (0-9) + (e.g. it will output "foo\#134#789" when copying "foo\#789"). See also + the --8-bit-output (-8) option, mentioned below. + + Script writers: the local rsync is the one that outputs escaped names, + so if you need to support unescaping of filenames for older rsyncs, I'd + suggest that you parse the output of "rsync --version" and only use the + old unescaping rules for 2.6.5 and 2.6.6. + BUG FIXES: - Fixed a really old bug that caused --checksum (-c) to checksum all the files encountered during the delete scan (ouch). + - Fixed a potential hang in a remote generator: when the receiver gets a + read-error on the socket, it now signals the generator about this so that + the generator does not try to send any of the terminating error messages + to the client (avoiding a potential hang in some setups). + - Made hard-links work with symlinks and devices again. + - If the sender gets an early EOF reading a source file, we propagate this + error to the receiver so that it can discard the file and try requesting + it again (which is the existing behavior for other kinds of read errors). + - If a device-file/special-file changes permissions, rsync now updates the permissions without recreating the file. @@ -54,8 +79,11 @@ Changes since 2.6.6: reject a ".." dir if it would be sent as a relative dir. - If a non-directory is in the way of a directory and rsync is run with - --dry-run and --delete, rsync no longer complains about not being - able to opendir() the not-yet present directory. + --dry-run and --delete, rsync no longer complains about not being able + to opendir() the not-yet present directory. + + - Got rid of the need for --force to be used in some circumstances with + --delete-after (making it consistent with --delete-before/-during). ENHANCEMENTS: @@ -64,9 +92,8 @@ Changes since 2.6.6: block devices (which now matches the documentation). The -D option still requests both --devices and --specials, and -a still implies -D. - - Added the --append option that makes rsync append data onto files - that are longer on the source than the destination (this includes new - files). + - Added the --append option that makes rsync append data onto files that + are longer on the source than the destination (this includes new files). - Added the --min-size=SIZE option to exclude small files from the transfer. @@ -74,27 +101,30 @@ Changes since 2.6.6: - Added the --compress-level option to allow you to set how aggressive rsync's compression should be (this option implies --compress). - - Enhanced the parsing of the SIZE value for --min-size and --max-size - to allow easy entry of multiples of 1000 (instead of just multiples - of 1024) and off-by-one values too (e.g. --max-size=8mb-1). + - Enhanced the parsing of the SIZE value for --min-size and --max-size to + allow easy entry of multiples of 1000 (instead of just multiples of 1024) + and off-by-one values too (e.g. --max-size=8mb-1). - - The options --human-readable (-h) and --si change the output of the - --stats and the end-of-run summary to be easier to read. + - Added the --8-bit-output (-8) option, which tells rsync to avoid escaping + high-bit characters that it thinks are unreadable in the current locale. + + - The new option --human-readable (-h) changes the output of --progress, + --stats, and the end-of-run summary to be easier to read. If repeated, + the units become powers of 1024 instead of powers of 1000. - If lutimes() and/or lchmod() are around, use them to allow the preservation of attributes on symlinks. - - The --link-dest option now affects symlinks and devices (when - possible). + - The --link-dest option now affects symlinks and devices (when possible). - Improved the output of hard-linked and copied files when using --link-dest, --copy-dest, or --compare-dest. - - Added two config items to the rsyncd.conf parsing: "pre-xfer exec" - and "post-xfer exec". These allow a command to be specified on a - per-module basis that will be run before and/or after a daemon-mode - transfer. (See the manpage for a list of the environment variables - that are set with information about the transfer.) + - Added two config items to the rsyncd.conf parsing: "pre-xfer exec" and + "post-xfer exec". These allow a command to be specified on a per-module + basis that will be run before and/or after a daemon-mode transfer. (See + the manpage for a list of the environment variables that are set with + information about the transfer.) - When using the --relative option, you can now insert a dot dir in the source path to indicate where the replication of the source dirs @@ -103,23 +133,27 @@ Changes since 2.6.6: replicate the "baz/dir" part of the source path (note: a trailing dot dir is unaffected unless it also has a trailing slash). - - Added some new --no-FOO options that make it easier to override - unwanted implied or default options. For example, "-a --no-o" (aka - "--archive --no-owner") can be used to turn off the preservation of - file ownership that is implied by -a. + - Added some new --no-FOO options that make it easier to override unwanted + implied or default options. For example, "-a --no-o" (aka "--archive + --no-owner") can be used to turn off the preservation of file ownership + that is implied by -a. + + - Added the --chmod=MODE option that allows the destination permissions to + be changed from the source permissions. E.g. --chmod=g+w,o-rwx - - Added the --chmod=MODE option that allows the destination permissions - to be changed from the source permissions. E.g. --chmod=g+w,o-rwx + - Added the "incoming chmod" and "outgoing chmod" daemon options that allow + a module to specify what permissions changes should be applied to all + files copied to and from the daemon. - - Allow the --temp-dir option to be specified when starting a daemon, - which sets the default temporary directory for incoming files. + - Allow the --temp-dir option to be specified when starting a daemon, which + sets the default temporary directory for incoming files. - - If --delete is combined with --dirs without --recursive, rsync will - now delete in any directory whose content is being synchronized. + - If --delete is combined with --dirs without --recursive, rsync will now + delete in any directory whose content is being synchronized. - - If --backup is combined with --delete without --backup-dir (and - without --delete-excluded), we add a "protect" filter-rule to ensure - that files with the backup suffix are not deleted. + - If --backup is combined with --delete without --backup-dir (and without + --delete-excluded), we add a "protect" filter-rule to ensure that files + with the backup suffix are not deleted. - The file-count stats that are output by --progress were improved to better indicate what the numbers mean. For instance, the output: @@ -127,30 +161,47 @@ Changes since 2.6.6: to be transferred, and we still need to check 8383 more files out of a total of 9999. - - The include/exclude code now allows a dir/*** directive (with 3 - trailing stars) to match both the dir itself as well as all the - content below the dir (dir/** would not match the dir). + - The include/exclude code now allows a dir/*** directive (with 3 trailing + stars) to match both the dir itself as well as all the content below the + dir (dir/** would not match the dir). - - Added the --skip-empty-dirs (-k) option that makes the receiving - rsync discard empty chains of directories from the file-list. This - makes it much easier to scan a source hierarchy using include, - exclude, filter rules, and only end up with the directories needed - to hold the resulting files. + - Added the --prune-empty-dirs (-m) option that makes the receiving rsync + discard empty chains of directories from the file-list. This makes it + easier to selectively copy files from a source hierarchy and end up with + just the directories needed to hold the resulting files. - If the --itemize-changes (-i) option is repeated, rsync now includes - unchanged files in the itemized output (similar to -vv, but without - all the other verbose messages that can get in the way). Of course, - the client must be version 2.6.7 for this to work, but the remote - rsync only needs to be 2.6.7 if you're pushing files. + unchanged files in the itemized output (similar to -vv, but without all + the other verbose messages that can get in the way). Of course, the + client must be version 2.6.7 for this to work, but the remote rsync only + needs to be 2.6.7 if you're pushing files. + + - Added the --super option to make the receiver always attempt super- user + activities. This is useful for systems that allow things such as devices + to be created or ownership to be set without being UID 0, and is also + useful for someone who wants to ensure that errors will be output if the + receiving rsync isn't being run as root. + + - Added the --sockopts option for those few who want to customize the TCP + options used to contact a daemon rsync. - - Added the --super option to make the receiver always attempt super- - user activities. This is useful for systems that allow things such - as devices to be created or ownership to be set without being UID 0, - and is also useful for someone who wants to ensure that errors will - be output if the receiving rsync isn't being run as root. + - Added a way for the --temp-dir option to be combined with a partial-dir + setting that lets rsync avoid non-atomic updates (for those times when + --temp-dir is not being used because space is tight). - - Added the --sockopts option for those few who want to customize the - TCP options used to contact a daemon rsync. + - A new support script, files-to-excludes, will transform a list of files + into a set of include/exclude directives that will copy those files. + + - A new option, --executability (-E) can be used to preserve just the + execute bit on files, for those times when using the --perms option is + not desired. + + - The daemon now logs each module-list request it receives. + + - New log-format options: %M (modtime), %U (uid), %G (gid), and %B + (permission bits, e.g. "rwxr-xrwt"). + + - The --dry-run option no longer forces the enabling of --verbose. - Some minor documentation improvements. @@ -158,6 +209,10 @@ Changes since 2.6.6: INTERNAL: + - We now use sigaction() and sigprocmask() if possible, and fall back on + signal() if not. Using sigprocmask() ensures that rsync enables all the + signals that it needs, just in case it was started in a masked state. + - Some buffer sizes were expanded a bit, particularly on systems where MAXPATHLEN is overly small (e.g. cygwin). @@ -170,21 +225,32 @@ Changes since 2.6.6: - Reduced the amount of stack memory needed for each level of directory recursion by nearly MAXPATHLEN bytes. - - The wildmatch function was extended to allow an array of strings to - be supplied as the string to match. This allows the exclude code to - do less string copying. + - The wildmatch function was extended to allow an array of strings to be + supplied as the string to match. This allows the exclude code to do less + string copying. - Got rid of the safe_fname() function (and all the myriad calls) and - replaced it with a new function in the log.c code that filters all - the output going to the terminal. + replaced it with a new function in the log.c code that filters all the + output going to the terminal. - Unified the f_name() and the f_name_to() functions. DEVELOPER RELATED: + - The diffs in the patches dir now require "patch -p1