<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 "copy all xattrs" 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 "copy all xattrs" 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 "chmod" 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 "<code>*missing</code>" 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 "<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 "<code>*missing</code>" 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 "<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 "%i" 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>