equal value without being equal pointers, substitute one of the
pointers for the other in the file list. This optimizes future name
comparisons. Note also that this optimization won't be triggered
very often (because rsync tends to send the names grouped by dir-
name at transmission time), but it's nice to be able to assume that
all files in the same dir have identical dir-name pointers after the
qsort is finished.
of storing it into the files[] array.
- Made flist_find() return "no match" if the found item differs in
its directory-ness from the search item.
- Changed f_name_cmp() to sort sub-directories after non-directories
for each directory's contents. This makes things like the upcoming
--fuzzy patch easier to get right.
- One complicating factor is that clean_flist() needed some extra
code to ensure that a directory doesn't duplicate a non-directory
of the same name.
- Make sure that the "strip_root" code in clean_flist() (for relative
paths) strips off all leading slashes.
trying to stat() any items inside that dir's hierarchy. This fixes
a bug where a symlink to a dir getting replaced by a dir with
identical contents to the dir at the other end of the symlink would
not report the updated files in the new hierarchy. (See bug #1673)
apply to the indicated (sender/receiver) side.
- Added the hide/show and protect/risk filter rules as an alternate
way to specify sender-/receiver-specific include/exclude rules.
- send_rules() now allows f_out to be -1 to indicate that the list
should be scanned but not sent.
- send_rules() now filters the list to remove any items that don't
apply to the current side (after sending the item to the other
side when f_out != -1).
- {send,recv}_filter_list() now transfer the list, even when the
receiver is the server and --delete-excluded was specified (the
exchanged list is appropriately filtered, of course).
- recv_filter_list() uses send_rules() to trim non-applicable rules
when we're a local-server (because we got our filter list without
send/recv calls when fork() duplicated it).
of all the conditional code to support that.
- Improved the comment before send_directory() to indicate that it
gets called with f == -1 from delete_in_dir().
have been refused on the server daemon. This allows us to reject
implied options (e.g. if --partial is refused and -P specified).
- Changed the handling of the --delete refusals from the old idiom
of upgrading "delete" to "delete*" into the new idiom of checking
if refused_delete is set when we determine --delete was implied.
- Changed the --del option from a popt alias into a normal option.
- Mark all the daemon options as refused when a daemon is parsing
the over-the-socket options.
- Created a new function, create_refuse_error(), which is now called
from all the spots that check for refused options.
- Don't call clean_fname() on an empty string -- either reject it
or handle it without erroneously expanding the string.
- If --delay-updates was specified without a --partial-dir option,
don't send the default "--partial-dir=.~tmp~" option if the server
is the receiver -- just let it default.
- Modified f_name_cmp() so that, beginning with protocol 29,
it will guarantee that a directory name will sort one slot
before its contents (prior versions could sort other items
in between in rare instances).