Wayne Davison [Sat, 17 Oct 2009 05:39:21 +0000 (22:39 -0700)]
A major overhaul of I/O routines, creating perform_io().
Files-from data is now sent as multiplexed I/O so that it can mingle
with any messages (such as debug output). Requires protocol 31.
Protocol 31 no longer disables output verbosity in a couple instances
that used to cause protocol issues.
Got rid of MSG_* messages that have implied raw data that follows after
them. We instead send a negative index value as a part of the raw data
stream, which is guaranteed to be output together with the following
data. This only affects the (in-progress) protocol 31 and the (self-
contained) communication stream from the receiver to the generator.
Added --debug=IO and improved --debug=FLIST. Some --debug=IO output
requires --msgs2stderr to be used to see it (i.e. sending a message
about sending a message would send another message, ad infinitum).
Wayne Davison [Sat, 29 Aug 2009 18:27:40 +0000 (11:27 -0700)]
Create non-transferred files in a more atomic manner:
If a symlink, device, special-file, or hard-linked file is replacing
an existing non-directory, the new file is created using a temporary
filename and then renamed into place. Also changed the handling of
a cluster of hard-linked symlinks/devices/special-files to always
ensure the first item in the cluster is correct, since it doesn't
really save any significant work to try to find an existing correct
item later in the cluster to link with.
Matt McCutchen [Sat, 23 May 2009 17:59:14 +0000 (10:59 -0700)]
Refactorings to the filter code, most notably:
- Improve function name: parse_rule -> parse_filter_str (to make the
similarity with parse_filter_file clearer, and better indicate that
it can parse multiple rules when FILTRULE_WORD_SPLIT is specified).
- In preparation for rule prefixes containing information beyond the
rflags, change the code to pass around a full "template" filter_rule
instead of just rflags. Callers of parse_filter_{str,file} that want
to specify only rflags can use rule_template(rflags) .
- Remove the MODIFIERS_* strings and instead hand-code the condition
under which each modifier is valid. This should make it easier to
see that the conditions are correct.
- Tighten up default modifiers on merge rules:
- Disallow "!" because it isn't useful.
- If the merge rule specifies a side via "s" or "r", the rules in the
file cannot also specify a side via "s", "r", "hide", etc.
[Patch was changed by Wayne a bit prior to application.]
Wayne Davison [Sun, 26 Apr 2009 14:28:55 +0000 (07:28 -0700)]
Change sending/receiving/storing of the rdev value for special files.
Since the value is not needed, protocol 31 no longer sends it, while
older protocols are optimized so the sender just sends a valid rdev
value as efficiently as possible. The receiver no longer caches an
rdev value for special files, and the generator will always pass a 0
rdev value to do_mknod() for special files. Fixes bug #6280.
Wayne Davison [Sat, 11 Apr 2009 18:31:31 +0000 (11:31 -0700)]
More backup improvements:
- Changed get_backup_name() to verify the backup path, and make any
missing directories. This avoids accidental use of a symlink as a dir
in a backup path, and gets rid of any other non-dirs that are in the
way. It also avoids the need for various operations to retry after
calling make_bak_dir(), simplifying several pices of code.
- Changed create_directory_path() to make_path(), giving it flags that
lets the caller decide if it should skip a leading slash or drop the
trailing filename.
- Mention when we create the backup directory, so the user is not caught
unaware when rsync uses a directory they didn't expect.
- Got rid of some dir-moving backup code that is not used.
- Added a little more backup-debug output.
Wayne Davison [Fri, 13 Mar 2009 16:33:51 +0000 (09:33 -0700)]
My version of Matt's improvements related to missing source args:
- Implement --ignore-missing-args.
- In the absence of --*-missing-args, a missing source arg is an
FERROR_XFER, but doesn't need to be an IOERR_GENERAL.
- Revise the man page.
Wayne Davison [Sat, 28 Feb 2009 16:02:25 +0000 (08:02 -0800)]
Made --progress use ir-chk instead of to-chk when the incremental
recursion scan is still active. Mention the output change more
prominently in the NEWS file. Updated the --progress output in
the manpage, with mention of the new "ir-chk" string's meaning.
Wayne Davison [Fri, 20 Feb 2009 07:02:03 +0000 (23:02 -0800)]
Added a way for supplementary groups to be specified in the rsyncd.conf
file. Also made explicitly-set uid/gid values no longer ignored by a
daemon that was not run by a super-user.