./configure (optional if already run)
make
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -769,7 +769,8 @@ static struct poptOption long_options[] = {
+@@ -770,7 +770,8 @@ static struct poptOption long_options[] = {
{"no-i", 0, POPT_ARG_VAL, &itemize_changes, 0, 0, 0 },
{"bwlimit", 0, POPT_ARG_STRING, &bwlimit_arg, OPT_BWLIMIT, 0, 0 },
{"no-bwlimit", 0, POPT_ARG_VAL, &bwlimit, 0, 0, 0 },
{"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 },
-@@ -2687,6 +2688,10 @@ void server_options(char **args, int *argc_p)
- }
+@@ -2741,6 +2742,10 @@ void server_options(char **args, int *argc_p)
+ args[ac++] = safe_arg("--compress-choice", compress_choice);
if (am_sender) {
+ /* A remote sender just needs the above -b option.
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -344,6 +344,7 @@ detailed description below for a complete description.
+@@ -338,6 +338,7 @@ detailed description below for a complete description.
--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
-@@ -873,6 +874,13 @@ your home directory (remove the '=' for that).
+@@ -869,6 +870,13 @@ your home directory (remove the '=' for that).
trailing inclusion/exclusion of `*`, the auto-added rule would never be
reached).
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -161,10 +161,14 @@ int no_detach
+@@ -162,10 +162,14 @@ int no_detach
int write_batch = 0;
int read_batch = 0;
int backup_dir_len = 0;
char *tmpdir = NULL;
char *partial_dir = NULL;
char *basis_dir[MAX_BASIS_DIRS+1];
-@@ -177,7 +181,9 @@ char *password_file = NULL;
+@@ -178,7 +182,9 @@ char *password_file = NULL;
char *early_input_file = NULL;
char *rsync_path = RSYNC_PATH;
char *backup_dir = NULL;
char *sockopts = NULL;
char *usermap = NULL;
char *groupmap = NULL;
-@@ -773,7 +779,9 @@ static struct poptOption long_options[] = {
+@@ -774,7 +780,9 @@ static struct poptOption long_options[] = {
{"backup-deleted", 0, POPT_ARG_VAL, &make_backups, 1, 0, 0 },
{"no-backup", 0, POPT_ARG_VAL, &make_backups, 0, 0, 0 },
{"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 },
{"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 },
-@@ -2199,6 +2207,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2209,6 +2217,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;
-@@ -2220,6 +2230,14 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2230,6 +2240,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)
-@@ -2231,6 +2249,20 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2241,6 +2259,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 */
-@@ -2267,6 +2299,34 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2277,6 +2309,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. */
-@@ -2662,6 +2722,10 @@ void server_options(char **args, int *argc_p)
+@@ -2726,11 +2786,20 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--backup-dir";
- args[ac++] = backup_dir;
+ args[ac++] = safe_arg("", backup_dir);
}
+ if (backup_dir_dels && backup_dir_dels != backup_dir) {
+ args[ac++] = "--backup-dir-dels";
+ }
/* Only send --suffix if it specifies a non-default value. */
- if (strcmp(backup_suffix, backup_dir ? "" : BACKUP_SUFFIX) != 0) {
-@@ -2670,6 +2734,14 @@ void server_options(char **args, int *argc_p)
- goto oom;
- args[ac++] = arg;
- }
+ if (strcmp(backup_suffix, backup_dir ? "" : BACKUP_SUFFIX) != 0)
+ args[ac++] = safe_arg("--suffix", backup_suffix);
+
+ /* Only send --suffix-dels if it specifies a value different from the
+ * --suffix value, which would normally be used for deletions too. */
-+ if (strcmp(backup_suffix_dels, backup_suffix) != 0) {
-+ /* We use the following syntax to avoid weirdness with '~'. */
-+ if (asprintf(&arg, "--suffix-dels=%s", backup_suffix_dels) < 0)
-+ goto oom;
-+ args[ac++] = arg;
-+ }
++ if (strcmp(backup_suffix_dels, backup_suffix) != 0)
++ args[ac++] = safe_arg("--suffix-dels", backup_suffix_dels);
++
+ if (checksum_choice)
+ args[ac++] = safe_arg("--checksum-choice", checksum_choice);
- if (checksum_choice) {
- if (asprintf(&arg, "--checksum-choice=%s", checksum_choice) < 0)
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -346,7 +346,9 @@ detailed description below for a complete description.
+@@ -340,7 +340,9 @@ detailed description below for a complete description.
--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
./configure (optional if already run)
make
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/errcode.h b/errcode.h
--- a/errcode.h
+++ b/errcode.h
}
void write_del_stats(int f)
-@@ -1630,6 +1633,14 @@ void remember_children(UNUSED(int val))
+@@ -1626,6 +1629,14 @@ void remember_children(UNUSED(int val))
break;
}
}
}
#endif
#ifndef HAVE_SIGACTION
-@@ -1683,6 +1694,13 @@ static void rsync_panic_handler(UNUSED(int whatsig))
+@@ -1679,6 +1690,13 @@ static void rsync_panic_handler(UNUSED(int whatsig))
}
#endif
static void unset_env_var(const char *var)
{
#ifdef HAVE_UNSETENV
-@@ -1699,7 +1717,6 @@ static void unset_env_var(const char *var)
+@@ -1695,7 +1713,6 @@ static void unset_env_var(const char *var)
#endif
}
int main(int argc,char *argv[])
{
int ret;
-@@ -1723,6 +1740,11 @@ int main(int argc,char *argv[])
+@@ -1719,6 +1736,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: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -121,6 +121,7 @@ size_t bwlimit_writemax = 0;
+@@ -122,6 +122,7 @@ size_t bwlimit_writemax = 0;
int ignore_existing = 0;
int ignore_non_existing = 0;
int need_messages_from_generator = 0;
int max_delete = INT_MIN;
OFF_T max_size = -1;
OFF_T min_size = -1;
-@@ -576,7 +577,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -577,7 +578,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD,
OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_BLOCK_SIZE,
OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS,
OPT_STOP_AFTER, OPT_STOP_AT,
OPT_REFUSED_BASE = 9000};
-@@ -732,6 +733,7 @@ static struct poptOption long_options[] = {
+@@ -733,6 +734,7 @@ static struct poptOption long_options[] = {
{"no-c", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 },
{"checksum-choice", 0, POPT_ARG_STRING, &checksum_choice, 0, 0, 0 },
{"cc", 0, POPT_ARG_STRING, &checksum_choice, 0, 0, 0 },
{"block-size", 'B', POPT_ARG_STRING, 0, OPT_BLOCK_SIZE, 0, 0 },
{"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
{"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
-@@ -1726,6 +1728,23 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1729,6 +1731,23 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
break;
case OPT_INFO:
arg = poptGetOptArg(pc);
parse_output_words(info_words, info_levels, arg, USER_PRIORITY);
-@@ -2064,6 +2083,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2074,6 +2093,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
-@@ -338,6 +338,7 @@ detailed description below for a complete description.
+@@ -332,6 +332,7 @@ detailed description below for a complete description.
--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).
+@@ -711,6 +712,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
-@@ -725,6 +728,38 @@ your home directory (remove the '=' for that).
+@@ -721,6 +724,38 @@ your home directory (remove the '=' for that).
can be overridden using either the `--checksum-choice` (`--cc`) option or an
environment variable that is discussed in that option's section.
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -1730,7 +1730,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1733,7 +1733,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
case OPT_SUMFILES:
arg = poptGetOptArg(pc);
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -739,9 +739,13 @@ your home directory (remove the '=' for that).
+@@ -735,9 +735,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
./configure (optional if already run)
make
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
./configure (optional if already run)
make
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -576,7 +576,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -577,7 +577,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD,
OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_BLOCK_SIZE,
OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS,
OPT_STOP_AFTER, OPT_STOP_AT,
OPT_REFUSED_BASE = 9000};
-@@ -736,6 +736,7 @@ static struct poptOption long_options[] = {
+@@ -737,6 +737,7 @@ static struct poptOption long_options[] = {
{"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
{"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
{"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
{"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 },
-@@ -990,6 +991,9 @@ static void set_refuse_options(void)
+@@ -993,6 +994,9 @@ static void set_refuse_options(void)
#ifndef SUPPORT_HARD_LINKS
parse_one_refuse_match(0, "link-dest", list_end);
#endif
#ifndef HAVE_MKTIME
parse_one_refuse_match(0, "stop-at", list_end);
#endif
-@@ -1319,6 +1323,8 @@ char *alt_dest_opt(int type)
+@@ -1322,6 +1326,8 @@ char *alt_dest_opt(int type)
return "--copy-dest";
case LINK_DEST:
return "--link-dest";
default:
NOISY_DEATH("Unknown alt_dest_opt type");
}
-@@ -1689,6 +1695,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1692,6 +1698,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
want_dest_type = LINK_DEST;
goto set_dest_dir;
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -424,6 +424,7 @@ detailed description below for a complete description.
+@@ -419,6 +419,7 @@ detailed description below for a complete description.
--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)
-@@ -2381,6 +2382,17 @@ your home directory (remove the '=' for that).
+@@ -2399,6 +2400,17 @@ your home directory (remove the '=' for that).
specified (or implied by `-a`). You can work-around this bug by avoiding
the `-o` option when sending to an old rsync.
./configure (optional if already run)
make
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/daemon-parm.txt b/daemon-parm.txt
--- a/daemon-parm.txt
+++ b/daemon-parm.txt
int remove_source_files = 0;
int one_file_system = 0;
int protocol_version = PROTOCOL_VERSION;
-@@ -820,6 +822,8 @@ static struct poptOption long_options[] = {
+@@ -823,6 +825,8 @@ static struct poptOption long_options[] = {
{"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 },
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -443,6 +443,8 @@ detailed description below for a complete description.
+@@ -439,6 +439,8 @@ detailed description below for a complete description.
--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: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int write_devices = 0;
int preserve_links = 0;
int preserve_hard_links = 0;
-@@ -655,6 +656,7 @@ static struct poptOption long_options[] = {
+@@ -656,6 +657,7 @@ static struct poptOption long_options[] = {
{"no-D", 0, POPT_ARG_NONE, 0, OPT_NO_D, 0, 0 },
{"devices", 0, POPT_ARG_VAL, &preserve_devices, 1, 0, 0 },
{"no-devices", 0, POPT_ARG_VAL, &preserve_devices, 0, 0, 0 },
{"write-devices", 0, POPT_ARG_VAL, &write_devices, 1, 0, 0 },
{"no-write-devices", 0, POPT_ARG_VAL, &write_devices, 0, 0, 0 },
{"specials", 0, POPT_ARG_VAL, &preserve_specials, 1, 0, 0 },
-@@ -946,6 +948,7 @@ static void set_refuse_options(void)
+@@ -949,6 +951,7 @@ static void set_refuse_options(void)
|| strcmp("iconv", longName) == 0
|| strcmp("no-iconv", longName) == 0
|| strcmp("checksum-seed", longName) == 0
|| strcmp("write-devices", longName) == 0 /* disable wild-match (it gets refused below) */
|| strcmp("log-format", longName) == 0 /* aka out-format (NOT log-file-format) */
|| strcmp("sender", longName) == 0
-@@ -957,6 +960,7 @@ static void set_refuse_options(void)
+@@ -960,6 +963,7 @@ static void set_refuse_options(void)
assert(list_end != NULL);
if (am_daemon) { /* Refused by default, but can be accepted via a negated exact match. */
parse_one_refuse_match(0, "write-devices", list_end);
}
-@@ -2863,6 +2867,9 @@ void server_options(char **args, int *argc_p)
+@@ -2902,6 +2906,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
-@@ -368,6 +368,7 @@ detailed description below for a complete description.
+@@ -363,6 +363,7 @@ detailed description below for a complete description.
--owner, -o preserve owner (super-user only)
--group, -g preserve group
--devices preserve device files (super-user only)
./configure (optional if already run)
make
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -114,6 +114,7 @@ int safe_symlinks = 0;
+@@ -115,6 +115,7 @@ int safe_symlinks = 0;
int copy_unsafe_links = 0;
int munge_symlinks = 0;
int size_only = 0;
int daemon_bwlimit = 0;
int bwlimit = 0;
int fuzzy_basis = 0;
-@@ -682,6 +683,7 @@ static struct poptOption long_options[] = {
+@@ -683,6 +684,7 @@ static struct poptOption long_options[] = {
{"chmod", 0, POPT_ARG_STRING, 0, OPT_CHMOD, 0, 0 },
{"ignore-times", 'I', POPT_ARG_NONE, &ignore_times, 0, 0, 0 },
{"size-only", 0, POPT_ARG_NONE, &size_only, 0, 0, 0 },
{"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 },
-@@ -2743,6 +2745,9 @@ void server_options(char **args, int *argc_p)
+@@ -2788,6 +2790,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
-@@ -418,6 +418,7 @@ detailed description below for a complete description.
+@@ -413,6 +413,7 @@ detailed description below for a complete description.
--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).
+@@ -673,6 +674,14 @@ your home directory (remove the '=' for that).
after using another mirroring system which may not preserve timestamps
exactly.
./configure
make
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
extern char *shell_cmd;
extern char *password_file;
extern char *backup_dir;
-@@ -1240,6 +1243,9 @@ void start_server(int f_in, int f_out, int argc, char *argv[])
+@@ -1236,6 +1239,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)
-@@ -1530,6 +1536,9 @@ static int start_client(int argc, char *argv[])
+@@ -1526,6 +1532,9 @@ static int start_client(int argc, char *argv[])
else
env_port = rsync_port;
+char *db_config = NULL;
int eol_nulls = 0;
int protect_args = -1;
- int human_readable = 1;
-@@ -108,6 +110,9 @@ int mkpath_dest_arg = 0;
+ int old_style_args = -1;
+@@ -109,6 +111,9 @@ int mkpath_dest_arg = 0;
int allow_inc_recurse = 1;
int xfer_dirs = -1;
int am_daemon = 0;
int connect_timeout = 0;
int keep_partial = 0;
int safe_symlinks = 0;
-@@ -287,6 +292,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
+@@ -288,6 +293,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
DEBUG_WORD(CHDIR, W_CLI|W_SRV, "Debug when the current directory changes"),
DEBUG_WORD(CONNECT, W_CLI, "Debug connection events (levels 1-2)"),
DEBUG_WORD(CMD, W_CLI, "Debug commands+options that are issued (levels 1-2)"),
DEBUG_WORD(DEL, W_REC, "Debug delete actions (levels 1-3)"),
DEBUG_WORD(DELTASUM, W_SND|W_REC, "Debug delta-transfer checksumming (levels 1-4)"),
DEBUG_WORD(DUP, W_REC, "Debug weeding of duplicate names"),
-@@ -576,6 +582,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -577,6 +583,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD,
OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_BLOCK_SIZE,
OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT, OPT_STDERR,
OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS,
OPT_STOP_AFTER, OPT_STOP_AT,
-@@ -732,6 +739,10 @@ static struct poptOption long_options[] = {
+@@ -733,6 +740,10 @@ static struct poptOption long_options[] = {
{"no-c", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 },
{"checksum-choice", 0, POPT_ARG_STRING, &checksum_choice, 0, 0, 0 },
{"cc", 0, POPT_ARG_STRING, &checksum_choice, 0, 0, 0 },
{"block-size", 'B', POPT_ARG_STRING, 0, OPT_BLOCK_SIZE, 0, 0 },
{"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
{"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
-@@ -829,6 +840,9 @@ static struct poptOption long_options[] = {
+@@ -832,6 +843,9 @@ static struct poptOption long_options[] = {
{"dparam", 0, POPT_ARG_STRING, 0, OPT_DAEMON, 0, 0 },
{"detach", 0, POPT_ARG_NONE, 0, OPT_DAEMON, 0, 0 },
{"no-detach", 0, POPT_ARG_NONE, 0, OPT_DAEMON, 0, 0 },
{0,0,0,0, 0, 0, 0}
};
-@@ -857,6 +871,31 @@ static struct poptOption long_daemon_options[] = {
+@@ -860,6 +874,31 @@ static struct poptOption long_daemon_options[] = {
{0,0,0,0, 0, 0, 0}
};
static char err_buf[200];
-@@ -982,6 +1021,8 @@ static void set_refuse_options(void)
+@@ -985,6 +1024,8 @@ static void set_refuse_options(void)
parse_one_refuse_match(0, "iconv", list_end);
#endif
parse_one_refuse_match(0, "log-file*", list_end);
}
#ifndef SUPPORT_ATIMES
-@@ -1289,6 +1330,102 @@ static void create_refuse_error(int which)
+@@ -1292,6 +1333,102 @@ static void create_refuse_error(int which)
snprintf(err_buf + n, sizeof err_buf - n, " (-%c)\n", op->shortName);
}
/* This is used to make sure that --daemon & --server cannot be aliased to
* something else. These options have always disabled popt aliases for the
* parsing of a daemon or server command-line, but we have to make sure that
-@@ -1345,6 +1482,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1348,6 +1485,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
return 0;
}
set_refuse_options();
#ifdef ICONV_OPTION
-@@ -1463,6 +1606,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1466,6 +1609,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
am_daemon = 1;
return 1;
case OPT_MODIFY_WINDOW:
/* The value has already been set by popt, but
* we need to remember that we're using a
-@@ -1535,6 +1684,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1538,6 +1687,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
preserve_devices = preserve_specials = 0;
break;
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -384,6 +384,9 @@ detailed description below for a complete description.
+@@ -379,6 +379,9 @@ detailed description below for a complete description.
--dry-run, -n perform a trial run with no changes made
--whole-file, -W copy files whole (w/o delta-xfer algorithm)
--checksum-choice=STR choose the checksum algorithm (aka --cc)
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -737,7 +737,9 @@ static struct poptOption long_options[] = {
+@@ -738,7 +738,9 @@ static struct poptOption long_options[] = {
{"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
{"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
{"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
{"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 },
-@@ -2724,8 +2726,14 @@ void server_options(char **args, int *argc_p)
+@@ -2774,8 +2776,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
-@@ -422,6 +422,8 @@ detailed description below for a complete description.
+@@ -417,6 +417,8 @@ detailed description below for a complete description.
--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
-@@ -2314,6 +2316,17 @@ your home directory (remove the '=' for that).
+@@ -2332,6 +2334,17 @@ your home directory (remove the '=' for that).
otential alternate-basis files will be removed as the transfer progresses.
This option conflicts with `--inplace` and `--append`.
a file that can't use it, while missing out on giving it to a file
that could use it.
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
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
-@@ -718,7 +718,7 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
+@@ -714,7 +714,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;
int implied_dirs = 1;
int missing_args = 0; /* 0 = FERROR_XFER, 1 = ignore, 2 = delete */
int numeric_ids = 0;
-@@ -736,6 +737,7 @@ static struct poptOption long_options[] = {
+@@ -737,6 +738,7 @@ static struct poptOption long_options[] = {
{"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
{"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
{"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
{"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 },
-@@ -2346,7 +2348,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2356,7 +2358,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
inplace = 1;
}
partial_dir = tmp_partialdir;
if (inplace) {
-@@ -2355,6 +2357,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2365,6 +2367,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;
}
-@@ -2721,6 +2724,8 @@ void server_options(char **args, int *argc_p)
+@@ -2771,6 +2774,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
-@@ -421,6 +421,7 @@ detailed description below for a complete description.
+@@ -416,6 +416,7 @@ detailed description below for a complete description.
--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
-@@ -2297,6 +2298,22 @@ your home directory (remove the '=' for that).
+@@ -2315,6 +2316,22 @@ your home directory (remove the '=' for that).
fuzzy-match files, so either use `--delete-after` or specify some filename
exclusions if you need to prevent this.
./configure (optional if already run)
make
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
extern int module_id;
extern int local_server;
extern int sanitize_paths;
-@@ -757,6 +758,8 @@ static struct poptOption long_options[] = {
+@@ -758,6 +759,8 @@ static struct poptOption long_options[] = {
{"partial-dir", 0, POPT_ARG_STRING, &partial_dir, 0, 0, 0 },
{"delay-updates", 0, POPT_ARG_VAL, &delay_updates, 1, 0, 0 },
{"no-delay-updates", 0, POPT_ARG_VAL, &delay_updates, 0, 0, 0 },
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -409,6 +409,7 @@ detailed description below for a complete description.
+@@ -404,6 +404,7 @@ detailed description below for a complete description.
--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
-@@ -3065,6 +3066,16 @@ your home directory (remove the '=' for that).
+@@ -3087,6 +3088,16 @@ your home directory (remove the '=' for that).
update algorithm that is even more atomic (it uses `--link-dest` and a
parallel hierarchy of files).
./configure (optional if already run)
make
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int open_noatime = 0;
int cvs_exclude = 0;
int dry_run = 0;
-@@ -686,6 +687,7 @@ static struct poptOption long_options[] = {
+@@ -687,6 +688,7 @@ static struct poptOption long_options[] = {
{"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 },
{"update", 'u', POPT_ARG_NONE, &update_only, 0, 0, 0 },
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -347,6 +347,7 @@ detailed description below for a complete description.
+@@ -341,6 +341,7 @@ detailed description below for a complete description.
--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: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
extern int msgs2stderr;
extern int module_id;
extern int read_only;
-@@ -969,6 +973,22 @@ static int do_recv(int f_in, int f_out, char *local_name)
+@@ -965,6 +969,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;
int io_timeout = 0;
int prune_empty_dirs = 0;
int use_qsort = 0;
-@@ -617,6 +619,8 @@ static struct poptOption long_options[] = {
+@@ -618,6 +620,8 @@ static struct poptOption long_options[] = {
{"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 },
{"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 },
-@@ -714,6 +718,12 @@ static struct poptOption long_options[] = {
+@@ -715,6 +719,12 @@ static struct poptOption long_options[] = {
{"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 },
{"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 },
-@@ -1002,6 +1012,14 @@ static void set_refuse_options(void)
+@@ -1005,6 +1015,14 @@ static void set_refuse_options(void)
#ifndef SUPPORT_CRTIMES
parse_one_refuse_match(0, "crtimes", list_end);
#endif
/* Now we use the descrip values to actually mark the options for refusal. */
for (op = long_options; op != list_end; op++) {
-@@ -2607,6 +2625,9 @@ void server_options(char **args, int *argc_p)
+@@ -2670,6 +2688,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;
-@@ -2715,6 +2736,16 @@ void server_options(char **args, int *argc_p)
+@@ -2765,6 +2786,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
-@@ -361,6 +361,7 @@ detailed description below for a complete description.
+@@ -356,6 +356,7 @@ detailed description below for a complete description.
--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)
-@@ -401,7 +402,10 @@ detailed description below for a complete description.
+@@ -396,7 +397,10 @@ detailed description below for a complete description.
--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
-@@ -731,6 +735,7 @@ your home directory (remove the '=' for that).
+@@ -727,6 +731,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`).
The only exception to the above equivalence is when
`--files-from` is specified, in which case `-r` is not implied.
-@@ -1106,7 +1111,7 @@ your home directory (remove the '=' for that).
+@@ -1109,7 +1114,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` for an analogous option for the receiving side.
-@@ -1292,6 +1297,29 @@ your home directory (remove the '=' for that).
+@@ -1295,6 +1300,29 @@ your home directory (remove the '=' for that).
those used by `--fake-super`) unless you repeat the option (e.g. `-XX`).
This "copy all xattrs" mode cannot be used with `--fake-super`.
0. `--chmod=CHMOD`
This option tells rsync to apply one or more comma-separated "chmod" modes
-@@ -1775,7 +1803,7 @@ your home directory (remove the '=' for that).
+@@ -1778,7 +1806,7 @@ your home directory (remove the '=' for that).
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 directory, it will only be
that, this option is independent of any other type of delete processing.
The missing source files are represented by special file-list entries which
-@@ -1786,15 +1814,16 @@ your home directory (remove the '=' for that).
+@@ -1789,15 +1817,16 @@ your home directory (remove the '=' for that).
Tells `--delete` to go ahead and delete files even when there are I/O
errors.
0. `--max-delete=NUM`
-@@ -2753,7 +2782,7 @@ your home directory (remove the '=' for that).
+@@ -2775,7 +2804,7 @@ your home directory (remove the '=' for that).
output of other verbose messages).
The "%i" escape has a cryptic output that is 11 letters long. The general
./configure (optional if already run)
make
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
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
-@@ -1315,7 +1315,9 @@ your home directory (remove the '=' for that).
+@@ -1318,7 +1318,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` and `--executability` options for how the resulting
permission value can be applied to the files in the transfer.
-@@ -2689,6 +2691,10 @@ your home directory (remove the '=' for that).
-
- If your shell complains about the wildcards, use `--protect-args` (`-s`).
+@@ -2711,6 +2713,10 @@ your home directory (remove the '=' for that).
+ complaint about wildcard characters, but a modern rsync handles this
+ automatically.
+ To change ownership of files matching a pattern, use an include filter with
+ a `o` or `g` modifier, which take effect before uid/gid mapping and
0. `--timeout=SECONDS`
This option allows you to set a maximum I/O timeout in seconds. If no data
-@@ -3693,6 +3699,15 @@ The following modifiers are accepted after a "`+`" or "`-`":
+@@ -3715,6 +3721,15 @@ The following modifiers are accepted after a "`+`" or "`-`":
rules that exclude things 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
-@@ -3750,6 +3765,12 @@ The following modifiers are accepted after a merge or dir-merge rule:
+@@ -3772,6 +3787,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`).
int raw_argc, cooked_argc;
char **raw_argv, **cooked_argv;
-@@ -667,6 +673,43 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
+@@ -663,6 +669,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,
-@@ -747,6 +790,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
+@@ -743,6 +786,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) {
-@@ -804,7 +850,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
+@@ -800,7 +846,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
full_fname(dest_path));
exit_cleanup(RERR_FILESELECT);
}
return NULL;
}
-@@ -824,6 +872,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
+@@ -820,6 +868,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
full_fname(dest_path));
exit_cleanup(RERR_FILESELECT);
}
int preserve_perms = 0;
int preserve_fileflags = 0;
int preserve_executability = 0;
-@@ -724,6 +725,10 @@ static struct poptOption long_options[] = {
+@@ -725,6 +726,10 @@ static struct poptOption long_options[] = {
{"no-force-change", 0, POPT_ARG_VAL, &force_change, 0, 0, 0 },
{"force-uchange", 0, POPT_ARG_VAL, &force_change, USR_IMMUTABLE, 0, 0 },
{"force-schange", 0, POPT_ARG_VAL, &force_change, SYS_IMMUTABLE, 0, 0 },
{"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 },
-@@ -1020,6 +1025,10 @@ static void set_refuse_options(void)
+@@ -1023,6 +1028,10 @@ static void set_refuse_options(void)
parse_one_refuse_match(0, "force-uchange", list_end);
parse_one_refuse_match(0, "force-schange", list_end);
#endif
/* Now we use the descrip values to actually mark the options for refusal. */
for (op = long_options; op != list_end; op++) {
-@@ -2082,6 +2091,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2092,6 +2101,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");
-@@ -2628,6 +2646,11 @@ void server_options(char **args, int *argc_p)
+@@ -2691,6 +2709,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
-@@ -366,6 +366,8 @@ detailed description below for a complete description.
+@@ -361,6 +361,8 @@ detailed description below for a complete description.
--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)
-@@ -1320,6 +1322,47 @@ your home directory (remove the '=' for that).
+@@ -1323,6 +1325,47 @@ your home directory (remove the '=' for that).
receiving side. It does not try to affect user flags. This option
overrides `--force-change` and `--force-uchange`.
- Make this code handle multibyte character encodings, and honor the
--iconv setting when converting case.
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -126,6 +126,7 @@ OFF_T max_size = -1;
+@@ -127,6 +127,7 @@ OFF_T max_size = -1;
OFF_T min_size = -1;
int ignore_errors = 0;
int modify_window = 0;
int blocking_io = -1;
int checksum_seed = 0;
int inplace = 0;
-@@ -777,6 +778,8 @@ static struct poptOption long_options[] = {
+@@ -778,6 +779,8 @@ static struct poptOption long_options[] = {
{"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 },
{"only-write-batch", 0, POPT_ARG_STRING, &batch_name, OPT_ONLY_WRITE_BATCH, 0, 0 },
{"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},
-@@ -2756,6 +2759,9 @@ void server_options(char **args, int *argc_p)
+@@ -2801,6 +2804,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 @@ detailed description below for a complete description.
- --from0, -0 all *-from/filter files are delimited by 0s
+@@ -436,6 +436,7 @@ detailed description below for a complete description.
+ --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
+--ignore-case ignore case when comparing filenames
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
-@@ -2245,6 +2246,12 @@ your home directory (remove the '=' for that).
+@@ -2263,6 +2264,12 @@ your home directory (remove the '=' for that).
> sudo rsync -aive lsh -M--copy-as=joe src/ lh:dest/
./configure
make
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
-@@ -1573,7 +1573,7 @@ static int start_client(int argc, char *argv[])
+@@ -1569,7 +1569,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: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -168,6 +168,7 @@ char *backup_suffix = NULL;
+@@ -169,6 +169,7 @@ char *backup_suffix = NULL;
char *tmpdir = NULL;
char *partial_dir = NULL;
char *basis_dir[MAX_BASIS_DIRS+1];
char *config_file = NULL;
char *shell_cmd = NULL;
char *logfile_name = NULL;
-@@ -225,7 +226,7 @@ static const char *debug_verbosity[] = {
+@@ -226,7 +227,7 @@ static const char *debug_verbosity[] = {
/*2*/ "BIND,CMD,CONNECT,DEL,DELTASUM,DUP,FILTER,FLIST,ICONV",
/*3*/ "ACL,BACKUP,CONNECT2,DELTASUM2,DEL2,EXIT,FILTER2,FLIST2,FUZZY,GENR,OWN,RECV,SEND,TIME",
/*4*/ "CMD2,DELTASUM3,DEL3,EXIT2,FLIST3,ICONV2,OWN2,PROTO,TIME2",
};
#define MAX_VERBOSITY ((int)(sizeof debug_verbosity / sizeof debug_verbosity[0]) - 1)
-@@ -296,6 +297,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
+@@ -297,6 +298,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
DEBUG_WORD(FUZZY, W_REC, "Debug fuzzy scoring (levels 1-2)"),
DEBUG_WORD(GENR, W_REC, "Debug generator functions"),
DEBUG_WORD(HASH, W_SND|W_REC, "Debug hashtable code"),
DEBUG_WORD(HLINK, W_SND|W_REC, "Debug hard-link actions (levels 1-3)"),
DEBUG_WORD(ICONV, W_CLI|W_SRV, "Debug iconv character conversions (levels 1-2)"),
DEBUG_WORD(IO, W_CLI|W_SRV, "Debug I/O routines (levels 1-4)"),
-@@ -576,7 +578,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -577,7 +579,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD,
OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_BLOCK_SIZE,
OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS,
OPT_STOP_AFTER, OPT_STOP_AT,
OPT_REFUSED_BASE = 9000};
-@@ -736,6 +738,7 @@ static struct poptOption long_options[] = {
+@@ -737,6 +739,7 @@ static struct poptOption long_options[] = {
{"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
{"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
{"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
{"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 },
-@@ -976,6 +979,9 @@ static void set_refuse_options(void)
+@@ -979,6 +982,9 @@ static void set_refuse_options(void)
ref = cp + 1;
}
if (am_daemon) {
#ifdef ICONV_OPTION
if (!*lp_charset(module_id))
-@@ -1842,6 +1848,20 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1845,6 +1851,20 @@ int parse_arguments(int *argc_p, const char ***argv_p)
return 0;
#endif
case OPT_STOP_AFTER: {
long val;
arg = poptGetOptArg(pc);
-@@ -2198,6 +2218,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2208,6 +2228,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;
-@@ -2838,6 +2860,12 @@ void server_options(char **args, int *argc_p)
+@@ -2877,6 +2899,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
-@@ -424,6 +424,7 @@ detailed description below for a complete description.
+@@ -419,6 +419,7 @@ detailed description below for a complete description.
--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)
-@@ -2381,6 +2382,50 @@ your home directory (remove the '=' for that).
+@@ -2399,6 +2400,50 @@ your home directory (remove the '=' for that).
specified (or implied by `-a`). You can work-around this bug by avoiding
the `-o` option when sending to an old rsync.
fast fallback for the case where xxHash libraries are not available at
build time.
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
./configure (optional if already run)
make
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int one_file_system = 0;
int protocol_version = PROTOCOL_VERSION;
int sparse_files = 0;
-@@ -641,6 +642,7 @@ static struct poptOption long_options[] = {
+@@ -642,6 +643,7 @@ static struct poptOption long_options[] = {
{"omit-link-times", 'J', POPT_ARG_VAL, &omit_link_times, 1, 0, 0 },
{"no-omit-link-times",0, POPT_ARG_VAL, &omit_link_times, 0, 0, 0 },
{"no-J", 0, POPT_ARG_VAL, &omit_link_times, 0, 0, 0 },
{"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 },
-@@ -2267,6 +2269,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2277,6 +2279,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. */
-@@ -2723,6 +2728,8 @@ void server_options(char **args, int *argc_p)
+@@ -2773,6 +2778,8 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--size-only";
if (do_stats)
args[ac++] = "--stats";
+ if (omit_dir_changes)
+ args[ac++] = "--omit-dir-changes";
} else {
- if (skip_compress) {
- if (asprintf(&arg, "--skip-compress=%s", skip_compress) < 0)
+ 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
-@@ -376,6 +376,7 @@ detailed description below for a complete description.
+@@ -371,6 +371,7 @@ detailed description below for a complete description.
--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
-@@ -1445,6 +1446,11 @@ your home directory (remove the '=' for that).
+@@ -1448,6 +1449,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: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -117,6 +117,7 @@ int size_only = 0;
+@@ -118,6 +118,7 @@ int size_only = 0;
int daemon_bwlimit = 0;
int bwlimit = 0;
int fuzzy_basis = 0;
size_t bwlimit_writemax = 0;
int ignore_existing = 0;
int ignore_non_existing = 0;
-@@ -767,6 +768,7 @@ static struct poptOption long_options[] = {
+@@ -768,6 +769,7 @@ static struct poptOption long_options[] = {
{"itemize-changes", 'i', POPT_ARG_NONE, 0, 'i', 0, 0 },
{"no-itemize-changes",0, POPT_ARG_VAL, &itemize_changes, 0, 0, 0 },
{"no-i", 0, POPT_ARG_VAL, &itemize_changes, 0, 0, 0 },
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -459,6 +459,7 @@ detailed description below for a complete description.
+@@ -455,6 +455,7 @@ detailed description below for a complete description.
--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: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
-@@ -1404,6 +1404,22 @@ static int start_client(int argc, char *argv[])
+@@ -1400,6 +1400,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);
./configure (optional if already run)
make
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
-- Matt McCutchen <hashproduct@gmail.com>
-based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
/**
* If 1, send the whole file as literal data rather than trying to
-@@ -770,6 +771,7 @@ static struct poptOption long_options[] = {
+@@ -771,6 +772,7 @@ static struct poptOption long_options[] = {
{"bwlimit", 0, POPT_ARG_STRING, &bwlimit_arg, OPT_BWLIMIT, 0, 0 },
{"no-bwlimit", 0, POPT_ARG_VAL, &bwlimit, 0, 0, 0 },
{"backup", 'b', POPT_ARG_VAL, &make_backups, 1, 0, 0 },
{"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 },
-@@ -2729,6 +2731,8 @@ void server_options(char **args, int *argc_p)
- goto oom;
- args[ac++] = arg;
- }
+@@ -2776,6 +2778,8 @@ void server_options(char **args, int *argc_p)
+ } else {
+ if (skip_compress)
+ args[ac++] = safe_arg("--skip-compress", skip_compress);
+ if (make_source_backups)
+ args[ac++] = "--source-backup";
}
- if (max_alloc_arg && max_alloc != DEFAULT_MAX_ALLOC) {
+ if (max_alloc_arg && max_alloc != DEFAULT_MAX_ALLOC)
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -391,6 +391,7 @@ detailed description below for a complete description.
+@@ -386,6 +386,7 @@ detailed description below for a complete description.
--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
-@@ -1666,6 +1667,16 @@ your home directory (remove the '=' for that).
+@@ -1669,6 +1670,16 @@ 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: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -114,6 +114,7 @@ int safe_symlinks = 0;
+@@ -115,6 +115,7 @@ int safe_symlinks = 0;
int copy_unsafe_links = 0;
int munge_symlinks = 0;
int size_only = 0;
int daemon_bwlimit = 0;
int bwlimit = 0;
int fuzzy_basis = 0;
-@@ -174,6 +175,8 @@ char *logfile_name = NULL;
+@@ -175,6 +176,8 @@ char *logfile_name = NULL;
char *logfile_format = NULL;
char *stdout_format = NULL;
char *password_file = NULL;
char *early_input_file = NULL;
char *rsync_path = RSYNC_PATH;
char *backup_dir = NULL;
-@@ -682,6 +685,7 @@ static struct poptOption long_options[] = {
+@@ -683,6 +686,7 @@ static struct poptOption long_options[] = {
{"chmod", 0, POPT_ARG_STRING, 0, OPT_CHMOD, 0, 0 },
{"ignore-times", 'I', POPT_ARG_NONE, &ignore_times, 0, 0, 0 },
{"size-only", 0, POPT_ARG_NONE, &size_only, 0, 0, 0 },
{"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 },
-@@ -817,6 +821,8 @@ static struct poptOption long_options[] = {
+@@ -820,6 +824,8 @@ static struct poptOption long_options[] = {
{"early-input", 0, POPT_ARG_STRING, &early_input_file, 0, 0, 0 },
{"blocking-io", 0, POPT_ARG_VAL, &blocking_io, 1, 0, 0 },
{"no-blocking-io", 0, POPT_ARG_VAL, &blocking_io, 0, 0, 0 },
{"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 },
-@@ -2390,6 +2396,16 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2400,6 +2406,16 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
}
if (files_from) {
char *h, *p;
int q;
-@@ -2743,6 +2759,25 @@ void server_options(char **args, int *argc_p)
+@@ -2788,6 +2804,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
-@@ -418,6 +418,7 @@ detailed description below for a complete description.
+@@ -413,6 +413,7 @@ detailed description below for a complete description.
--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 @@ detailed description below for a complete description.
+@@ -461,6 +462,8 @@ detailed description below for a complete description.
--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)
-@@ -3336,6 +3339,36 @@ your home directory (remove the '=' for that).
+@@ -3358,6 +3361,36 @@ your home directory (remove the '=' for that).
`--write-batch`. 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: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/fileio.c b/fileio.c
--- a/fileio.c
+++ b/fileio.c
int preallocate_files = 0;
int do_compression = 0;
int do_compression_level = CLVL_NOT_SPECIFIED;
-@@ -695,6 +696,7 @@ static struct poptOption long_options[] = {
+@@ -696,6 +697,7 @@ static struct poptOption long_options[] = {
{"sparse", 'S', POPT_ARG_VAL, &sparse_files, 1, 0, 0 },
{"no-sparse", 0, POPT_ARG_VAL, &sparse_files, 0, 0, 0 },
{"no-S", 0, POPT_ARG_VAL, &sparse_files, 0, 0, 0 },
{"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 },
-@@ -2645,6 +2647,12 @@ void server_options(char **args, int *argc_p)
+@@ -2708,6 +2710,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
-@@ -379,6 +379,7 @@ detailed description below for a complete description.
+@@ -374,6 +374,7 @@ detailed description below for a complete description.
--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
-@@ -1517,6 +1518,18 @@ your home directory (remove the '=' for that).
+@@ -1520,6 +1521,18 @@ your home directory (remove the '=' for that).
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: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -205,6 +205,7 @@ int logfile_format_has_i = 0;
+@@ -206,6 +206,7 @@ int logfile_format_has_i = 0;
int logfile_format_has_o_or_i = 0;
int always_checksum = 0;
int list_only = 0;
#define MAX_BATCH_NAME_LEN 256 /* Must be less than MAXPATHLEN-13 */
char *batch_name = NULL;
-@@ -801,6 +802,7 @@ static struct poptOption long_options[] = {
+@@ -804,6 +805,7 @@ static struct poptOption long_options[] = {
{"temp-dir", 'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 },
{"iconv", 0, POPT_ARG_STRING, &iconv_opt, 0, 0, 0 },
{"no-iconv", 0, POPT_ARG_NONE, 0, OPT_NO_ICONV, 0, 0 },
{"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 },
-@@ -2436,6 +2438,24 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2446,6 +2448,24 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
}
am_starting_up = 0;
return 1;
-@@ -2855,6 +2875,12 @@ void server_options(char **args, int *argc_p)
+@@ -2894,6 +2914,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 @@ detailed description below for a complete description.
+@@ -463,6 +463,7 @@ detailed description below for a complete description.
--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
-@@ -3378,6 +3379,25 @@ your home directory (remove the '=' for that).
+@@ -3400,6 +3401,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: 3e44bbd3132c22f7ce1ae48c0ce262f237473038
+based-on: 6b8db0f6440b28d26ef807d17517715c47e62bd9
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c