<pre style='margin:0'>
Ryan Schmidt (ryandesign) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/5fce6365d4371f36741ca310ef2642b03ab2f676">https://github.com/macports/macports-ports/commit/5fce6365d4371f36741ca310ef2642b03ab2f676</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 5fce6365d4371f36741ca310ef2642b03ab2f676
</span>Author: Ryan Schmidt <ryandesign@macports.org>
AuthorDate: Mon Apr 18 15:56:37 2022 -0500

<span style='display:block; white-space:pre;color:#404040;'>    rsync: Update to 3.2.4
</span>---
 net/rsync/Portfile             |  19 +-
 net/rsync/files/fileflags.diff | 536 ++++++++++++++++++++++-------------------
 net/rsync/files/implicit.patch |  65 -----
 3 files changed, 291 insertions(+), 329 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/net/rsync/Portfile b/net/rsync/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index edc5e949cc2..abd6f564197 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/net/rsync/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/net/rsync/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5,18 +5,20 @@ PortGroup           compiler_blacklist_versions 1.0
</span> 
 name                rsync
 conflicts           rsync-hfscomp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version             3.2.3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-revision            1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums           rmd160  6eea543c7034f1ef4997f72011d4fcdda2a960da \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256  becc3c504ceea499f4167a260040ccf4d9f2ef9499ad5683c179a697146ce50e \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    size    1069784
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version             3.2.4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums           rmd160  bbf33a7520ab48772878ceb51b3fff764ccbc18f \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  6f761838d08052b0b6579cf7f6737d93e47f01f4da04c5d24d3447b7f2a5fad1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    1114853
</span> 
 categories          net
 license             {GPL-3+ OpenSSLException}
 installs_libs       no
 platforms           darwin freebsd sunos
 maintainers         {ryandesign @ryandesign} openmaintainer
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> description         Fast incremental file transfer
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> long_description    rsync is an open source utility that provides fast \
                     incremental file transfer. It works both locally and remote \
                     with either the custom rsyncd protocol or a remote shell \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -35,7 +37,7 @@ depends_lib         port:popt \
</span> patch.pre_args      -p1
 
 # This patch comes from
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# https://download.samba.org/pub/rsync/src/rsync-patches-3.2.3.tar.gz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://download.samba.org/pub/rsync/src/rsync-patches-3.2.4.tar.gz
</span> # and needs to be updated with each release.
 # We used to use hfs-compression.diff but it has been deliberately
 # disabled by its developers as of 3.1.3 because it needs to be reworked
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -48,11 +50,6 @@ patchfiles          fileflags.diff
</span> # to the developers of rsync.
 patchfiles-append   patch-acls-unpack-error.diff
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Fix implicit declaration errors in configure script. At least partly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# fixed upstream by:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# https://github.com/WayneD/rsync/commit/ada588a7a8035cf3e35f2ca7b60240e87ab66282
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles-append   implicit.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> compiler.blacklist  {clang >= 1100 < 1103}
 
 configure.args      --with-rsyncd-conf=${prefix}/etc/rsyncd.conf
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/net/rsync/files/fileflags.diff b/net/rsync/files/fileflags.diff
</span><span style='display:block; white-space:pre;color:#808080;'>index b1e57522cbc..0b937cf6b58 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/net/rsync/files/fileflags.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/net/rsync/files/fileflags.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -7,11 +7,11 @@ To use this patch, run these commands for a successful build:
</span>     ./configure                         (optional if already run)
     make
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+based-on: 0ac7ebceef70417355f25daf9e2fd94e84c49749
</span> diff --git a/compat.c b/compat.c
 --- a/compat.c
 +++ b/compat.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -39,6 +39,7 @@ extern int checksum_seed;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -40,6 +40,7 @@ extern int checksum_seed;
</span>  extern int basis_dir_cnt;
  extern int prune_empty_dirs;
  extern int protocol_version;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -19,7 +19,7 @@ diff --git a/compat.c b/compat.c
</span>  extern int protect_args;
  extern int preserve_uid;
  extern int preserve_gid;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -46,6 +47,7 @@ extern int preserve_atimes;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -47,6 +48,7 @@ extern int preserve_atimes;
</span>  extern int preserve_crtimes;
  extern int preserve_acls;
  extern int preserve_xattrs;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -27,7 +27,7 @@ diff --git a/compat.c b/compat.c
</span>  extern int xfer_flags_as_varint;
  extern int need_messages_from_generator;
  extern int delete_mode, delete_before, delete_during, delete_after;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -77,7 +79,7 @@ int do_negotiated_strings = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -80,7 +82,7 @@ int do_negotiated_strings = 0;
</span>  int xmit_id0_names = 0;
  
  /* These index values are for the file-list's extra-attribute array. */
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -36,7 +36,7 @@ diff --git a/compat.c b/compat.c
</span>  
  int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
  int sender_symlink_iconv = 0; /* sender should convert symlink content */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -566,6 +568,8 @@ void setup_protocol(int f_out,int f_in)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -574,6 +576,8 @@ void setup_protocol(int f_out,int f_in)
</span>           uid_ndx = ++file_extra_cnt;
        if (preserve_gid)
                gid_ndx = ++file_extra_cnt;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -45,7 +45,7 @@ diff --git a/compat.c b/compat.c
</span>   if (preserve_acls && !am_sender)
                acls_ndx = ++file_extra_cnt;
        if (preserve_xattrs)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -726,6 +730,10 @@ void setup_protocol(int f_out,int f_in)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -737,6 +741,10 @@ void setup_protocol(int f_out,int f_in)
</span>                   fprintf(stderr, "Both rsync versions must be at least 3.2.0 for --crtimes.\n");
                        exit_cleanup(RERR_PROTOCOL);
                }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -104,7 +104,7 @@ diff --git a/delete.c b/delete.c
</span> diff --git a/flist.c b/flist.c
 --- a/flist.c
 +++ b/flist.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -52,6 +52,7 @@ extern int preserve_links;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -53,6 +53,7 @@ extern int preserve_links;
</span>  extern int preserve_hard_links;
  extern int preserve_devices;
  extern int preserve_specials;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -112,7 +112,7 @@ diff --git a/flist.c b/flist.c
</span>  extern int delete_during;
  extern int missing_args;
  extern int eol_nulls;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -383,6 +384,9 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -386,6 +387,9 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
</span>   static time_t crtime;
  #endif
        static mode_t mode;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -122,7 +122,7 @@ diff --git a/flist.c b/flist.c
</span>  #ifdef SUPPORT_HARD_LINKS
        static int64 dev;
  #endif
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -426,6 +430,14 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -429,6 +433,14 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
</span>           xflags |= XMIT_SAME_MODE;
        else
                mode = file->mode;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -137,7 +137,7 @@ diff --git a/flist.c b/flist.c
</span>  
        if (preserve_devices && IS_DEVICE(mode)) {
                if (protocol_version < 28) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -587,6 +599,10 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -590,6 +602,10 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
</span>  #endif
        if (!(xflags & XMIT_SAME_MODE))
                write_int(f, to_wire_mode(mode));
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -148,7 +148,7 @@ diff --git a/flist.c b/flist.c
</span>   if (atimes_ndx && !S_ISDIR(mode) && !(xflags & XMIT_SAME_ATIME))
                write_varlong(f, atime, 4);
        if (preserve_uid && !(xflags & XMIT_SAME_UID)) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -681,6 +697,9 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -684,6 +700,9 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
</span>   static time_t crtime;
  #endif
        static mode_t mode;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -158,7 +158,7 @@ diff --git a/flist.c b/flist.c
</span>  #ifdef SUPPORT_HARD_LINKS
        static int64 dev;
  #endif
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -797,6 +816,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -801,6 +820,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
</span>  #ifdef SUPPORT_CRTIMES
                        if (crtimes_ndx)
                                crtime = F_CRTIME(first);
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -169,7 +169,7 @@ diff --git a/flist.c b/flist.c
</span>  #endif
                        if (preserve_uid)
                                uid = F_OWNER(first);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -869,6 +892,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -874,6 +897,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
</span>  
        if (chmod_modes && !S_ISLNK(mode) && mode)
                mode = tweak_mode(mode, chmod_modes);
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -180,7 +180,7 @@ diff --git a/flist.c b/flist.c
</span>  
        if (preserve_uid && !(xflags & XMIT_SAME_UID)) {
                if (protocol_version < 30)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1027,6 +1054,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1042,6 +1069,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
</span>   }
  #endif
        file->mode = mode;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -191,7 +191,7 @@ diff --git a/flist.c b/flist.c
</span>   if (preserve_uid)
                F_OWNER(file) = uid;
        if (preserve_gid) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1428,6 +1459,10 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1455,6 +1486,10 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
</span>   }
  #endif
        file->mode = st.st_mode;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -205,18 +205,20 @@ diff --git a/flist.c b/flist.c
</span> diff --git a/generator.c b/generator.c
 --- a/generator.c
 +++ b/generator.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -43,8 +43,10 @@ extern int write_devices;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -43,10 +43,12 @@ extern int preserve_devices;
</span>  extern int preserve_specials;
  extern int preserve_hard_links;
  extern int preserve_executability;
 +extern int preserve_fileflags;
  extern int preserve_perms;
<span style='display:block; white-space:pre;background:#ffe0e0;'>- extern int preserve_times;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern int preserve_mtimes;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern int omit_dir_times;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern int omit_link_times;
</span> +extern int force_change;
  extern int delete_mode;
  extern int delete_before;
  extern int delete_during;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -487,6 +489,10 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -486,6 +488,10 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
</span>                   return 0;
                if (perms_differ(file, sxp))
                        return 0;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -227,7 +229,7 @@ diff --git a/generator.c b/generator.c
</span>           if (ownership_differs(file, sxp))
                        return 0;
  #ifdef SUPPORT_ACLS
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -548,6 +554,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -547,6 +553,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
</span>                   iflags |= ITEM_REPORT_OWNER;
                if (gid_ndx && !(file->flags & FLAG_SKIP_GROUP) && sxp->st.st_gid != (gid_t)F_GROUP(file))
                        iflags |= ITEM_REPORT_GROUP;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -239,7 +241,7 @@ diff --git a/generator.c b/generator.c
</span>  #ifdef SUPPORT_ACLS
                if (preserve_acls && !S_ISLNK(file->mode)) {
                        if (!ACL_READY(*sxp))
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1442,6 +1453,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1451,6 +1462,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
</span>           if (!preserve_perms) { /* See comment in non-dir code below. */
                        file->mode = dest_mode(file->mode, sx.st.st_mode, dflt_perms, statret == 0);
                }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -250,7 +252,7 @@ diff --git a/generator.c b/generator.c
</span>           if (statret != 0 && basis_dir[0] != NULL) {
                        int j = try_dests_non(file, fname, ndx, fnamecmpbuf, &sx, itemizing, code);
                        if (j == -2) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1484,10 +1499,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1493,10 +1508,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
</span>            * readable and writable permissions during the time we are
                 * putting files within them.  This is then restored to the
                 * former permissions after the transfer is done. */
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -267,8 +269,8 @@ diff --git a/generator.c b/generator.c
</span>                           rsyserr(FERROR_XFER, errno,
                                        "failed to modify permissions on %s",
                                        full_fname(fname));
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1522,6 +1542,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           int exists = statret == 0 && !S_ISDIR(sx.st.st_mode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1531,6 +1551,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           int exists = statret == 0 && stype != FT_DIR;
</span>           file->mode = dest_mode(file->mode, sx.st.st_mode, dflt_perms, exists);
        }
 +#ifdef SUPPORT_FORCE_CHANGE
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -278,7 +280,7 @@ diff --git a/generator.c b/generator.c
</span>  
  #ifdef SUPPORT_HARD_LINKS
        if (preserve_hard_links && F_HLINK_NOT_FIRST(file)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2102,17 +2126,25 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2104,17 +2128,25 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
</span>                   continue;
                fname = f_name(file, NULL);
                if (fix_dir_perms)
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -331,15 +333,15 @@ diff --git a/main.c b/main.c
</span>  
  extern int dry_run;
  extern int list_only;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -48,6 +51,7 @@ extern int called_from_signal_handler;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- extern int need_messages_from_generator;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -49,6 +52,7 @@ extern int need_messages_from_generator;
</span>  extern int kluge_around_eof;
  extern int got_xfer_error;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern int old_style_args;
</span> +extern int force_change;
  extern int msgs2stderr;
  extern int module_id;
  extern int read_only;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -970,6 +974,22 @@ static int do_recv(int f_in, int f_out, char *local_name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -966,6 +970,22 @@ static int do_recv(int f_in, int f_out, char *local_name)
</span>    * points to an identical file won't be replaced by the referent. */
        copy_links = copy_dirlinks = copy_unsafe_links = 0;
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -365,7 +367,7 @@ diff --git a/main.c b/main.c
</span> diff --git a/options.c b/options.c
 --- a/options.c
 +++ b/options.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -53,6 +53,7 @@ int preserve_hard_links = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -54,6 +54,7 @@ int preserve_hard_links = 0;
</span>  int preserve_acls = 0;
  int preserve_xattrs = 0;
  int preserve_perms = 0;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -373,15 +375,15 @@ diff --git a/options.c b/options.c
</span>  int preserve_executability = 0;
  int preserve_devices = 0;
  int preserve_specials = 0;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -90,6 +91,7 @@ int numeric_ids = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int msgs2stderr = 2; /* Default: send errors to stderr for local & remote-shell transfers */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -95,6 +96,7 @@ int msgs2stderr = 2; /* Default: send errors to stderr for local & remote-shell
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int saw_stderr_opt = 0;
</span>  int allow_8bit_chars = 0;
  int force_delete = 0;
 +int force_change = 0;
  int io_timeout = 0;
  int prune_empty_dirs = 0;
  int use_qsort = 0;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -614,6 +616,8 @@ static struct poptOption long_options[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -619,6 +621,8 @@ static struct poptOption long_options[] = {
</span>    {"perms",           'p', POPT_ARG_VAL,    &preserve_perms, 1, 0, 0 },
    {"no-perms",         0,  POPT_ARG_VAL,    &preserve_perms, 0, 0, 0 },
    {"no-p",             0,  POPT_ARG_VAL,    &preserve_perms, 0, 0, 0 },
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -390,7 +392,7 @@ diff --git a/options.c b/options.c
</span>    {"executability",   'E', POPT_ARG_NONE,   &preserve_executability, 0, 0, 0 },
    {"acls",            'A', POPT_ARG_NONE,   0, 'A', 0, 0 },
    {"no-acls",          0,  POPT_ARG_VAL,    &preserve_acls, 0, 0, 0 },
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -711,6 +715,12 @@ static struct poptOption long_options[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -717,6 +721,12 @@ static struct poptOption long_options[] = {
</span>    {"remove-source-files",0,POPT_ARG_VAL,    &remove_source_files, 1, 0, 0 },
    {"force",            0,  POPT_ARG_VAL,    &force_delete, 1, 0, 0 },
    {"no-force",         0,  POPT_ARG_VAL,    &force_delete, 0, 0, 0 },
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -403,7 +405,7 @@ diff --git a/options.c b/options.c
</span>    {"ignore-errors",    0,  POPT_ARG_VAL,    &ignore_errors, 1, 0, 0 },
    {"no-ignore-errors", 0,  POPT_ARG_VAL,    &ignore_errors, 0, 0, 0 },
    {"max-delete",       0,  POPT_ARG_INT,    &max_delete, 0, 0, 0 },
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -998,6 +1008,14 @@ static void set_refuse_options(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1009,6 +1019,14 @@ static void set_refuse_options(void)
</span>  #ifndef SUPPORT_CRTIMES
        parse_one_refuse_match(0, "crtimes", list_end);
  #endif
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -418,7 +420,7 @@ diff --git a/options.c b/options.c
</span>  
        /* Now we use the descrip values to actually mark the options for refusal. */
        for (op = long_options; op != list_end; op++) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2646,6 +2664,9 @@ void server_options(char **args, int *argc_p)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2689,6 +2707,9 @@ void server_options(char **args, int *argc_p)
</span>   if (xfer_dirs && !recurse && delete_mode && am_sender)
                args[ac++] = "--no-r";
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -428,7 +430,7 @@ diff --git a/options.c b/options.c
</span>   if (do_compression && do_compression_level != CLVL_NOT_SPECIFIED) {
                if (asprintf(&arg, "--compress-level=%d", do_compression_level) < 0)
                        goto oom;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2754,6 +2775,16 @@ void server_options(char **args, int *argc_p)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2784,6 +2805,16 @@ void server_options(char **args, int *argc_p)
</span>                   args[ac++] = "--delete-excluded";
                if (force_delete)
                        args[ac++] = "--force";
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -448,7 +450,7 @@ diff --git a/options.c b/options.c
</span> diff --git a/rsync.1.md b/rsync.1.md
 --- a/rsync.1.md
 +++ b/rsync.1.md
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -361,6 +361,7 @@ detailed description below for a complete description.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -366,6 +366,7 @@ has its own detailed description later in this manpage.
</span>  --keep-dirlinks, -K      treat symlinked dir on receiver as dir
  --hard-links, -H         preserve hard links
  --perms, -p              preserve permissions
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -456,7 +458,7 @@ diff --git a/rsync.1.md b/rsync.1.md
</span>  --executability, -E      preserve executability
  --chmod=CHMOD            affect file and/or directory permissions
  --acls, -A               preserve ACLs (implies --perms)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -401,7 +402,10 @@ detailed description below for a complete description.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -407,7 +408,10 @@ has its own detailed description later in this manpage.
</span>  --ignore-missing-args    ignore missing source args without error
  --delete-missing-args    delete missing source args from destination
  --ignore-errors          delete even if there are I/O errors
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -468,86 +470,92 @@ diff --git a/rsync.1.md b/rsync.1.md
</span>  --max-delete=NUM         don't delete more than NUM files
  --max-size=SIZE          don't transfer any file larger than SIZE
  --min-size=SIZE          don't transfer any file smaller than SIZE
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -717,6 +721,8 @@ your home directory (remove the '=' for that).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Note that `-a` **does not preserve hardlinks**, because finding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     multiply-linked files is expensive.  You must separately specify `-H`.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    Note also that for backward compatibility, `-a` currently does **not**
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    imply the `--fileflags` option.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 0.  `--no-OPTION`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -739,6 +743,7 @@ your home directory (remove the '=' for that).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     recursion and want to preserve almost everything.  Be aware that it does
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     **not** include preserving ACLs (`-A`), xattrs (`-X`), atimes (`-U`),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     crtimes (`-N`), nor the finding and preserving of hardlinks (`-H`).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    It also does **not** imply [`--fileflags`](#opt).
</span>  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1076,7 +1082,7 @@ your home directory (remove the '=' for that).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     The only exception to the above equivalence is when [`--files-from`](#opt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     is specified, in which case [`-r`](#opt) is not implied.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1199,7 +1204,7 @@ your home directory (remove the '=' for that).
</span>      Without this option, if the sending side has replaced a directory with a
      symlink to a directory, the receiving side will delete anything that is in
      the way of the new symlink, including a directory hierarchy (as long as
<span style='display:block; white-space:pre;background:#ffe0e0;'>--    `--force` or `--delete` is in effect).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    `--force-delete` or `--delete` is in effect).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    [`--force`](#opt) or [`--delete`](#opt) is in effect).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    [`--force-delete`](#opt) or [`--delete`](#opt) is in effect).
</span>  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-     See also `--keep-dirlinks` for an analogous option for the receiving side.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     See also [`--keep-dirlinks`](#opt) for an analogous option for the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     receiving side.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1394,6 +1399,37 @@ your home directory (remove the '=' for that).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     those used by [`--fake-super`](#opt)) unless you repeat the option (e.g. `-XX`).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     This "copy all xattrs" mode cannot be used with [`--fake-super`](#opt).
</span>  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1262,6 +1268,29 @@ your home directory (remove the '=' for that).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     those used by `--fake-super`) unless you repeat the option (e.g. `-XX`).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     This "copy all xattrs" mode cannot be used with `--fake-super`.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+0.  `--fileflags` This option causes rsync to update the file-flags to be the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    same as the source files and directories (if your OS supports the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    **chflags**(2) system call).   Some flags can only be altered by the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    super-user and some might only be unset below a certain secure-level
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    (usually single-user mode). It will not make files alterable that are set
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    to immutable on the receiver.  To do that, see `--force-change`,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    `--force-uchange`, and `--force-schange`.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++0.  `--fileflags`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    This option causes rsync to update the file-flags to be the same as the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    source files and directories (if your OS supports the **chflags**(2) system
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    call).   Some flags can only be altered by the super-user and some might
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    only be unset below a certain secure-level (usually single-user mode). It
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    will not make files alterable that are set to immutable on the receiver.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    To do that, see [`--force-change`](#opt), [`--force-uchange`](#opt), and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    [`--force-schange`](#opt).
</span> +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+0.  `--force-change` This option causes rsync to disable both user-immutable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    and system-immutable flags on files and directories that are being updated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    or deleted on the receiving side.  This option overrides `--force-uchange`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    and `--force-schange`.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++0.  `--force-change`
</span> +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+0.  `--force-uchange` This option causes rsync to disable user-immutable flags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    on files and directories that are being updated or deleted on the receiving
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    side.  It does not try to affect system flags.  This option overrides
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    `--force-change` and `--force-schange`.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    This option causes rsync to disable both user-immutable and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    system-immutable flags on files and directories that are being updated or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    deleted on the receiving side.  This option overrides
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    [`--force-uchange`](#opt) and [`--force-schange`](#opt).
</span> +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+0.  `--force-schange` This option causes rsync to disable system-immutable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    flags on files and directories that are being updated or deleted on the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    receiving side.  It does not try to affect user flags.  This option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    overrides `--force-change` and `--force-uchange`.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++0.  `--force-uchange`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    This option causes rsync to disable user-immutable flags on files and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    directories that are being updated or deleted on the receiving side.  It
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    does not try to affect system flags.  This option overrides
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    [`--force-change`](#opt) and [`--force-schange`](#opt).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++0.  `--force-schange`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    This option causes rsync to disable system-immutable flags on files and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    directories that are being updated or deleted on the receiving side.  It
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    does not try to affect user flags.  This option overrides
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    [`--force-change`](#opt) and [`--force-uchange`](#opt).
</span> +
  0.  `--chmod=CHMOD`
  
      This option tells rsync to apply one or more comma-separated "chmod" modes
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1729,7 +1758,7 @@ your home directory (remove the '=' for that).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     option a step farther: each missing arg will become a deletion request of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     the corresponding destination file on the receiving side (should it exist).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     If the destination file is a non-empty directory, it will only be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    successfully deleted if `--force` or `--delete` are in effect.  Other than
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    successfully deleted if `--force-delete` or `--delete` are in effect.  Other than
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     that, this option is independent of any other type of delete processing.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1897,8 +1933,8 @@ your home directory (remove the '=' for that).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     [`--ignore-missing-args`](#opt) option a step farther: each missing arg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     will become a deletion request of the corresponding destination file on the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     receiving side (should it exist).  If the destination file is a non-empty
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    directory, it will only be successfully deleted if [`--force`](#opt) or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    [`--delete`](#opt) are in effect.  Other than that, this option is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    directory, it will only be successfully deleted if [`--force-delete`](#opt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    or [`--delete`](#opt) are in effect.  Other than that, this option is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     independent of any other type of delete processing.
</span>  
      The missing source files are represented by special file-list entries which
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1740,15 +1769,16 @@ your home directory (remove the '=' for that).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Tells `--delete` to go ahead and delete files even when there are I/O
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     errors.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1909,14 +1945,14 @@ your home directory (remove the '=' for that).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     Tells [`--delete`](#opt) to go ahead and delete files even when there are
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     I/O errors.
</span>  
 -0.  `--force`
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+0.  `--force-delete`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++0.  `--force-delete`, `--force`
</span>  
      This option tells rsync to delete a non-empty directory when it is to be
      replaced by a non-directory.  This is only relevant if deletions are not
<span style='display:block; white-space:pre;background:#ffe0e0;'>-     active (see `--delete` for details).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     active (see [`--delete`](#opt) for details).
</span>  
 -    Note for older rsync versions: `--force` used to still be required when
<span style='display:block; white-space:pre;background:#ffe0e0;'>--    using `--delete-after`, and it used to be non-functional unless the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    `--recursive` option was also enabled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    This option can be abbreviated `--force` for backward compatibility.  Note
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    that some older rsync versions used to still require `--force` when using
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    `--delete-after`, and it used to be non-functional unless the `--recursive`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    option was also enabled.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    using [`--delete-after`](#opt), and it used to be non-functional unless the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    Note that some older rsync versions used to require `--force` when using
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    [`--delete-after`](#opt), and it used to be non-functional unless the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     [`--recursive`](#opt) option was also enabled.
</span>  
  0.  `--max-delete=NUM`
<span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2700,7 +2730,7 @@ your home directory (remove the '=' for that).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     output of other verbose messages).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2913,7 +2949,7 @@ your home directory (remove the '=' for that).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     also turns on the output of other verbose messages).
</span>  
      The "%i" escape has a cryptic output that is 11 letters long.  The general
 -    format is like the string `YXcstpoguax`, where **Y** is replaced by the type
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -564,9 +572,9 @@ diff --git a/rsync.c b/rsync.c
</span>  extern int preserve_perms;
 +extern int preserve_fileflags;
  extern int preserve_executability;
<span style='display:block; white-space:pre;background:#ffe0e0;'>- extern int preserve_times;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- extern int am_root;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -467,6 +468,39 @@ mode_t dest_mode(mode_t flist_mode, mode_t stat_mode, int dflt_perms,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern int preserve_mtimes;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern int omit_dir_times;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -468,6 +469,39 @@ mode_t dest_mode(mode_t flist_mode, mode_t stat_mode, int dflt_perms,
</span>   return new_mode;
  }
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -606,7 +614,7 @@ diff --git a/rsync.c b/rsync.c
</span>  static int same_mtime(struct file_struct *file, STRUCT_STAT *st, int extra_accuracy)
  {
  #ifdef ST_MTIME_NSEC
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -543,7 +577,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -544,7 +578,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
</span>           if (am_root >= 0) {
                        uid_t uid = change_uid ? (uid_t)F_OWNER(file) : sxp->st.st_uid;
                        gid_t gid = change_gid ? (gid_t)F_GROUP(file) : sxp->st.st_gid;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -615,7 +623,7 @@ diff --git a/rsync.c b/rsync.c
</span>                           /* We shouldn't have attempted to change uid
                                 * or gid unless have the privilege. */
                                rsyserr(FERROR_XFER, errno, "%s %s failed",
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -642,7 +676,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -654,7 +688,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
</span>  
  #ifdef HAVE_CHMOD
        if (!BITS_EQUAL(sxp->st.st_mode, new_mode, CHMOD_BITS)) {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -624,7 +632,7 @@ diff --git a/rsync.c b/rsync.c
</span>           if (ret < 0) {
                        rsyserr(FERROR_XFER, errno,
                                "failed to set permissions on %s",
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -654,6 +688,19 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -666,6 +700,19 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
</span>   }
  #endif
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -644,7 +652,7 @@ diff --git a/rsync.c b/rsync.c
</span>   if (INFO_GTE(NAME, 2) && flags & ATTRS_REPORT) {
                if (updated)
                        rprintf(FCLIENT, "%s\n", fname);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -731,7 +778,8 @@ int finish_transfer(const char *fname, const char *fnametmp,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -743,7 +790,8 @@ int finish_transfer(const char *fname, const char *fnametmp,
</span>  
        /* Change permissions before putting the file into place. */
        set_file_attrs(fnametmp, file, NULL, fnamecmp,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -654,7 +662,7 @@ diff --git a/rsync.c b/rsync.c
</span>  
        /* move tmp file over real file */
        if (DEBUG_GTE(RECV, 1))
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -748,6 +796,10 @@ int finish_transfer(const char *fname, const char *fnametmp,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -760,6 +808,10 @@ int finish_transfer(const char *fname, const char *fnametmp,
</span>   }
        if (ret == 0) {
                /* The file was moved into place (not copied), so it's done. */
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -677,7 +685,7 @@ diff --git a/rsync.h b/rsync.h
</span>  #define XMIT_CRTIME_EQ_MTIME (1<<17)       /* any protocol - restricted by command-line option */
  
  /* These flags are used in the live flist data. */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -182,6 +182,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -192,6 +192,7 @@
</span>  #define ATTRS_SKIP_MTIME (1<<1)
  #define ATTRS_ACCURATE_TIME   (1<<2)
  #define ATTRS_SKIP_ATIME      (1<<3)
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -685,7 +693,7 @@ diff --git a/rsync.h b/rsync.h
</span>  #define ATTRS_SKIP_CRTIME        (1<<5)
  
  #define MSG_FLUSH     2
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -210,6 +211,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -220,6 +221,7 @@
</span>  #define ITEM_REPORT_GROUP (1<<6)
  #define ITEM_REPORT_ACL (1<<7)
  #define ITEM_REPORT_XATTR (1<<8)
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -693,7 +701,7 @@ diff --git a/rsync.h b/rsync.h
</span>  #define ITEM_REPORT_CRTIME (1<<10)
  #define ITEM_BASIS_TYPE_FOLLOWS (1<<11)
  #define ITEM_XNAME_FOLLOWS (1<<12)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -578,6 +580,31 @@ typedef unsigned int size_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -590,6 +592,31 @@ typedef unsigned int size_t;
</span>  #define SUPPORT_CRTIMES 1
  #endif
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -725,7 +733,7 @@ diff --git a/rsync.h b/rsync.h
</span>  /* Find a variable that is either exactly 32-bits or longer.
   * If some code depends on 32-bit truncation, it will need to
   * take special action in a "#if SIZEOF_INT32 > 4" section. */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -804,6 +831,7 @@ extern int pathname_ndx;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -821,6 +848,7 @@ extern int pathname_ndx;
</span>  extern int depth_ndx;
  extern int uid_ndx;
  extern int gid_ndx;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -733,7 +741,7 @@ diff --git a/rsync.h b/rsync.h
</span>  extern int acls_ndx;
  extern int xattrs_ndx;
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -858,6 +886,11 @@ extern int xattrs_ndx;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -875,6 +903,11 @@ extern int xattrs_ndx;
</span>  /* When the associated option is on, all entries will have these present: */
  #define F_OWNER(f) REQ_EXTRA(f, uid_ndx)->unum
  #define F_GROUP(f) REQ_EXTRA(f, gid_ndx)->unum
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -756,22 +764,22 @@ diff --git a/syscall.c b/syscall.c
</span>  extern int inplace;
  extern int preallocate_files;
  extern int preserve_perms;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -77,7 +78,23 @@ int do_unlink(const char *fname)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -81,7 +82,23 @@ int do_unlink(const char *path)
</span>  {
        if (dry_run) return 0;
        RETURN_ERROR_IF_RO_OR_LO;
<span style='display:block; white-space:pre;background:#ffe0e0;'>--       return unlink(fname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (unlink(fname) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  return unlink(path);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (unlink(path) == 0)
</span> +         return 0;
 +#ifdef SUPPORT_FORCE_CHANGE
 +      if (force_change && errno == EPERM) {
 +              STRUCT_STAT st;
 +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+               if (x_lstat(fname, &st, NULL) == 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           && make_mutable(fname, st.st_mode, st.st_flags, force_change) > 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  if (unlink(fname) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (x_lstat(path, &st, NULL) == 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           && make_mutable(path, st.st_mode, st.st_flags, force_change) > 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  if (unlink(path) == 0)
</span> +                         return 0;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+                       undo_make_mutable(fname, st.st_flags);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  undo_make_mutable(path, st.st_flags);
</span> +         }
 +              /* TODO: handle immutable directories */
 +              errno = EPERM;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -781,7 +789,7 @@ diff --git a/syscall.c b/syscall.c
</span>  }
  
  #ifdef SUPPORT_LINKS
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -142,14 +159,35 @@ int do_link(const char *old_path, const char *new_path)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -146,14 +163,35 @@ int do_link(const char *old_path, const char *new_path)
</span>  }
  #endif
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -819,7 +827,7 @@ diff --git a/syscall.c b/syscall.c
</span>  }
  
  int do_mknod(const char *pathname, mode_t mode, dev_t dev)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -189,7 +227,7 @@ int do_mknod(const char *pathname, mode_t mode, dev_t dev)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -193,7 +231,7 @@ int do_mknod(const char *pathname, mode_t mode, dev_t dev)
</span>                   return -1;
                close(sock);
  #ifdef HAVE_CHMOD
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -828,7 +836,7 @@ diff --git a/syscall.c b/syscall.c
</span>  #else
                return 0;
  #endif
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -206,7 +244,22 @@ int do_rmdir(const char *pathname)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -210,7 +248,22 @@ int do_rmdir(const char *pathname)
</span>  {
        if (dry_run) return 0;
        RETURN_ERROR_IF_RO_OR_LO;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -852,19 +860,19 @@ diff --git a/syscall.c b/syscall.c
</span>  }
  
  int do_open(const char *pathname, int flags, mode_t mode)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -225,7 +278,7 @@ int do_open(const char *pathname, int flags, mode_t mode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -229,7 +282,7 @@ int do_open(const char *pathname, int flags, mode_t mode)
</span>  }
  
  #ifdef HAVE_CHMOD
 -int do_chmod(const char *path, mode_t mode)
 +int do_chmod(const char *path, mode_t mode, UNUSED(uint32 fileflags))
  {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        static int switch_step = 0;
</span>   int code;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (dry_run) return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -248,17 +301,72 @@ int do_chmod(const char *path, mode_t mode)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   } else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           code = chmod(path, mode & CHMOD_BITS); /* DISCOURAGED FUNCTION */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif /* !HAVE_LCHMOD */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -268,17 +321,72 @@ int do_chmod(const char *path, mode_t mode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   code = chmod(path, mode & CHMOD_BITS); /* DISCOURAGED FUNCTION */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span> +#ifdef SUPPORT_FORCE_CHANGE
 +      if (code < 0 && force_change && errno == EPERM && !S_ISLNK(mode)) {
 +              if (fileflags == NO_FFLAGS) {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -938,16 +946,16 @@ diff --git a/syscall.c b/syscall.c
</span> diff --git a/t_stub.c b/t_stub.c
 --- a/t_stub.c
 +++ b/t_stub.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -28,6 +28,8 @@ int protect_args = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -29,6 +29,8 @@ int protect_args = 0;
</span>  int module_id = -1;
  int relative_paths = 0;
  int module_dirlen = 0;
 +int force_change = 0;
 +int preserve_acls = 0;
<span style='display:block; white-space:pre;background:#ffe0e0;'>- int preserve_times = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int preserve_mtimes = 0;
</span>  int preserve_xattrs = 0;
  int preserve_perms = 0;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -110,3 +112,23 @@ filter_rule_list daemon_filter_list;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -112,3 +114,23 @@ filter_rule_list daemon_filter_list;
</span>  {
        return cst ? 0 : 0;
  }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -974,8 +982,8 @@ diff --git a/t_stub.c b/t_stub.c
</span> diff --git a/testsuite/rsync.fns b/testsuite/rsync.fns
 --- a/testsuite/rsync.fns
 +++ b/testsuite/rsync.fns
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -23,9 +23,9 @@ todir="$tmpdir/to"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- chkdir="$tmpdir/chk"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -26,9 +26,9 @@ chkfile="$scratchdir/rsync.chk"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ outfile="$scratchdir/rsync.out"
</span>  
  # For itemized output:
 -all_plus='+++++++++'
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -990,7 +998,7 @@ diff --git a/testsuite/rsync.fns b/testsuite/rsync.fns
</span> diff --git a/usage.c b/usage.c
 --- a/usage.c
 +++ b/usage.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -131,6 +131,11 @@ static void print_info_flags(enum logcode f)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -137,6 +137,11 @@ static void print_info_flags(enum logcode f)
</span>  #endif
                        "crtimes",
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1001,19 +1009,19 @@ diff --git a/usage.c b/usage.c
</span> +
        "*Optimizations",
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifndef HAVE_SIMD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/util.c b/util.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/util.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/util.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -33,6 +33,7 @@ extern int relative_paths;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- extern int preserve_times;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef USE_ROLL_SIMD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/util1.c b/util1.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/util1.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/util1.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -35,6 +35,7 @@ extern int preserve_mtimes;
</span>  extern int preserve_xattrs;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern int omit_link_times;
</span>  extern int preallocate_files;
 +extern int force_change;
  extern char *module_dir;
  extern unsigned int module_dirlen;
  extern char *partial_dir;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -115,6 +116,33 @@ void print_child_argv(const char *prefix, char **cmd)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -117,6 +118,33 @@ void print_child_argv(const char *prefix, char **cmd)
</span>   rprintf(FCLIENT, " (%d args)\n", cnt);
  }
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1047,7 +1055,7 @@ diff --git a/util.c b/util.c
</span>  /* This returns 0 for success, 1 for a symlink if symlink time-setting
   * is not possible, or -1 for any other error. */
  int set_times(const char *fname, STRUCT_STAT *stp)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -142,6 +170,10 @@ int set_times(const char *fname, STRUCT_STAT *stp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -144,6 +172,10 @@ int set_times(const char *fname, STRUCT_STAT *stp)
</span>  #include "case_N.h"
                if (do_utimensat(fname, stp) == 0)
                        break;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1058,7 +1066,7 @@ diff --git a/util.c b/util.c
</span>           if (errno != ENOSYS)
                        return -1;
                switch_step++;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -151,6 +183,10 @@ int set_times(const char *fname, STRUCT_STAT *stp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -153,6 +185,10 @@ int set_times(const char *fname, STRUCT_STAT *stp)
</span>  #include "case_N.h"
                if (do_lutimes(fname, stp) == 0)
                        break;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1069,7 +1077,7 @@ diff --git a/util.c b/util.c
</span>           if (errno != ENOSYS)
                        return -1;
                switch_step++;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -172,6 +208,10 @@ int set_times(const char *fname, STRUCT_STAT *stp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -174,6 +210,10 @@ int set_times(const char *fname, STRUCT_STAT *stp)
</span>           if (do_utime(fname, stp) == 0)
                        break;
  #endif
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1083,7 +1091,25 @@ diff --git a/util.c b/util.c
</span> diff --git a/xattrs.c b/xattrs.c
 --- a/xattrs.c
 +++ b/xattrs.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1202,7 +1202,7 @@ int set_stat_xattr(const char *fname, struct file_struct *file, mode_t new_mode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1091,7 +1091,7 @@ int set_xattr(const char *fname, const struct file_struct *file, const char *fna
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    && !S_ISLNK(sxp->st.st_mode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    && access(fname, W_OK) < 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   && do_chmod(fname, (sxp->st.st_mode & CHMOD_BITS) | S_IWUSR) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   && do_chmod(fname, (sxp->st.st_mode & CHMOD_BITS) | S_IWUSR, ST_FLAGS(sxp->st)) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           added_write_perm = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   ndx = F_XATTR(file);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1099,7 +1099,7 @@ int set_xattr(const char *fname, const struct file_struct *file, const char *fna
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   lst = &glst->xa_items;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int return_value = rsync_xal_set(fname, lst, fnamecmp, sxp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (added_write_perm) /* remove the temporary write permission */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          do_chmod(fname, sxp->st.st_mode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          do_chmod(fname, sxp->st.st_mode, ST_FLAGS(sxp->st));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return return_value;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1216,7 +1216,7 @@ int set_stat_xattr(const char *fname, struct file_struct *file, mode_t new_mode)
</span>   mode = (fst.st_mode & _S_IFMT) | (fmode & ACCESSPERMS)
             | (S_ISDIR(fst.st_mode) ? 0700 : 0600);
        if (fst.st_mode != mode)
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1095,7 +1121,7 @@ diff --git a/xattrs.c b/xattrs.c
</span> diff -Nurp a/rsync.1 b/rsync.1
 --- a/rsync.1
 +++ b/rsync.1
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -437,6 +437,7 @@ detailed description below for a complet
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -443,6 +443,7 @@ has its own detailed description later i
</span>  --keep-dirlinks, -K      treat symlinked dir on receiver as dir
  --hard-links, -H         preserve hard links
  --perms, -p              preserve permissions
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1103,7 +1129,7 @@ diff -Nurp a/rsync.1 b/rsync.1
</span>  --executability, -E      preserve executability
  --chmod=CHMOD            affect file and/or directory permissions
  --acls, -A               preserve ACLs (implies --perms)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -477,7 +478,10 @@ detailed description below for a complet
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -484,7 +485,10 @@ has its own detailed description later i
</span>  --ignore-missing-args    ignore missing source args without error
  --delete-missing-args    delete missing source args from destination
  --ignore-errors          delete even if there are I/O errors
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1115,81 +1141,83 @@ diff -Nurp a/rsync.1 b/rsync.1
</span>  --max-delete=NUM         don't delete more than NUM files
  --max-size=SIZE          don't transfer any file larger than SIZE
  --min-size=SIZE          don't transfer any file smaller than SIZE
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -783,6 +787,8 @@ omission).  The only exception to the ab
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -806,6 +810,7 @@ This is equivalent to \fB\-rlptgoD\fP.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ recursion and want to preserve almost everything.  Be aware that it does
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \fBnot\fP include preserving ACLs (\fB\-A\fP), xattrs (\fB\-X\fP), atimes (\fB\-U\fP),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ crtimes (\fB\-N\fP), nor the finding and preserving of hardlinks (\fB\-H\fP).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++It also does \fBnot\fP imply \fB\-\-fileflags\fP.
</span>  .IP
<span style='display:block; white-space:pre;background:#ffe0e0;'>- Note that \fB\-a\fP \fBdoes not preserve hardlinks\fP, because finding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- multiply-linked files is expensive.  You must separately specify \fB\-H\fP.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+Note also that for backward compatibility, \fB\-a\fP currently does \fBnot\fP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+imply the \fB\-\-fileflags\fP option.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .IP "\fB\-\-no-OPTION\fP"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- You may turn off one or more implied options by prefixing the option name
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- with "no-".  Not all options may be prefixed with a "no-": only options that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1139,7 +1145,7 @@ to non-directories to be affected, as th
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ The only exception to the above equivalence is when \fB\-\-files-from\fP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ is specified, in which case \fB\-r\fP is not implied.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1270,7 +1275,7 @@ to non-directories to be affected, as th
</span>  Without this option, if the sending side has replaced a directory with a
  symlink to a directory, the receiving side will delete anything that is in
  the way of the new symlink, including a directory hierarchy (as long as
 -\fB\-\-force\fP or \fB\-\-delete\fP is in effect).
 +\fB\-\-force-delete\fP or \fB\-\-delete\fP is in effect).
  .IP
<span style='display:block; white-space:pre;background:#ffe0e0;'>- See also \fB\-\-keep-dirlinks\fP for an analogous option for the receiving side.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .IP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1348,6 +1354,25 @@ receiver-only rule that excludes all nam
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ See also \fB\-\-keep-dirlinks\fP for an analogous option for the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ receiving side.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1488,6 +1493,29 @@ receiver-only rule that excludes all nam
</span>  Note that the \fB\-X\fP option does not copy rsync's special xattr values (e.g.
  those used by \fB\-\-fake-super\fP) unless you repeat the option (e.g. \fB\-XX\fP).
  This "copy all xattrs" mode cannot be used with \fB\-\-fake-super\fP.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+.IP "\fB\-\-fileflags\fP This option causes rsync to update the file-flags to be the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+same as the source files and directories (if your OS supports the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\fBchflags\fP(2) system call).   Some flags can only be altered by the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+super-user and some might only be unset below a certain secure-level
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+(usually single-user mode). It will not make files alterable that are set
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+to immutable on the receiver.  To do that, see \fB\-\-force-change\fP,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\fB\-\-force-uchange\fP, and \fB\-\-force-schange\fP."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+.IP "\fB\-\-force-change\fP This option causes rsync to disable both user-immutable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+and system-immutable flags on files and directories that are being updated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+or deleted on the receiving side.  This option overrides \fB\-\-force-uchange\fP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+and \fB\-\-force-schange\fP."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+.IP "\fB\-\-force-uchange\fP This option causes rsync to disable user-immutable flags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+on files and directories that are being updated or deleted on the receiving
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+side.  It does not try to affect system flags.  This option overrides
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\fB\-\-force-change\fP and \fB\-\-force-schange\fP."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+.IP "\fB\-\-force-schange\fP This option causes rsync to disable system-immutable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+flags on files and directories that are being updated or deleted on the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+receiving side.  It does not try to affect user flags.  This option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+overrides \fB\-\-force-change\fP and \fB\-\-force-uchange\fP."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++.IP "\fB\-\-fileflags\fP"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++This option causes rsync to update the file-flags to be the same as the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++source files and directories (if your OS supports the \fBchflags\fP(2) system
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++call).   Some flags can only be altered by the super-user and some might
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++only be unset below a certain secure-level (usually single-user mode). It
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++will not make files alterable that are set to immutable on the receiver.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++To do that, see \fB\-\-force-change\fP, \fB\-\-force-uchange\fP, and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++\fB\-\-force-schange\fP.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++.IP "\fB\-\-force-change\fP"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++This option causes rsync to disable both user-immutable and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++system-immutable flags on files and directories that are being updated or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++deleted on the receiving side.  This option overrides
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++\fB\-\-force-uchange\fP and \fB\-\-force-schange\fP.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++.IP "\fB\-\-force-uchange\fP"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++This option causes rsync to disable user-immutable flags on files and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++directories that are being updated or deleted on the receiving side.  It
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++does not try to affect system flags.  This option overrides
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++\fB\-\-force-change\fP and \fB\-\-force-schange\fP.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++.IP "\fB\-\-force-schange\fP"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++This option causes rsync to disable system-immutable flags on files and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++directories that are being updated or deleted on the receiving side.  It
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++does not try to affect user flags.  This option overrides
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++\fB\-\-force-change\fP and \fB\-\-force-uchange\fP.
</span>  .IP "\fB\-\-chmod=CHMOD\fP"
  This option tells rsync to apply one or more comma-separated "chmod" modes
  to the permission of the files in the transfer.  The resulting value is
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1773,7 +1798,7 @@ This option takes the behavior of (the i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- option a step farther: each missing arg will become a deletion request of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- the corresponding destination file on the receiving side (should it exist).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- If the destination file is a non-empty directory, it will only be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--successfully deleted if \fB\-\-force\fP or \fB\-\-delete\fP are in effect.  Other than
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+successfully deleted if \fB\-\-force-delete\fP or \fB\-\-delete\fP are in effect.  Other than
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- that, this option is independent of any other type of delete processing.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1945,8 +1973,8 @@ This option takes the behavior of the (i
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \fB\-\-ignore-missing-args\fP option a step farther: each missing arg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ will become a deletion request of the corresponding destination file on the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ receiving side (should it exist).  If the destination file is a non-empty
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-directory, it will only be successfully deleted if \fB\-\-force\fP or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-\fB\-\-delete\fP are in effect.  Other than that, this option is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++directory, it will only be successfully deleted if \fB\-\-force-delete\fP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++or \fB\-\-delete\fP are in effect.  Other than that, this option is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ independent of any other type of delete processing.
</span>  .IP
  The missing source files are represented by special file-list entries which
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1781,14 +1806,15 @@ display as a "\fB*missing\fP" entry in t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1954,13 +1982,13 @@ display as a "\fB*missing\fP" entry in t
</span>  .IP "\fB\-\-ignore-errors\fP"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- Tells \fB\-\-delete\fP to go ahead and delete files even when there are I/O
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- errors.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Tells \fB\-\-delete\fP to go ahead and delete files even when there are
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ I/O errors.
</span> -.IP "\fB\-\-force\fP"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+.IP "\fB\-\-force-delete\fP"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++.IP "\fB\-\-force-delete\fP, \fB\-\-force\fP"
</span>  This option tells rsync to delete a non-empty directory when it is to be
  replaced by a non-directory.  This is only relevant if deletions are not
  active (see \fB\-\-delete\fP for details).
  .IP
 -Note for older rsync versions: \fB\-\-force\fP used to still be required when
 -using \fB\-\-delete-after\fP, and it used to be non-functional unless the
<span style='display:block; white-space:pre;background:#ffe0e0;'>--\fB\-\-recursive\fP option was also enabled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+This option can be abbreviated \fB\-\-force\fP for backward compatibility.  Note
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+that some older rsync versions used to still require \fB\-\-force\fP when using
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\fB\-\-delete-after\fP, and it used to be non-functional unless the \fB\-\-recursive\fP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+option was also enabled.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Note that some older rsync versions used to require \fB\-\-force\fP when using
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++\fB\-\-delete-after\fP, and it used to be non-functional unless the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \fB\-\-recursive\fP option was also enabled.
</span>  .IP "\fB\-\-max-delete=NUM\fP"
  This tells rsync not to delete more than NUM files or directories.  If that
<span style='display:block; white-space:pre;background:#ffe0e0;'>- limit is exceeded, all further deletions are skipped through the end of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2735,7 +2761,7 @@ also be output, but only if the receivin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- output of other verbose messages).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2950,7 +2978,7 @@ version 2.6.7 (you can use \fB\-vv\fP wi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ also turns on the output of other verbose messages).
</span>  .IP
  The "%i" escape has a cryptic output that is 11 letters long.  The general
 -format is like the string \fBYXcstpoguax\fP, where \fBY\fP is replaced by the type
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1200,7 +1228,7 @@ diff -Nurp a/rsync.1 b/rsync.1
</span> diff -Nurp a/rsync.1.html b/rsync.1.html
 --- a/rsync.1.html
 +++ b/rsync.1.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -352,6 +352,7 @@ detailed description below for a complet
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -361,6 +361,7 @@ has its own detailed description later i
</span>  --keep-dirlinks, -K      treat symlinked dir on receiver as dir
  --hard-links, -H         preserve hard links
  --perms, -p              preserve permissions
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1208,7 +1236,7 @@ diff -Nurp a/rsync.1.html b/rsync.1.html
</span>  --executability, -E      preserve executability
  --chmod=CHMOD            affect file and/or directory permissions
  --acls, -A               preserve ACLs (implies --perms)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -392,7 +393,10 @@ detailed description below for a complet
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -402,7 +403,10 @@ has its own detailed description later i
</span>  --ignore-missing-args    ignore missing source args without error
  --delete-missing-args    delete missing source args from destination
  --ignore-errors          delete even if there are I/O errors
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1220,91 +1248,93 @@ diff -Nurp a/rsync.1.html b/rsync.1.html
</span>  --max-delete=NUM         don't delete more than NUM files
  --max-size=SIZE          don't transfer any file larger than SIZE
  --min-size=SIZE          don't transfer any file smaller than SIZE
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -697,7 +701,9 @@ recursion and want to preserve almost ev
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- omission).  The only exception to the above equivalence is when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <code>--files-from</code> is specified, in which case <code>-r</code> is not implied.</p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <p>Note that <code>-a</code> <strong>does not preserve hardlinks</strong>, because finding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--multiply-linked files is expensive.  You must separately specify <code>-H</code>.</p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+multiply-linked files is expensive.  You must separately specify <code>-H</code>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+Note also that for backward compatibility, <code>-a</code> currently does <strong>not</strong>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+imply the <code>--fileflags</code> option.</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -722,7 +726,8 @@ section.</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ <p>This is equivalent to <code>-rlptgoD</code>.  It is a quick way of saying you want
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ recursion and want to preserve almost everything.  Be aware that it does
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ <strong>not</strong> include preserving ACLs (<code>-A</code>), xattrs (<code>-X</code>), atimes (<code>-U</code>),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-crtimes (<code>-N</code>), nor the finding and preserving of hardlinks (<code>-H</code>).</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++crtimes (<code>-N</code>), nor the finding and preserving of hardlinks (<code>-H</code>).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++It also does <strong>not</strong> imply <a href="#opt--fileflags"><code>--fileflags</code></a>.</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ <p>The only exception to the above equivalence is when <a href="#opt--files-from"><code>--files-from</code></a>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ is specified, in which case <a href="#opt-r"><code>-r</code></a> is not implied.</p>
</span>  </dd>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <dt><code>--no-OPTION</code></dt><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1039,7 +1045,7 @@ to non-directories to be affected, as th
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1149,7 +1154,7 @@ to non-directories to be affected, as th
</span>  <p>Without this option, if the sending side has replaced a directory with a
  symlink to a directory, the receiving side will delete anything that is in
  the way of the new symlink, including a directory hierarchy (as long as
<span style='display:block; white-space:pre;background:#ffe0e0;'>--<code>--force</code> or <code>--delete</code> is in effect).</p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+<code>--force-delete</code> or <code>--delete</code> is in effect).</p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <p>See also <code>--keep-dirlinks</code> for an analogous option for the receiving side.</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-<a href="#opt--force"><code>--force</code></a> or <a href="#opt--delete"><code>--delete</code></a> is in effect).</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<a href="#opt--force-delete"><code>--force-delete</code></a> or <a href="#opt--delete"><code>--delete</code></a> is in effect).</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ <p>See also <a href="#opt--keep-dirlinks"><code>--keep-dirlinks</code></a> for an analogous option for the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ receiving side.</p>
</span>  <p><code>--copy-dirlinks</code> applies to all symlinks to directories in the source.  If
<span style='display:block; white-space:pre;background:#ffe0e0;'>- you want to follow only a few specified symlinks, a trick you can use is to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1219,6 +1225,33 @@ those used by <code>--fake-super</code>)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- This &quot;copy all xattrs&quot; mode cannot be used with <code>--fake-super</code>.</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1336,6 +1341,37 @@ those used by <a href="#opt--fake-super"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ This &quot;copy all xattrs&quot; mode cannot be used with <a href="#opt--fake-super"><code>--fake-super</code></a>.</p>
</span>  </dd>
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+<dt><code>--fileflags</code> This option causes rsync to update the file-flags to be the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+same as the source files and directories (if your OS supports the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+<strong>chflags</strong>(2) system call).   Some flags can only be altered by the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+super-user and some might only be unset below a certain secure-level
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+(usually single-user mode). It will not make files alterable that are set
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+to immutable on the receiver.  To do that, see <code>--force-change</code>,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+<code>--force-uchange</code>, and <code>--force-schange</code>.</dt><dd>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<dt id="opt--fileflags"><code>--fileflags</code><a href="#opt--fileflags" class="tgt"></a></dt><dd>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<p>This option causes rsync to update the file-flags to be the same as the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++source files and directories (if your OS supports the <strong>chflags</strong>(2) system
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++call).   Some flags can only be altered by the super-user and some might
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++only be unset below a certain secure-level (usually single-user mode). It
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++will not make files alterable that are set to immutable on the receiver.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++To do that, see <a href="#opt--force-change"><code>--force-change</code></a>, <a href="#opt--force-uchange"><code>--force-uchange</code></a>, and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<a href="#opt--force-schange"><code>--force-schange</code></a>.</p>
</span> +</dd>
 +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+<dt><code>--force-change</code> This option causes rsync to disable both user-immutable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+and system-immutable flags on files and directories that are being updated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+or deleted on the receiving side.  This option overrides <code>--force-uchange</code>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+and <code>--force-schange</code>.</dt><dd>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<dt id="opt--force-change"><code>--force-change</code><a href="#opt--force-change" class="tgt"></a></dt><dd>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<p>This option causes rsync to disable both user-immutable and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++system-immutable flags on files and directories that are being updated or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++deleted on the receiving side.  This option overrides
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<a href="#opt--force-uchange"><code>--force-uchange</code></a> and <a href="#opt--force-schange"><code>--force-schange</code></a>.</p>
</span> +</dd>
 +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+<dt><code>--force-uchange</code> This option causes rsync to disable user-immutable flags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+on files and directories that are being updated or deleted on the receiving
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+side.  It does not try to affect system flags.  This option overrides
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+<code>--force-change</code> and <code>--force-schange</code>.</dt><dd>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<dt id="opt--force-uchange"><code>--force-uchange</code><a href="#opt--force-uchange" class="tgt"></a></dt><dd>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<p>This option causes rsync to disable user-immutable flags on files and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++directories that are being updated or deleted on the receiving side.  It
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++does not try to affect system flags.  This option overrides
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<a href="#opt--force-change"><code>--force-change</code></a> and <a href="#opt--force-schange"><code>--force-schange</code></a>.</p>
</span> +</dd>
 +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+<dt><code>--force-schange</code> This option causes rsync to disable system-immutable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+flags on files and directories that are being updated or deleted on the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+receiving side.  It does not try to affect user flags.  This option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+overrides <code>--force-change</code> and <code>--force-uchange</code>.</dt><dd>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<dt id="opt--force-schange"><code>--force-schange</code><a href="#opt--force-schange" class="tgt"></a></dt><dd>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<p>This option causes rsync to disable system-immutable flags on files and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++directories that are being updated or deleted on the receiving side.  It
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++does not try to affect user flags.  This option overrides
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<a href="#opt--force-change"><code>--force-change</code></a> and <a href="#opt--force-uchange"><code>--force-uchange</code></a>.</p>
</span> +</dd>
 +
<span style='display:block; white-space:pre;background:#ffe0e0;'>- <dt><code>--chmod=CHMOD</code></dt><dd>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ <dt id="opt--chmod"><code>--chmod=CHMOD</code><a href="#opt--chmod" class="tgt"></a></dt><dd>
</span>  <p>This option tells rsync to apply one or more comma-separated &quot;chmod&quot; modes
  to the permission of the files in the transfer.  The resulting value is
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1652,7 +1685,7 @@ is no longer there.</p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- option a step farther: each missing arg will become a deletion request of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- the corresponding destination file on the receiving side (should it exist).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- If the destination file is a non-empty directory, it will only be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--successfully deleted if <code>--force</code> or <code>--delete</code> are in effect.  Other than
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+successfully deleted if <code>--force-delete</code> or <code>--delete</code> are in effect.  Other than
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- that, this option is independent of any other type of delete processing.</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1799,8 +1835,8 @@ is no longer there.</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ <a href="#opt--ignore-missing-args"><code>--ignore-missing-args</code></a> option a step farther: each missing arg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ will become a deletion request of the corresponding destination file on the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ receiving side (should it exist).  If the destination file is a non-empty
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-directory, it will only be successfully deleted if <a href="#opt--force"><code>--force</code></a> or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-<a href="#opt--delete"><code>--delete</code></a> are in effect.  Other than that, this option is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++directory, it will only be successfully deleted if <a href="#opt--force-delete"><code>--force-delete</code></a>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++or <a href="#opt--delete"><code>--delete</code></a> are in effect.  Other than that, this option is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ independent of any other type of delete processing.</p>
</span>  <p>The missing source files are represented by special file-list entries which
<span style='display:block; white-space:pre;background:#ffe0e0;'>- display as a &quot;<code>*missing</code>&quot; entry in the <code>--list-only</code> output.</p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1663,13 +1696,14 @@ display as a &quot;<code>*missing</code>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- errors.</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ display as a &quot;<code>*missing</code>&quot; entry in the <a href="#opt--list-only"><code>--list-only</code></a> output.</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1811,12 +1847,12 @@ display as a &quot;<code>*missing</code>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ I/O errors.</p>
</span>  </dd>
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>--<dt><code>--force</code></dt><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+<dt><code>--force-delete</code></dt><dd>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-<dt id="opt--force"><code>--force</code><a href="#opt--force" class="tgt"></a></dt><dd>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<span id="opt--force"></span><dt id="opt--force-delete"><code>--force-delete</code>, <code>--force</code><a href="#opt--force-delete" class="tgt"></a></dt><dd>
</span>  <p>This option tells rsync to delete a non-empty directory when it is to be
  replaced by a non-directory.  This is only relevant if deletions are not
<span style='display:block; white-space:pre;background:#ffe0e0;'>- active (see <code>--delete</code> for details).</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ active (see <a href="#opt--delete"><code>--delete</code></a> for details).</p>
</span> -<p>Note for older rsync versions: <code>--force</code> used to still be required when
<span style='display:block; white-space:pre;background:#ffe0e0;'>--using <code>--delete-after</code>, and it used to be non-functional unless the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--<code>--recursive</code> option was also enabled.</p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+<p>This option can be abbreviated <code>--force</code> for backward compatibility.  Note
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+that some older rsync versions used to still require <code>--force</code> when using
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+<code>--delete-after</code>, and it used to be non-functional unless the <code>--recursive</code>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+option was also enabled.</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-using <a href="#opt--delete-after"><code>--delete-after</code></a>, and it used to be non-functional unless the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<p>Note that some older rsync versions used to require <code>--force</code> when using
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<a href="#opt--delete-after"><code>--delete-after</code></a>, and it used to be non-functional unless the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ <a href="#opt--recursive"><code>--recursive</code></a> option was also enabled.</p>
</span>  </dd>
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>- <dt><code>--max-delete=NUM</code></dt><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2552,7 +2586,7 @@ also be output, but only if the receivin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (you can use <code>-vv</code> with older versions of rsync, but that also turns on the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- output of other verbose messages).</p>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2732,7 +2768,7 @@ files will also be output, but only if t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ version 2.6.7 (you can use <code>-vv</code> with older versions of rsync, but that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ also turns on the output of other verbose messages).</p>
</span>  <p>The &quot;%i&quot; escape has a cryptic output that is 11 letters long.  The general
 -format is like the string <code>YXcstpoguax</code>, where <strong>Y</strong> is replaced by the type
 +format is like the string <code>YXcstpoguaxf</code>, where <strong>Y</strong> is replaced by the type
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/net/rsync/files/implicit.patch b/net/rsync/files/implicit.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index a77b3d8ef13..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/net/rsync/files/implicit.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,65 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- rsync-3.2.3/configure.sh.orig  2020-08-07 13:48:27.000000000 +1000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ rsync-3.2.3/configure.sh       2022-03-06 12:20:51.000000000 +1100
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4916,6 +4916,25 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define NOBODY_GROUP "$NOBODY_GROUP"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- _ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+for ac_header in sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    unistd.h utime.h grp.h compat.h sys/param.h ctype.h sys/wait.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    sys/ioctl.h sys/filio.h string.h stdlib.h sys/socket.h sys/mode.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    sys/un.h sys/attr.h mcheck.h arpa/inet.h arpa/nameser.h locale.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    netdb.h malloc.h float.h limits.h iconv.h libcharset.h langinfo.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    sys/acl.h acl/libacl.h attr/xattr.h sys/xattr.h sys/extattr.h dl.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    popt.h popt/popt.h linux/falloc.h netinet/in_systm.h netinet/ip.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    zlib.h xxhash.h openssl/md4.h openssl/md5.h zstd.h lz4.h sys/file.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+do :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # SIMD optimizations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SIMD=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -5110,6 +5129,9 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define _FILE_OFFSET_BITS 64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <stdio.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <fcntl.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if HAVE_STRING_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <string.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <sys/wait.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #if HAVE_UNISTD_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -6245,26 +6267,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--for ac_header in sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    unistd.h utime.h grp.h compat.h sys/param.h ctype.h sys/wait.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    sys/ioctl.h sys/filio.h string.h stdlib.h sys/socket.h sys/mode.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    sys/un.h sys/attr.h mcheck.h arpa/inet.h arpa/nameser.h locale.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    netdb.h malloc.h float.h limits.h iconv.h libcharset.h langinfo.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    sys/acl.h acl/libacl.h attr/xattr.h sys/xattr.h sys/extattr.h dl.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    popt.h popt/popt.h linux/falloc.h netinet/in_systm.h netinet/ip.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    zlib.h xxhash.h openssl/md4.h openssl/md5.h zstd.h lz4.h sys/file.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--do :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/types.h defines makedev" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $as_echo_n "checking whether sys/types.h defines makedev... " >&6; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ${ac_cv_header_sys_types_h_makedev+:} false; then :
</span></pre><pre style='margin:0'>

</pre>