./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
{"no-backup", 0, POPT_ARG_VAL, &make_backups, 0, 0, 0 },
{"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 },
{"suffix", 0, POPT_ARG_STRING, &backup_suffix, 0, 0, 0 },
-@@ -2748,6 +2749,10 @@ void server_options(char **args, int *argc_p)
+@@ -2756,6 +2757,10 @@ void server_options(char **args, int *argc_p)
args[ac++] = safe_arg("--compress-choice", compress_choice);
if (am_sender) {
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -342,6 +342,7 @@ has its own detailed description later in this man page.
+@@ -348,6 +348,7 @@ has its own detailed description later in this man page.
--relative, -R use relative path names
--no-implied-dirs don't send implied dirs with --relative
--backup, -b make backups (see --suffix & --backup-dir)
--backup-dir=DIR make backups into hierarchy based in DIR
--suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
--update, -u skip files that are newer on the receiver
-@@ -903,6 +904,13 @@ your home directory (remove the '=' for that).
- enough priority to be effective (e.g., if your rules specify a trailing
- inclusion/exclusion of `*`, the auto-added rule would never be reached).
+@@ -913,6 +914,13 @@ your home directory (remove the '=' for that).
+ rules specify a trailing inclusion/exclusion of `*`, the auto-added rule
+ would never be reached).
+0. `--backup-deleted`
+
{"list-only", 0, POPT_ARG_VAL, &list_only, 2, 0, 0 },
{"read-batch", 0, POPT_ARG_STRING, &batch_name, OPT_READ_BATCH, 0, 0 },
{"write-batch", 0, POPT_ARG_STRING, &batch_name, OPT_WRITE_BATCH, 0, 0 },
-@@ -2216,6 +2224,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2224,6 +2232,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
tmpdir = sanitize_path(NULL, tmpdir, NULL, 0, SP_DEFAULT);
if (backup_dir)
backup_dir = sanitize_path(NULL, backup_dir, NULL, 0, SP_DEFAULT);
}
if (daemon_filter_list.head && !am_sender) {
filter_rule_list *elp = &daemon_filter_list;
-@@ -2237,6 +2247,14 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2245,6 +2255,14 @@ int parse_arguments(int *argc_p, const char ***argv_p)
if (check_filter(elp, FLOG, dir, 1) < 0)
goto options_rejected;
}
}
if (!backup_suffix)
-@@ -2248,6 +2266,20 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2256,6 +2274,20 @@ int parse_arguments(int *argc_p, const char ***argv_p)
backup_suffix);
return 0;
}
if (backup_dir) {
size_t len;
make_backups = 1; /* --backup-dir implies --backup */
-@@ -2284,6 +2316,34 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2292,6 +2324,34 @@ int parse_arguments(int *argc_p, const char ***argv_p)
"P *%s", backup_suffix);
parse_filter_str(&filter_list, backup_dir_buf, rule_template(0), 0);
}
if (make_backups && !backup_dir)
omit_dir_times = -1; /* Implied, so avoid -O to sender. */
-@@ -2733,11 +2793,20 @@ void server_options(char **args, int *argc_p)
+@@ -2741,11 +2801,20 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--backup-dir";
args[ac++] = safe_arg("", backup_dir);
}
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -344,7 +344,9 @@ has its own detailed description later in this man page.
+@@ -350,7 +350,9 @@ has its own detailed description later in this man page.
--backup, -b make backups (see --suffix & --backup-dir)
--backup-deleted make backups only of deleted files
--backup-dir=DIR make backups into hierarchy based in DIR
--update, -u skip files that are newer on the receiver
--inplace update destination files in-place
--append append data onto shorter files
-@@ -925,6 +927,11 @@ your home directory (remove the '=' for that).
+@@ -935,6 +937,11 @@ your home directory (remove the '=' for that).
daemon is the receiver, the backup dir cannot go outside the module's path
hierarchy, so take extra care not to delete it or copy into it.
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/errcode.h b/errcode.h
--- a/errcode.h
+++ b/errcode.h
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
-@@ -215,8 +215,11 @@ static void wait_process_with_flush(pid_t pid, int *exit_code_ptr)
+@@ -216,8 +216,11 @@ static void wait_process_with_flush(pid_t pid, int *exit_code_ptr)
*exit_code_ptr = RERR_TERMINATED;
else
*exit_code_ptr = RERR_WAITCHILD;
}
void write_del_stats(int f)
-@@ -1626,6 +1629,14 @@ void remember_children(UNUSED(int val))
+@@ -1631,6 +1634,14 @@ void remember_children(UNUSED(int val))
break;
}
}
}
#endif
#ifndef HAVE_SIGACTION
-@@ -1679,6 +1690,13 @@ static void rsync_panic_handler(UNUSED(int whatsig))
+@@ -1684,6 +1695,13 @@ static void rsync_panic_handler(UNUSED(int whatsig))
}
#endif
static void unset_env_var(const char *var)
{
#ifdef HAVE_UNSETENV
-@@ -1695,7 +1713,6 @@ static void unset_env_var(const char *var)
+@@ -1700,7 +1718,6 @@ static void unset_env_var(const char *var)
#endif
}
int main(int argc,char *argv[])
{
int ret;
-@@ -1719,6 +1736,11 @@ int main(int argc,char *argv[])
+@@ -1724,6 +1741,11 @@ int main(int argc,char *argv[])
SIGACTMASK(SIGFPE, rsync_panic_handler);
SIGACTMASK(SIGABRT, rsync_panic_handler);
SIGACTMASK(SIGBUS, rsync_panic_handler);
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
extern int io_timeout;
extern int no_detach;
extern int write_batch;
-@@ -1067,6 +1069,9 @@ static int rsync_module(int f_in, int f_out, int i, const char *addr, const char
+@@ -1093,6 +1095,9 @@ static int rsync_module(int f_in, int f_out, int i, const char *addr, const char
} else if (am_root < 0) /* Treat --fake-super from client as --super. */
am_root = 2;
case OPT_INFO:
arg = poptGetOptArg(pc);
parse_output_words(info_words, info_levels, arg, USER_PRIORITY);
-@@ -2081,6 +2100,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2089,6 +2108,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
#endif
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -336,6 +336,7 @@ has its own detailed description later in this man page.
+@@ -342,6 +342,7 @@ has its own detailed description later in this man page.
--quiet, -q suppress non-error messages
--no-motd suppress daemon-mode MOTD
--checksum, -c skip based on checksum, not mod-time & size
--archive, -a archive mode is -rlptgoD (no -A,-X,-U,-N,-H)
--no-OPTION turn off an implied OPTION (e.g. --no-D)
--recursive, -r recurse into directories
-@@ -715,6 +716,8 @@ your home directory (remove the '=' for that).
+@@ -721,6 +722,8 @@ your home directory (remove the '=' for that).
file that has the same size as the corresponding sender's file: files with
either a changed size or a changed checksum are selected for transfer.
Note that rsync always verifies that each _transferred_ file was correctly
reconstructed on the receiving side by checking a whole-file checksum that
is generated as the file is transferred, but that automatic
-@@ -726,6 +729,38 @@ your home directory (remove the '=' for that).
+@@ -732,6 +735,38 @@ your home directory (remove the '=' for that).
option or an environment variable that is discussed in that option's
section.
diff --git a/rsyncd.conf.5.md b/rsyncd.conf.5.md
--- a/rsyncd.conf.5.md
+++ b/rsyncd.conf.5.md
-@@ -422,6 +422,19 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
+@@ -421,6 +421,19 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
the max connections limit is not exceeded for the modules sharing the lock
file. The default is `/var/run/rsyncd.lock`.
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -740,9 +740,13 @@ your home directory (remove the '=' for that).
+@@ -746,9 +746,13 @@ your home directory (remove the '=' for that).
The MODE value is either "lax", for relaxed checking (which compares size
and mtime), "strict" (which also compares ctime and inode), or "none" to
diff --git a/rsyncd.conf.5.md b/rsyncd.conf.5.md
--- a/rsyncd.conf.5.md
+++ b/rsyncd.conf.5.md
-@@ -427,13 +427,15 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
+@@ -426,13 +426,15 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
This parameter tells rsync to make use of any cached checksum information
it finds in per-directory .rsyncsums files when the current transfer is
using the `--checksum` option. The value can be set to either "lax",
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
-@@ -51,7 +51,7 @@ popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
+@@ -52,7 +52,7 @@ popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
popt/popthelp.o popt/poptparse.o
OBJS=$(OBJS1) $(OBJS2) $(OBJS3) $(DAEMON_OBJ) $(LIBOBJ) @BUILD_ZLIB@ @BUILD_POPT@
# Programs we must have to run the test cases
CHECK_PROGS = rsync$(EXEEXT) tls$(EXEEXT) getgroups$(EXEEXT) getfsdev$(EXEEXT) \
-@@ -166,7 +166,7 @@ getgroups$(EXEEXT): getgroups.o
+@@ -167,7 +167,7 @@ getgroups$(EXEEXT): getgroups.o
getfsdev$(EXEEXT): getfsdev.o
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ getfsdev.o $(LIBS)
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -423,6 +423,7 @@ has its own detailed description later in this man page.
+@@ -429,6 +429,7 @@ has its own detailed description later in this man page.
--compare-dest=DIR also compare destination files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
--compress, -z compress file data during the transfer
--compress-choice=STR choose the compression algorithm (aka --zc)
--compress-level=NUM explicitly set compression level (aka --zl)
-@@ -2498,6 +2499,18 @@ your home directory (remove the '=' for that).
+@@ -2523,6 +2524,18 @@ your home directory (remove the '=' for that).
this bug by avoiding the `-o` option (or using `--no-o`) when sending to an
old rsync.
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/daemon-parm.txt b/daemon-parm.txt
--- a/daemon-parm.txt
+++ b/daemon-parm.txt
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -443,6 +443,8 @@ has its own detailed description later in this man page.
+@@ -449,6 +449,8 @@ has its own detailed description later in this man page.
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
parse_one_refuse_match(0, "write-devices", list_end);
}
-@@ -2909,6 +2913,9 @@ void server_options(char **args, int *argc_p)
+@@ -2917,6 +2921,9 @@ void server_options(char **args, int *argc_p)
else if (remove_source_files)
args[ac++] = "--remove-sent-files";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -367,6 +367,7 @@ has its own detailed description later in this man page.
+@@ -373,6 +373,7 @@ has its own detailed description later in this man page.
--owner, -o preserve owner (super-user only)
--group, -g preserve group
--devices preserve device files (super-user only)
diff --git a/rsyncd.conf.5.md b/rsyncd.conf.5.md
--- a/rsyncd.conf.5.md
+++ b/rsyncd.conf.5.md
-@@ -934,9 +934,10 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
+@@ -933,9 +933,10 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
If you are un-refusing the compress option, you may want to match
"`!compress*`" if you also want to allow the `--compress-level` option.
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
{"one-file-system", 'x', POPT_ARG_NONE, 0, 'x', 0, 0 },
{"no-one-file-system",0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 },
{"no-x", 0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 },
-@@ -2795,6 +2797,9 @@ void server_options(char **args, int *argc_p)
+@@ -2803,6 +2805,9 @@ void server_options(char **args, int *argc_p)
else if (missing_args == 1 && !am_sender)
args[ac++] = "--ignore-missing-args";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -417,6 +417,7 @@ has its own detailed description later in this man page.
+@@ -423,6 +423,7 @@ has its own detailed description later in this man page.
--contimeout=SECONDS set daemon connection timeout in seconds
--ignore-times, -I don't skip files that match size and time
--size-only skip files that match in size
--modify-window=NUM, -@ set the accuracy for mod-time comparisons
--temp-dir=DIR, -T create temporary files in directory DIR
--fuzzy, -y find similar file for basis if no dest file
-@@ -677,6 +678,14 @@ your home directory (remove the '=' for that).
+@@ -683,6 +684,14 @@ your home directory (remove the '=' for that).
after using another mirroring system which may not preserve timestamps
exactly.
./configure
make
-based-on: 00a5ab236479ab1a2d2b0916c04bc916cfd47d0e
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
GENFILES=configure.sh aclocal.m4 config.h.in rsync.1 rsync.1.html \
rsync-ssl.1 rsync-ssl.1.html rsyncd.conf.5 rsyncd.conf.5.html \
-- rrsync.1 rrsync.1.html
-+ rrsync.1 rrsync.1.html rsyncdb.1 rsyncdb.1.html
+- @GEN_RRSYNC@
++ rsyncdb.1 rsyncdb.1.html @GEN_RRSYNC@
HEADERS=byteorder.h config.h errcode.h proto.h rsync.h ifuncs.h itypes.h inums.h \
lib/pool_alloc.h lib/mdigest.h lib/md-defines.h
LIBOBJ=lib/wildmatch.o lib/compat.o lib/snprintf.o lib/mdfour.o lib/md5.o \
netdb.h malloc.h float.h limits.h iconv.h libcharset.h langinfo.h mcheck.h \
sys/acl.h acl/libacl.h attr/xattr.h sys/xattr.h sys/extattr.h dl.h \
popt.h popt/popt.h linux/falloc.h netinet/in_systm.h netgroup.h \
-@@ -1406,6 +1407,48 @@ if test x"$enable_acl_support" = x"no" || test x"$enable_xattr_support" = x"no"
+@@ -1408,6 +1409,48 @@ if test x"$enable_acl_support" = x"no" || test x"$enable_xattr_support" = x"no"
fi
fi
extern int inc_recurse;
extern int blocking_io;
extern int always_checksum;
-@@ -57,6 +58,7 @@ extern int copy_unsafe_links;
+@@ -58,6 +59,7 @@ extern int copy_unsafe_links;
extern int keep_dirlinks;
extern int preserve_hard_links;
extern int protocol_version;
extern int mkpath_dest_arg;
extern int file_total;
extern int recurse;
-@@ -94,6 +96,7 @@ extern char *logfile_format;
+@@ -95,6 +97,7 @@ extern char *logfile_format;
extern char *filesfrom_host;
extern char *partial_dir;
extern char *rsync_path;
extern char *shell_cmd;
extern char *password_file;
extern char *backup_dir;
-@@ -1236,6 +1239,9 @@ void start_server(int f_in, int f_out, int argc, char *argv[])
+@@ -1237,6 +1240,9 @@ void start_server(int f_in, int f_out, int argc, char *argv[])
if (am_daemon && io_timeout && protocol_version >= 31)
send_msg_int(MSG_IO_TIMEOUT, io_timeout);
if (am_sender) {
keep_dirlinks = 0; /* Must be disabled on the sender. */
if (need_messages_from_generator)
-@@ -1526,6 +1532,9 @@ static int start_client(int argc, char *argv[])
+@@ -1531,6 +1537,9 @@ static int start_client(int argc, char *argv[])
else
env_port = rsync_port;
{"fuzzy", 'y', POPT_ARG_NONE, 0, 'y', 0, 0 },
{"no-fuzzy", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 },
{"no-y", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 },
-@@ -2781,8 +2783,14 @@ void server_options(char **args, int *argc_p)
+@@ -2789,8 +2791,14 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -421,6 +421,8 @@ has its own detailed description later in this man page.
+@@ -427,6 +427,8 @@ has its own detailed description later in this man page.
--temp-dir=DIR, -T create temporary files in directory DIR
--fuzzy, -y find similar file for basis if no dest file
--detect-renamed try to find renamed files to speed the xfer
--compare-dest=DIR also compare destination files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-@@ -2430,6 +2432,20 @@ your home directory (remove the '=' for that).
+@@ -2455,6 +2457,20 @@ your home directory (remove the '=' for that).
otential alternate-basis files will be removed as the transfer progresses.
This option conflicts with [`--inplace`](#opt) and [`--append`](#opt).
a file that can't use it, while missing out on giving it to a file
that could use it.
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/backup.c b/backup.c
--- a/backup.c
+++ b/backup.c
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
-@@ -714,7 +714,7 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
+@@ -715,7 +715,7 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
if (mkpath_dest_arg && statret < 0 && (cp || file_total > 1)) {
int save_errno = errno;
{"fuzzy", 'y', POPT_ARG_NONE, 0, 'y', 0, 0 },
{"no-fuzzy", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 },
{"no-y", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 },
-@@ -2363,7 +2365,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2371,7 +2373,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
inplace = 1;
}
partial_dir = tmp_partialdir;
if (inplace) {
-@@ -2372,6 +2374,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2380,6 +2382,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
snprintf(err_buf, sizeof err_buf,
"--%s cannot be used with --%s\n",
append_mode ? "append" : "inplace",
delay_updates ? "delay-updates" : "partial-dir");
return 0;
}
-@@ -2778,6 +2781,8 @@ void server_options(char **args, int *argc_p)
+@@ -2786,6 +2789,8 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -420,6 +420,7 @@ has its own detailed description later in this man page.
+@@ -426,6 +426,7 @@ has its own detailed description later in this man page.
--modify-window=NUM, -@ set the accuracy for mod-time comparisons
--temp-dir=DIR, -T create temporary files in directory DIR
--fuzzy, -y find similar file for basis if no dest file
--compare-dest=DIR also compare destination files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-@@ -2413,6 +2414,22 @@ your home directory (remove the '=' for that).
+@@ -2438,6 +2439,22 @@ your home directory (remove the '=' for that).
potential fuzzy-match files, so either use [`--delete-after`](#opt) or
specify some filename exclusions if you need to prevent this.
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -408,6 +408,7 @@ has its own detailed description later in this man page.
+@@ -414,6 +414,7 @@ has its own detailed description later in this man page.
--partial keep partially transferred files
--partial-dir=DIR put a partially transferred file into DIR
--delay-updates put all updated files into place at end
--prune-empty-dirs, -m prune empty directory chains from file-list
--numeric-ids don't map uid/gid values by user/group name
--usermap=STRING custom username mapping
-@@ -3207,6 +3208,17 @@ your home directory (remove the '=' for that).
+@@ -3238,6 +3239,17 @@ your home directory (remove the '=' for that).
update algorithm that is even more atomic (it uses [`--link-dest`](#opt)
and a parallel hierarchy of files).
return open(pathname, flags | O_BINARY, mode);
}
-@@ -681,6 +690,9 @@ int do_open_nofollow(const char *pathname, int flags)
+@@ -684,6 +693,9 @@ int do_open_nofollow(const char *pathname, int flags)
#endif
}
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -345,6 +345,7 @@ has its own detailed description later in this man page.
+@@ -351,6 +351,7 @@ has its own detailed description later in this man page.
--backup-dir=DIR make backups into hierarchy based in DIR
--suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
--update, -u skip files that are newer on the receiver
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
extern int dry_run;
extern int list_only;
-@@ -48,6 +51,7 @@ extern int called_from_signal_handler;
- extern int need_messages_from_generator;
+@@ -49,6 +52,7 @@ extern int need_messages_from_generator;
extern int kluge_around_eof;
extern int got_xfer_error;
+ extern int old_style_args;
+extern int force_change;
extern int msgs2stderr;
extern int module_id;
extern int read_only;
-@@ -965,6 +969,22 @@ static int do_recv(int f_in, int f_out, char *local_name)
+@@ -966,6 +970,22 @@ static int do_recv(int f_in, int f_out, char *local_name)
* points to an identical file won't be replaced by the referent. */
copy_links = copy_dirlinks = copy_unsafe_links = 0;
/* Now we use the descrip values to actually mark the options for refusal. */
for (op = long_options; op != list_end; op++) {
-@@ -2677,6 +2695,9 @@ void server_options(char **args, int *argc_p)
+@@ -2685,6 +2703,9 @@ void server_options(char **args, int *argc_p)
if (xfer_dirs && !recurse && delete_mode && am_sender)
args[ac++] = "--no-r";
if (do_compression && do_compression_level != CLVL_NOT_SPECIFIED) {
if (asprintf(&arg, "--compress-level=%d", do_compression_level) < 0)
goto oom;
-@@ -2772,6 +2793,16 @@ void server_options(char **args, int *argc_p)
+@@ -2780,6 +2801,16 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--delete-excluded";
if (force_delete)
args[ac++] = "--force";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -360,6 +360,7 @@ has its own detailed description later in this man page.
+@@ -366,6 +366,7 @@ has its own detailed description later in this man page.
--keep-dirlinks, -K treat symlinked dir on receiver as dir
--hard-links, -H preserve hard links
--perms, -p preserve permissions
--executability, -E preserve executability
--chmod=CHMOD affect file and/or directory permissions
--acls, -A preserve ACLs (implies --perms)
-@@ -400,7 +401,10 @@ has its own detailed description later in this man page.
+@@ -406,7 +407,10 @@ has its own detailed description later in this man page.
--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
--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
-@@ -732,6 +736,7 @@ your home directory (remove the '=' for that).
+@@ -738,6 +742,7 @@ your home directory (remove the '=' for that).
recursion and want to preserve almost everything. Be aware that it does
**not** include preserving ACLs (`-A`), xattrs (`-X`), atimes (`-U`),
crtimes (`-N`), nor the finding and preserving of hardlinks (`-H`).
+ It also does **not** imply [`--fileflags`](#opt).
The only exception to the above equivalence is when [`--files-from`](#opt)
- is specified, in which case [`-r`](#opt--recursive) is not implied.
-@@ -1188,7 +1193,7 @@ your home directory (remove the '=' for that).
+ is specified, in which case [`-r`](#opt) is not implied.
+@@ -1198,7 +1203,7 @@ your home directory (remove the '=' for that).
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
See also [`--keep-dirlinks`](#opt) for an analogous option for the
receiving side.
-@@ -1383,6 +1388,37 @@ your home directory (remove the '=' for that).
+@@ -1393,6 +1398,37 @@ your home directory (remove the '=' for that).
those used by [`--fake-super`](#opt)) unless you repeat the option (e.g. `-XX`).
This "copy all xattrs" mode cannot be used with [`--fake-super`](#opt).
0. `--chmod=CHMOD`
This option tells rsync to apply one or more comma-separated "chmod" modes
-@@ -1869,8 +1905,8 @@ your home directory (remove the '=' for that).
+@@ -1888,8 +1924,8 @@ your home directory (remove the '=' for that).
[`--ignore-missing-args`](#opt) option a step farther: each missing arg
will become a deletion request of the corresponding destination file on the
receiving side (should it exist). If the destination file is a non-empty
independent of any other type of delete processing.
The missing source files are represented by special file-list entries which
-@@ -1881,14 +1917,14 @@ your home directory (remove the '=' for that).
+@@ -1900,14 +1936,14 @@ your home directory (remove the '=' for that).
Tells [`--delete`](#opt) to go ahead and delete files even when there are
I/O errors.
[`--recursive`](#opt) option was also enabled.
0. `--max-delete=NUM`
-@@ -2881,7 +2917,7 @@ your home directory (remove the '=' for that).
+@@ -2904,7 +2940,7 @@ your home directory (remove the '=' for that).
also turns on the output of other verbose messages).
The "%i" escape has a cryptic output that is 11 letters long. The general
{
static int switch_step = 0;
int code;
-@@ -265,17 +318,72 @@ int do_chmod(const char *path, mode_t mode)
+@@ -268,17 +321,72 @@ int do_chmod(const char *path, mode_t mode)
code = chmod(path, mode & CHMOD_BITS); /* DISCOURAGED FUNCTION */
break;
}
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -1406,7 +1406,9 @@ your home directory (remove the '=' for that).
+@@ -1416,7 +1416,9 @@ your home directory (remove the '=' for that).
> --chmod=D2775,F664
It is also legal to specify multiple `--chmod` options, as each additional
See the [`--perms`](#opt) and [`--executability`](#opt) options for how the
resulting permission value can be applied to the files in the transfer.
-@@ -2813,6 +2815,10 @@ your home directory (remove the '=' for that).
+@@ -2838,6 +2840,10 @@ your home directory (remove the '=' for that).
avoid a complaint about wildcard characters, but a modern rsync handles
this automatically.
0. `--timeout=SECONDS`
This option allows you to set a maximum I/O timeout in seconds. If no data
-@@ -3859,6 +3865,15 @@ The following modifiers are accepted after a "`+`" or "`-`":
+@@ -3893,6 +3899,15 @@ The following modifiers are accepted after a "`+`" or "`-`":
like "CVS" and "`*.o`" are marked as perishable, and will not prevent a
directory that was removed on the source from being deleted on the
destination.
- An `x` indicates that a rule affects xattr names in xattr copy/delete
operations (and is thus ignored when matching file/dir names). If no
xattr-matching rules are specified, a default xattr filtering rule is used
-@@ -3916,6 +3931,12 @@ The following modifiers are accepted after a merge or dir-merge rule:
+@@ -3950,6 +3965,12 @@ The following modifiers are accepted after a merge or dir-merge rule:
rules in the file must not specify sides (via a modifier or a rule prefix
such as `hide`).
extern int dry_run;
extern int list_only;
-@@ -60,6 +64,7 @@ extern int copy_dirlinks;
+@@ -61,6 +65,7 @@ extern int copy_dirlinks;
extern int copy_unsafe_links;
extern int keep_dirlinks;
extern int preserve_hard_links;
extern int protocol_version;
extern int mkpath_dest_arg;
extern int file_total;
-@@ -118,6 +123,7 @@ int daemon_connection = 0; /* 0 = no daemon, 1 = daemon via remote shell, -1 = d
+@@ -119,6 +124,7 @@ int daemon_connection = 0; /* 0 = no daemon, 1 = daemon via remote shell, -1 = d
mode_t orig_umask = 0;
int batch_gen_fd = -1;
int sender_keeps_checksum = 0;
int raw_argc, cooked_argc;
char **raw_argv, **cooked_argv;
-@@ -663,6 +669,43 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
+@@ -664,6 +670,43 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
return pid;
}
/* The receiving side operates in one of two modes:
*
* 1. it receives any number of files into a destination directory,
-@@ -743,6 +786,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
+@@ -744,6 +787,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
exit_cleanup(RERR_FILESELECT);
}
filesystem_dev = st.st_dev; /* ensures --force works right w/-x */
return NULL;
}
if (file_total > 1) {
-@@ -800,7 +846,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
+@@ -801,7 +847,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
full_fname(dest_path));
exit_cleanup(RERR_FILESELECT);
}
return NULL;
}
-@@ -820,6 +868,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
+@@ -821,6 +869,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
full_fname(dest_path));
exit_cleanup(RERR_FILESELECT);
}
/* Now we use the descrip values to actually mark the options for refusal. */
for (op = long_options; op != list_end; op++) {
-@@ -2099,6 +2108,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2107,6 +2116,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
#endif
if (write_batch && read_batch) {
snprintf(err_buf, sizeof err_buf,
"--write-batch and --read-batch can not be used together\n");
-@@ -2698,6 +2716,11 @@ void server_options(char **args, int *argc_p)
+@@ -2706,6 +2724,11 @@ void server_options(char **args, int *argc_p)
if (preserve_fileflags)
args[ac++] = "--fileflags";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -365,6 +365,8 @@ has its own detailed description later in this man page.
+@@ -371,6 +371,8 @@ has its own detailed description later in this man page.
--chmod=CHMOD affect file and/or directory permissions
--acls, -A preserve ACLs (implies --perms)
--xattrs, -X preserve extended attributes
--owner, -o preserve owner (super-user only)
--group, -g preserve group
--devices preserve device files (super-user only)
-@@ -1419,6 +1421,47 @@ your home directory (remove the '=' for that).
+@@ -1429,6 +1431,47 @@ your home directory (remove the '=' for that).
does not try to affect user flags. This option overrides
[`--force-change`](#opt) and [`--force-uchange`](#opt).
- Make this code handle multibyte character encodings, and honor the
--iconv setting when converting case.
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
{"files-from", 0, POPT_ARG_STRING, &files_from, 0, 0, 0 },
{"from0", '0', POPT_ARG_VAL, &eol_nulls, 1, 0, 0},
{"no-from0", 0, POPT_ARG_VAL, &eol_nulls, 0, 0, 0},
-@@ -2808,6 +2811,9 @@ void server_options(char **args, int *argc_p)
+@@ -2816,6 +2819,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -440,6 +440,7 @@ has its own detailed description later in this man page.
+@@ -446,6 +446,7 @@ has its own detailed description later in this man page.
--old-args disable the modern arg-protection idiom
--protect-args, -s no space-splitting; wildcard chars only
--copy-as=USER[:GROUP] specify user & optional group for the copy
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
-@@ -2361,6 +2362,12 @@ your home directory (remove the '=' for that).
+@@ -2386,6 +2387,12 @@ your home directory (remove the '=' for that).
> sudo rsync -aive lsh -M--copy-as=joe src/ lh:dest/
./configure
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
-@@ -45,7 +45,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
+@@ -46,7 +46,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
util1.o util2.o main.o checksum.o match.o syscall.o log.o backup.o delete.o
OBJS2=options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o \
usage.o fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
-@@ -140,7 +140,7 @@ int start_socket_client(char *host, int remote_argc, char *remote_argv[],
+@@ -141,7 +141,7 @@ int start_socket_client(char *host, int remote_argc, char *remote_argv[],
setup_iconv();
#endif
return ret ? ret : client_run(fd, fd, -1, argc, argv);
}
-@@ -217,7 +217,7 @@ static int exchange_protocols(int f_in, int f_out, char *buf, size_t bufsiz, int
+@@ -218,7 +218,7 @@ static int exchange_protocols(int f_in, int f_out, char *buf, size_t bufsiz, int
return 0;
}
{
int i, modlen;
char line[BIGPATHBUFLEN];
-@@ -328,6 +328,17 @@ int start_inband_exchange(int f_in, int f_out, const char *user, int argc, char
+@@ -354,6 +354,17 @@ int start_inband_exchange(int f_in, int f_out, const char *user, int argc, char
continue;
}
if (strcmp(line,"@RSYNCD: OK") == 0)
break;
-@@ -719,7 +730,12 @@ static int rsync_module(int f_in, int f_out, int i, const char *addr, const char
+@@ -745,7 +756,12 @@ static int rsync_module(int f_in, int f_out, int i, const char *addr, const char
}
read_only = lp_read_only(i); /* may also be overridden by auth_server() */
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -940,6 +940,31 @@ if test x"$enable_iconv" != x"no"; then
+@@ -941,6 +941,31 @@ if test x"$enable_iconv" != x"no"; then
AC_DEFINE(UTF8_CHARSET, "UTF-8", [String to pass to iconv() for the UTF-8 charset.])
fi
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
-@@ -1569,7 +1569,7 @@ static int start_client(int argc, char *argv[])
+@@ -1574,7 +1574,7 @@ static int start_client(int argc, char *argv[])
* remote shell command, we need to do the RSYNCD protocol first */
if (daemon_connection) {
int tmpret;
./configure
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
-@@ -45,7 +45,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
+@@ -46,7 +46,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
util1.o util2.o main.o checksum.o match.o syscall.o log.o backup.o delete.o
OBJS2=options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o \
usage.o fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
-@@ -52,6 +52,7 @@ extern int logfile_format_has_i;
+@@ -53,6 +53,7 @@ extern int logfile_format_has_i;
extern int logfile_format_has_o_or_i;
extern char *bind_address;
extern char *config_file;
extern char *logfile_format;
extern char *files_from;
extern char *tmpdir;
-@@ -699,6 +700,9 @@ static int rsync_module(int f_in, int f_out, int i, const char *addr, const char
+@@ -725,6 +726,9 @@ static int rsync_module(int f_in, int f_out, int i, const char *addr, const char
return -1;
}
case OPT_STOP_AFTER: {
long val;
arg = poptGetOptArg(pc);
-@@ -2215,6 +2235,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2223,6 +2243,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
tmpdir = sanitize_path(NULL, tmpdir, NULL, 0, SP_DEFAULT);
if (backup_dir)
backup_dir = sanitize_path(NULL, backup_dir, NULL, 0, SP_DEFAULT);
}
if (daemon_filter_list.head && !am_sender) {
filter_rule_list *elp = &daemon_filter_list;
-@@ -2884,6 +2906,12 @@ void server_options(char **args, int *argc_p)
+@@ -2892,6 +2914,12 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--no-W";
}
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -423,6 +423,7 @@ has its own detailed description later in this man page.
+@@ -429,6 +429,7 @@ has its own detailed description later in this man page.
--compare-dest=DIR also compare destination files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
--compress, -z compress file data during the transfer
--compress-choice=STR choose the compression algorithm (aka --zc)
--compress-level=NUM explicitly set compression level (aka --zl)
-@@ -2498,6 +2499,50 @@ your home directory (remove the '=' for that).
+@@ -2523,6 +2524,50 @@ your home directory (remove the '=' for that).
this bug by avoiding the `-o` option (or using `--no-o`) when sending to an
old rsync.
diff --git a/rsyncd.conf.5.md b/rsyncd.conf.5.md
--- a/rsyncd.conf.5.md
+++ b/rsyncd.conf.5.md
-@@ -357,6 +357,23 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
+@@ -356,6 +356,23 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
is 0, which means no limit. A negative value disables the module. See
also the "[lock file](#)" parameter.
fast fallback for the case where xxHash libraries are not available at
build time.
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
-@@ -30,14 +30,14 @@ SHELL=/bin/sh
+@@ -30,7 +30,7 @@ SHELL=/bin/sh
.SUFFIXES:
.SUFFIXES: .c .o
ASM_x86_64=lib/md5-asm-x86_64.o
GENFILES=configure.sh aclocal.m4 config.h.in rsync.1 rsync.1.html \
- rsync-ssl.1 rsync-ssl.1.html rsyncd.conf.5 rsyncd.conf.5.html
+@@ -38,7 +38,7 @@ GENFILES=configure.sh aclocal.m4 config.h.in rsync.1 rsync.1.html \
+ @GEN_RRSYNC@
HEADERS=byteorder.h config.h errcode.h proto.h rsync.h ifuncs.h itypes.h inums.h \
lib/pool_alloc.h lib/mdigest.h lib/md-defines.h
-LIBOBJ=lib/wildmatch.o lib/compat.o lib/snprintf.o lib/mdfour.o lib/md5.o \
lib/permstring.o lib/pool_alloc.o lib/sysacls.o lib/sysxattrs.o @LIBOBJS@
zlib_OBJS=zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o \
zlib/trees.o zlib/zutil.o zlib/adler32.o zlib/compress.o zlib/crc32.o
-@@ -151,6 +151,9 @@ simd-checksum-x86_64.o: simd-checksum-x86_64.cpp
+@@ -152,6 +152,9 @@ simd-checksum-x86_64.o: simd-checksum-x86_64.cpp
simd-checksum-avx2.o: simd-checksum-avx2.S
@$(srcdir)/cmd-or-msg disable-asm $(CC) $(CFLAGS) --include=$(srcdir)/rsync.h -DAVX2_ASM -I. @NOEXECSTACK@ -c -o $@ $(srcdir)/simd-checksum-avx2.S
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
{"modify-window", '@', POPT_ARG_INT, &modify_window, OPT_MODIFY_WINDOW, 0, 0 },
{"super", 0, POPT_ARG_VAL, &am_root, 2, 0, 0 },
{"no-super", 0, POPT_ARG_VAL, &am_root, 0, 0, 0 },
-@@ -2284,6 +2286,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2292,6 +2294,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
parse_filter_str(&filter_list, backup_dir_buf, rule_template(0), 0);
}
if (make_backups && !backup_dir)
omit_dir_times = -1; /* Implied, so avoid -O to sender. */
-@@ -2780,6 +2785,8 @@ void server_options(char **args, int *argc_p)
+@@ -2788,6 +2793,8 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--size-only";
if (do_stats)
args[ac++] = "--stats";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -375,6 +375,7 @@ has its own detailed description later in this man page.
+@@ -381,6 +381,7 @@ has its own detailed description later in this man page.
--crtimes, -N preserve create times (newness)
--omit-dir-times, -O omit directories from --times
--omit-link-times, -J omit symlinks from --times
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
--sparse, -S turn sequences of nulls into sparse blocks
-@@ -1530,6 +1531,11 @@ your home directory (remove the '=' for that).
+@@ -1540,6 +1541,11 @@ your home directory (remove the '=' for that).
This tells rsync to omit symlinks when it is preserving modification,
access, and create times.
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -459,6 +459,7 @@ has its own detailed description later in this man page.
+@@ -465,6 +465,7 @@ has its own detailed description later in this man page.
--early-input=FILE use FILE for daemon's early exec input
--list-only list the files instead of copying them
--bwlimit=RATE limit socket I/O bandwidth
TODO: the configure changes should abort if the user requests --enable-slp
and we can't honor that request.
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
LIBOBJDIR=lib/
INSTALLCMD=@INSTALL@
-@@ -46,7 +48,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
+@@ -47,7 +49,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
OBJS2=options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o \
usage.o fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
OBJS3=progress.o pipe.o @ASM@ @SIMD@
popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
popt/popthelp.o popt/poptparse.o
OBJS=$(OBJS1) $(OBJS2) $(OBJS3) $(DAEMON_OBJ) $(LIBOBJ) @BUILD_ZLIB@ @BUILD_POPT@
-@@ -99,7 +101,7 @@ install-strip:
+@@ -100,7 +102,7 @@ install-strip:
$(MAKE) INSTALL_STRIP='-s' install
rsync$(EXEEXT): $(OBJS)
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
-@@ -1490,6 +1490,13 @@ int daemon_main(void)
+@@ -1516,6 +1516,13 @@ int daemon_main(void)
* address too. In fact, why not just do getnameinfo on the
* local address??? */
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -1008,6 +1008,29 @@ if test $rsync_cv_can_hardlink_special = yes; then
+@@ -1009,6 +1009,29 @@ if test $rsync_cv_can_hardlink_special = yes; then
AC_DEFINE(CAN_HARDLINK_SPECIAL, 1, [Define to 1 if link() can hard-link special files.])
fi
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
-@@ -1400,6 +1400,22 @@ static int start_client(int argc, char *argv[])
+@@ -1401,6 +1401,22 @@ static int start_client(int argc, char *argv[])
if (!read_batch) { /* for read_batch, NO source is specified */
char *path = check_for_hostspec(argv[0], &shell_machine, &rsync_port);
diff --git a/rsyncd.conf.5.md b/rsyncd.conf.5.md
--- a/rsyncd.conf.5.md
+++ b/rsyncd.conf.5.md
-@@ -139,6 +139,21 @@ a literal % into a value is to use %%.
+@@ -138,6 +138,21 @@ a literal % into a value is to use %%.
You can override the default backlog value when the daemon listens for
connections. It defaults to 5.
## MODULE PARAMETERS
After the global parameters you should define a number of modules, each module
-@@ -1176,6 +1191,7 @@ A more sophisticated example would be:
+@@ -1175,6 +1190,7 @@ A more sophisticated example would be:
> max connections = 4
> syslog facility = local5
> pid file = /var/run/rsyncd.pid
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
-- Matt McCutchen <hashproduct@gmail.com>
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
{"no-backup", 0, POPT_ARG_VAL, &make_backups, 0, 0, 0 },
{"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 },
{"suffix", 0, POPT_ARG_STRING, &backup_suffix, 0, 0, 0 },
-@@ -2783,6 +2785,8 @@ void server_options(char **args, int *argc_p)
+@@ -2791,6 +2793,8 @@ void server_options(char **args, int *argc_p)
} else {
if (skip_compress)
args[ac++] = safe_arg("--skip-compress", skip_compress);
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -390,6 +390,7 @@ has its own detailed description later in this man page.
+@@ -396,6 +396,7 @@ has its own detailed description later in this man page.
--existing skip creating new files on receiver
--ignore-existing skip updating files that exist on receiver
--remove-source-files sender removes synchronized files (non-dir)
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before xfer, not during
-@@ -1755,6 +1756,17 @@ your home directory (remove the '=' for that).
+@@ -1774,6 +1775,17 @@ your home directory (remove the '=' for that).
Starting with 3.1.0, rsync will skip the sender-side removal (and output an
error) if the file's size or modify time has not stayed unchanged.
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
-@@ -188,7 +188,7 @@ int shell_exec(const char *cmd)
+@@ -189,7 +189,7 @@ int shell_exec(const char *cmd)
}
/* Wait for a process to exit, calling io_flush while waiting. */
{"outbuf", 0, POPT_ARG_STRING, &outbuf_mode, 0, 0, 0 },
{"remote-option", 'M', POPT_ARG_STRING, 0, 'M', 0, 0 },
{"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 },
-@@ -2407,6 +2413,16 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2415,6 +2421,16 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
}
if (files_from) {
char *h, *p;
int q;
-@@ -2795,6 +2811,25 @@ void server_options(char **args, int *argc_p)
+@@ -2803,6 +2819,25 @@ void server_options(char **args, int *argc_p)
else if (missing_args == 1 && !am_sender)
args[ac++] = "--ignore-missing-args";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -417,6 +417,7 @@ has its own detailed description later in this man page.
+@@ -423,6 +423,7 @@ has its own detailed description later in this man page.
--contimeout=SECONDS set daemon connection timeout in seconds
--ignore-times, -I don't skip files that match size and time
--size-only skip files that match in size
--modify-window=NUM, -@ set the accuracy for mod-time comparisons
--temp-dir=DIR, -T create temporary files in directory DIR
--fuzzy, -y find similar file for basis if no dest file
-@@ -465,6 +466,8 @@ has its own detailed description later in this man page.
+@@ -471,6 +472,8 @@ has its own detailed description later in this man page.
--write-batch=FILE write a batched update to FILE
--only-write-batch=FILE like --write-batch but w/o updating dest
--read-batch=FILE read a batched update from FILE
--protocol=NUM force an older protocol version to be used
--iconv=CONVERT_SPEC request charset conversion of filenames
--checksum-seed=NUM set block/file checksum seed (advanced)
-@@ -3482,6 +3485,36 @@ your home directory (remove the '=' for that).
+@@ -3516,6 +3519,36 @@ your home directory (remove the '=' for that).
[`--write-batch`](#opt). If _FILE_ is `-`, the batch data will be read
from standard input. See the "BATCH MODE" section for details.
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/fileio.c b/fileio.c
--- a/fileio.c
+++ b/fileio.c
{"preallocate", 0, POPT_ARG_NONE, &preallocate_files, 0, 0, 0},
{"inplace", 0, POPT_ARG_VAL, &inplace, 1, 0, 0 },
{"no-inplace", 0, POPT_ARG_VAL, &inplace, 0, 0, 0 },
-@@ -2715,6 +2717,12 @@ void server_options(char **args, int *argc_p)
+@@ -2723,6 +2725,12 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -378,6 +378,7 @@ has its own detailed description later in this man page.
+@@ -384,6 +384,7 @@ has its own detailed description later in this man page.
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
--sparse, -S turn sequences of nulls into sparse blocks
--preallocate allocate dest files before writing them
--write-devices write to devices as files (implies --inplace)
--dry-run, -n perform a trial run with no changes made
-@@ -1604,6 +1605,18 @@ your home directory (remove the '=' for that).
+@@ -1614,6 +1615,18 @@ your home directory (remove the '=' for that).
(as opposed to allocated sequences of null bytes) if the kernel version and
filesystem type support creating holes in the allocated data.
./configure (optional if already run)
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
{"ipv4", '4', POPT_ARG_VAL, &default_af_hint, AF_INET, 0, 0 },
{"ipv6", '6', POPT_ARG_VAL, &default_af_hint, AF_INET6, 0, 0 },
{"8-bit-output", '8', POPT_ARG_VAL, &allow_8bit_chars, 1, 0, 0 },
-@@ -2453,6 +2455,24 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2461,6 +2463,24 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
}
am_starting_up = 0;
return 1;
-@@ -2901,6 +2921,12 @@ void server_options(char **args, int *argc_p)
+@@ -2909,6 +2929,12 @@ void server_options(char **args, int *argc_p)
if (relative_paths && !implied_dirs && (!am_sender || protocol_version >= 30))
args[ac++] = "--no-implied-dirs";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -467,6 +467,7 @@ has its own detailed description later in this man page.
+@@ -473,6 +473,7 @@ has its own detailed description later in this man page.
--read-batch=FILE read a batched update from FILE
--protocol=NUM force an older protocol version to be used
--iconv=CONVERT_SPEC request charset conversion of filenames
--checksum-seed=NUM set block/file checksum seed (advanced)
--ipv4, -4 prefer IPv4
--ipv6, -6 prefer IPv6
-@@ -3524,6 +3525,25 @@ your home directory (remove the '=' for that).
+@@ -3558,6 +3559,25 @@ your home directory (remove the '=' for that).
free to specify just the local charset for a daemon transfer (e.g.
`--iconv=utf8`).
patch -p1 <patches/xxh3-safety-check.diff
make
-based-on: c3b553a93f7090bcbb89c08405f1a5f1c175c864
+based-on: cc832943160fb2cbaeaf45942b724828399edd37
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c