./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/acls.c b/acls.c
--- a/acls.c
+++ b/acls.c
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -217,13 +217,6 @@ void setup_protocol(int f_out,int f_in)
+@@ -222,13 +222,6 @@ void setup_protocol(int f_out,int f_in)
if (protocol_version < 30) {
if (append_mode == 1)
append_mode = 2;
Fix a bug that could lose some bits when stripping some (supposedly)
superfluous ACL info.
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/lib/sysacls.c b/lib/sysacls.c
--- a/lib/sysacls.c
+++ b/lib/sysacls.c
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
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
-@@ -687,6 +687,7 @@ void usage(enum logcode F)
+@@ -692,6 +692,7 @@ void usage(enum logcode F)
rprintf(F," -R, --relative use relative path names\n");
rprintf(F," --no-implied-dirs don't send implied dirs with --relative\n");
rprintf(F," -b, --backup make backups (see --suffix & --backup-dir)\n");
rprintf(F," --backup-dir=DIR make backups into hierarchy based in DIR\n");
rprintf(F," --suffix=SUFFIX set backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
rprintf(F," -u, --update skip files that are newer on the receiver\n");
-@@ -1014,7 +1015,8 @@ static struct poptOption long_options[] = {
+@@ -1019,7 +1020,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 },
-@@ -2745,6 +2747,10 @@ void server_options(char **args, int *argc_p)
+@@ -2750,6 +2752,10 @@ void server_options(char **args, int *argc_p)
}
if (am_sender) {
--backup-dir=DIR make backups into hierarchy based in DIR
--suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
-u, --update skip files that are newer on the receiver
-@@ -800,6 +801,11 @@ in the list so that it has a high enough priority to be effective (e.g., if
+@@ -801,6 +802,11 @@ in the list so that it has a high enough priority to be effective (e.g., if
your rules specify a trailing inclusion/exclusion of '*', the auto-added
rule would never be reached).
char *sockopts = NULL;
char *usermap = NULL;
char *groupmap = NULL;
-@@ -690,6 +696,8 @@ void usage(enum logcode F)
+@@ -695,6 +701,8 @@ void usage(enum logcode F)
rprintf(F," --backup-deleted make backups only of deleted files\n");
rprintf(F," --backup-dir=DIR make backups into hierarchy based in DIR\n");
rprintf(F," --suffix=SUFFIX set backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
rprintf(F," -u, --update skip files that are newer on the receiver\n");
rprintf(F," --inplace update destination files in-place (SEE MAN PAGE)\n");
rprintf(F," --append append data onto shorter files\n");
-@@ -1019,7 +1027,9 @@ static struct poptOption long_options[] = {
+@@ -1024,7 +1032,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 },
-@@ -2223,6 +2233,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2227,6 +2237,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;
-@@ -2244,6 +2256,14 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2248,6 +2260,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)
-@@ -2255,6 +2275,20 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2259,6 +2279,20 @@ int parse_arguments(int *argc_p, const char ***argv_p)
backup_suffix);
return 0;
}
if (backup_dir) {
size_t len;
while (*backup_dir == '.' && backup_dir[1] == '/')
-@@ -2290,6 +2324,34 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2294,6 +2328,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 (preserve_times) {
preserve_times = PRESERVE_FILE_TIMES;
-@@ -2731,6 +2793,10 @@ void server_options(char **args, int *argc_p)
+@@ -2736,6 +2798,10 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--backup-dir";
args[ac++] = backup_dir;
}
/* Only send --suffix if it specifies a non-default value. */
if (strcmp(backup_suffix, backup_dir ? "" : BACKUP_SUFFIX) != 0) {
-@@ -2739,6 +2805,14 @@ void server_options(char **args, int *argc_p)
+@@ -2744,6 +2810,14 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/errcode.h b/errcode.h
--- a/errcode.h
+++ b/errcode.h
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
int max_delete = INT_MIN;
OFF_T max_size = -1;
OFF_T min_size = -1;
-@@ -681,6 +682,7 @@ void usage(enum logcode F)
+@@ -686,6 +687,7 @@ void usage(enum logcode F)
rprintf(F," -q, --quiet suppress non-error messages\n");
rprintf(F," --no-motd suppress daemon-mode MOTD (see manpage caveat)\n");
rprintf(F," -c, --checksum skip based on checksum, not mod-time & size\n");
rprintf(F," -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)\n");
rprintf(F," --no-OPTION turn off an implied OPTION (e.g. --no-D)\n");
rprintf(F," -r, --recursive recurse into directories\n");
-@@ -832,7 +834,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -837,7 +839,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
OPT_FILTER, OPT_COMPARE_DEST, OPT_COPY_DEST, OPT_LINK_DEST, OPT_HELP,
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_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
OPT_SERVER, OPT_REFUSED_BASE = 9000};
-@@ -980,6 +982,7 @@ static struct poptOption long_options[] = {
+@@ -985,6 +987,7 @@ static struct poptOption long_options[] = {
{"checksum", 'c', POPT_ARG_VAL, &always_checksum, 1, 0, 0 },
{"no-checksum", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 },
{"no-c", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 },
{"block-size", 'B', POPT_ARG_LONG, &block_size, 0, 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 },
-@@ -1787,6 +1790,23 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1792,6 +1795,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);
-@@ -2068,6 +2088,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2072,6 +2092,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
#endif
Note that rsync always verifies that each em(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
-@@ -660,6 +663,36 @@ option's before-the-transfer "Does this file need to be updated?" check.
- For protocol 30 and beyond (first supported in 3.0.0), the checksum used is
- MD5. For older protocols, the checksum used is MD4.
+@@ -661,6 +664,36 @@ The checksum used is auto-negotiated between the client and the server, but
+ can be overridden using either the bf(--checksum-choice) option or an
+ environment variable that is discussed in that option's section.
+dit(bf(--sumfiles=MODE)) This option tells rsync to make use of any cached
+checksum information it finds in per-directory .rsyncsums files when the
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -1792,7 +1792,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1797,7 +1797,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
case OPT_SUMFILES:
arg = poptGetOptArg(pc);
diff --git a/rsync.yo b/rsync.yo
--- a/rsync.yo
+++ b/rsync.yo
-@@ -672,9 +672,13 @@ computed just as it would be if bf(--sumfiles) was not specified.
+@@ -673,9 +673,13 @@ computed just as it would be if bf(--sumfiles) was not specified.
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: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
+++ b/loadparm.c
int remove_source_files = 0;
int one_file_system = 0;
int protocol_version = PROTOCOL_VERSION;
-@@ -793,6 +795,8 @@ void usage(enum logcode F)
+@@ -798,6 +800,8 @@ void usage(enum logcode F)
rprintf(F," --address=ADDRESS bind address for outgoing socket to daemon\n");
rprintf(F," --port=PORT specify double-colon alternate port number\n");
rprintf(F," --sockopts=OPTIONS specify custom TCP options\n");
rprintf(F," --blocking-io use blocking I/O for the remote shell\n");
rprintf(F," --stats give some file-transfer stats\n");
rprintf(F," -8, --8-bit-output leave high-bit chars unescaped in output\n");
-@@ -1062,6 +1066,8 @@ static struct poptOption long_options[] = {
+@@ -1067,6 +1071,8 @@ static struct poptOption long_options[] = {
#endif
{"remote-option", 'M', POPT_ARG_STRING, 0, 'M', 0, 0 },
{"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 },
{"checksum-seed", 0, POPT_ARG_INT, &checksum_seed, 0, 0, 0 },
{"server", 0, POPT_ARG_NONE, 0, OPT_SERVER, 0, 0 },
{"sender", 0, POPT_ARG_NONE, 0, OPT_SENDER, 0, 0 },
-@@ -1089,6 +1095,8 @@ static void daemon_usage(enum logcode F)
+@@ -1094,6 +1100,8 @@ static void daemon_usage(enum logcode F)
rprintf(F," --log-file=FILE override the \"log file\" setting\n");
rprintf(F," --log-file-format=FMT override the \"log format\" setting\n");
rprintf(F," --sockopts=OPTIONS specify custom TCP options\n");
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
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;
-@@ -714,6 +715,7 @@ void usage(enum logcode F)
+@@ -719,6 +720,7 @@ void usage(enum logcode F)
rprintf(F," -o, --owner preserve owner (super-user only)\n");
rprintf(F," -g, --group preserve group\n");
rprintf(F," --devices preserve device files (super-user only)\n");
rprintf(F," --specials preserve special files\n");
rprintf(F," -D same as --devices --specials\n");
rprintf(F," -t, --times preserve modification times\n");
-@@ -905,6 +907,7 @@ static struct poptOption long_options[] = {
+@@ -910,6 +912,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 },
-@@ -2913,6 +2916,9 @@ void server_options(char **args, int *argc_p)
+@@ -2918,6 +2921,9 @@ void server_options(char **args, int *argc_p)
else if (remove_source_files)
args[ac++] = "--remove-sent-files";
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -51,6 +51,7 @@ extern int protect_args;
+@@ -52,6 +52,7 @@ extern int protect_args;
extern int preserve_uid;
extern int preserve_gid;
extern int preserve_atimes;
extern int preserve_acls;
extern int preserve_xattrs;
extern int preserve_fileflags;
-@@ -70,7 +71,7 @@ extern char *iconv_opt;
- #endif
+@@ -73,7 +74,7 @@ extern char *iconv_opt;
+ extern const char *negotiated_csum_name;
/* These index values are for the file-list's extra-attribute array. */
-int pathname_ndx, depth_ndx, atimes_ndx, uid_ndx, gid_ndx, fileflags_ndx, acls_ndx, xattrs_ndx, unsort_ndx;
int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
int sender_symlink_iconv = 0; /* sender should convert symlink content */
-@@ -150,6 +151,8 @@ void setup_protocol(int f_out,int f_in)
+@@ -155,6 +156,8 @@ void setup_protocol(int f_out,int f_in)
* aligned for direct int64-pointer memory access. */
if (preserve_atimes)
atimes_ndx = (file_extra_cnt += EXTRA64_CNT);
if (am_sender) /* This is most likely in the in64 union as well. */
pathname_ndx = (file_extra_cnt += PTR_EXTRA_CNT);
else
-@@ -303,6 +306,10 @@ void setup_protocol(int f_out,int f_in)
+@@ -320,6 +323,10 @@ void setup_protocol(int f_out,int f_in)
want_xattr_optim = protocol_version >= 31 && !(compat_flags & CF_AVOID_XATTR_OPTIM);
proper_seed_order = compat_flags & CF_CHKSUM_SEED_FIX ? 1 : 0;
xfer_flags_as_varint = compat_flags & CF_VARINT_FLIST_FLAGS ? 1 : 0;
int update_only = 0;
int open_noatime = 0;
int cvs_exclude = 0;
-@@ -582,6 +583,7 @@ static void print_rsync_version(enum logcode f)
- char const *ipv6 = "no ";
- char const *sse2 = "no ";
+@@ -584,6 +585,7 @@ static void print_rsync_version(enum logcode f)
+ char const *simd = "no ";
+ char const *xxhash = "no ";
char const *fileflags = "no ";
+ char const *crtimes = "no ";
STRUCT_STAT *dumstat;
#if SUBPROTOCOL_VERSION != 0
-@@ -624,6 +626,9 @@ static void print_rsync_version(enum logcode f)
+@@ -629,6 +631,9 @@ static void print_rsync_version(enum logcode f)
#ifdef SUPPORT_FILEFLAGS
fileflags = "";
#endif
rprintf(f, "%s version %s protocol version %d%s\n",
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol);
-@@ -639,8 +644,8 @@ static void print_rsync_version(enum logcode f)
+@@ -644,8 +649,8 @@ static void print_rsync_version(enum logcode f)
got_socketpair, hardlinks, links, ipv6, have_inplace);
- rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %ssse2,\n",
- have_inplace, acls, xattrs, iconv, symtimes, prealloc, sse2);
+ rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %sSIMD, %sxxhash,\n",
+ have_inplace, acls, xattrs, iconv, symtimes, prealloc, simd, xxhash);
- rprintf(f, " %sfile-flags\n",
- fileflags);
+ rprintf(f, " %sfile-flags, %scrtimes\n",
#ifdef MAINTAINER_MODE
rprintf(f, "Panic Action: \"%s\"\n", get_panic_action());
-@@ -730,6 +735,9 @@ void usage(enum logcode F)
+@@ -735,6 +740,9 @@ void usage(enum logcode F)
rprintf(F," -t, --times preserve modification times\n");
rprintf(F," -U, --atimes preserve access (last-used) times\n");
rprintf(F," --open-noatime avoid changing the atime on opened files\n");
rprintf(F," -O, --omit-dir-times omit directories from --times\n");
rprintf(F," -J, --omit-link-times omit symlinks from --times\n");
rprintf(F," --super receiver attempts super-user activities\n");
-@@ -905,6 +913,11 @@ static struct poptOption long_options[] = {
+@@ -910,6 +918,11 @@ static struct poptOption long_options[] = {
{"no-U", 0, POPT_ARG_VAL, &preserve_atimes, 0, 0, 0 },
{"open-noatime", 0, POPT_ARG_VAL, &open_noatime, 1, 0, 0 },
{"no-open-noatime", 0, POPT_ARG_VAL, &open_noatime, 0, 0, 0 },
{"omit-dir-times", 'O', POPT_ARG_VAL, &omit_dir_times, 1, 0, 0 },
{"no-omit-dir-times",0, POPT_ARG_VAL, &omit_dir_times, 0, 0, 0 },
{"no-O", 0, POPT_ARG_VAL, &omit_dir_times, 0, 0, 0 },
-@@ -2604,6 +2617,10 @@ void server_options(char **args, int *argc_p)
+@@ -2608,6 +2621,10 @@ void server_options(char **args, int *argc_p)
if (preserve_atimes > 1)
argstr[x++] = 'U';
}
-O, --omit-dir-times omit directories from --times
-J, --omit-link-times omit symlinks from --times
--super receiver attempts super-user activities
-@@ -1289,6 +1290,9 @@ flag then rsync will silently ignore this option. Note also that some
+@@ -1290,6 +1291,9 @@ flag then rsync will silently ignore this option. Note also that some
filesystems are mounted to avoid updating the atime on read access even
without the O_NOATIME flag being set.
dit(bf(-O, --omit-dir-times)) This tells rsync to omit directories when
it is preserving modification times (see bf(--times)). If NFS is sharing
the directories on the receiving side, it is a good idea to use bf(-O).
-@@ -2261,7 +2265,7 @@ with older versions of rsync, but that also turns on the output of other
+@@ -2285,7 +2289,7 @@ with older versions of rsync, but that also turns on the output of other
verbose messages).
The "%i" escape has a cryptic output that is 11 letters long. The general
type of update being done, bf(X) is replaced by the file-type, and the
other letters represent attributes that may be output if they are being
modified.
-@@ -2323,6 +2327,8 @@ quote(itemization(
+@@ -2347,6 +2351,8 @@ quote(itemization(
when a symlink or directory is updated.
it() The bf(a) means that the ACL information changed.
it() The bf(x) means that the extended attribute information changed.
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int daemon_bwlimit = 0;
int bwlimit = 0;
int fuzzy_basis = 0;
-@@ -769,6 +770,7 @@ void usage(enum logcode F)
+@@ -774,6 +775,7 @@ void usage(enum logcode F)
rprintf(F," -I, --ignore-times don't skip files that match in size and mod-time\n");
rprintf(F," -M, --remote-option=OPTION send OPTION to the remote side only\n");
rprintf(F," --size-only skip files that match in size\n");
rprintf(F," -@, --modify-window=NUM set the accuracy for mod-time comparisons\n");
rprintf(F," -T, --temp-dir=DIR create temporary files in directory DIR\n");
rprintf(F," -y, --fuzzy find similar file for basis if no dest file\n");
-@@ -932,6 +934,7 @@ static struct poptOption long_options[] = {
+@@ -937,6 +939,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 },
-@@ -2796,6 +2799,9 @@ void server_options(char **args, int *argc_p)
+@@ -2801,6 +2804,9 @@ void server_options(char **args, int *argc_p)
else if (missing_args == 1 && !am_sender)
args[ac++] = "--ignore-missing-args";
./configure
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
mandir=@mandir@
LIBS=@LIBS@
-@@ -31,7 +32,7 @@ VERSION=@RSYNC_VERSION@
- .SUFFIXES:
- .SUFFIXES: .c .o
+@@ -33,7 +34,7 @@ VERSION=@RSYNC_VERSION@
+
+ SIMD_x86_64=simd-checksum-x86_64.o
-GENFILES=configure.sh aclocal.m4 config.h.in proto.h proto.h-tstamp rsync.1 rsync-ssl.1 rsyncd.conf.5
+GENFILES=configure.sh aclocal.m4 config.h.in proto.h proto.h-tstamp rsync.1 rsync-ssl.1 rsyncdb.1 rsyncd.conf.5
HEADERS=byteorder.h config.h errcode.h proto.h rsync.h ifuncs.h itypes.h inums.h \
lib/pool_alloc.h
LIBOBJ=lib/wildmatch.o lib/compat.o lib/snprintf.o lib/mdfour.o lib/md5.o \
-@@ -41,7 +42,7 @@ zlib_OBJS=zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o \
+@@ -43,7 +44,7 @@ zlib_OBJS=zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o \
OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
util.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 \
- fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
+ fileio.o batch.o clientname.o chmod.o db.o acls.o xattrs.o
OBJS3=progress.o pipe.o
- CXXOBJ=@CXXOBJ@
DAEMON_OBJ = params.o loadparm.o clientserver.o access.o connection.o authenticate.o
-@@ -66,17 +67,20 @@ CHECK_OBJS=tls.o testrun.o getgroups.o getfsdev.o t_stub.o t_unsafe.o trimslash.
+ popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
+@@ -67,17 +68,20 @@ CHECK_OBJS=tls.o testrun.o getgroups.o getfsdev.o t_stub.o t_unsafe.o trimslash.
$(CC) -I. -I$(srcdir) $(CFLAGS) $(CPPFLAGS) -c $< @CC_SHOBJ_FLAG@
@OBJ_RESTORE@
if test -f rsyncd.conf.5; then ${INSTALLMAN} -m 644 rsyncd.conf.5 ${DESTDIR}${mandir}/man5; fi
install-ssl-daemon: stunnel-rsyncd.conf
-@@ -94,6 +98,9 @@ install-strip:
+@@ -95,6 +99,9 @@ install-strip:
rsync$(EXEEXT): $(OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
$(OBJS): $(HEADERS)
$(CHECK_OBJS): $(HEADERS)
options.o: latest-year.h
-@@ -209,10 +216,10 @@ proto.h: proto.h-tstamp
+@@ -210,10 +217,10 @@ proto.h: proto.h-tstamp
proto.h-tstamp: $(srcdir)/*.c $(srcdir)/lib/compat.c config.h
awk -f $(srcdir)/mkproto.awk $(srcdir)/*.c $(srcdir)/lib/compat.c
if test -f $$fn; then \
: ; \
elif test -f $(srcdir)/$$fn; then \
-@@ -231,12 +238,16 @@ rsync-ssl.1: rsync-ssl.yo
+@@ -232,12 +239,16 @@ rsync-ssl.1: rsync-ssl.yo
yodl2man -o rsync-ssl.1 $(srcdir)/rsync-ssl.yo
-$(srcdir)/tweak_manpage rsync-ssl.1
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c
-@@ -24,6 +24,7 @@
+@@ -31,6 +31,7 @@ extern int read_batch;
extern int checksum_seed;
extern int protocol_version;
extern int proper_seed_order;
extern char *checksum_choice;
#define CSUM_NONE 0
-@@ -221,6 +222,8 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -396,6 +397,8 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
md5_update(&m, (uchar *)map_ptr(buf, i, remainder), remainder);
md5_result(&m, (uchar *)sum);
break;
case CSUM_MD4:
case CSUM_MD4_OLD:
-@@ -241,6 +244,8 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -416,6 +419,8 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
mdfour_update(&m, (uchar *)map_ptr(buf, i, remainder), remainder);
mdfour_result(&m, (uchar *)sum);
+ if (use_db)
+ db_set_checksum(4, st_p, sum);
break;
- default:
- rprintf(FERROR, "invalid checksum-choice for the --checksum option (%d)\n", checksum_type);
+ #ifdef SUPPORT_XXHASH
+ case CSUM_XXHASH: {
diff --git a/cleanup.c b/cleanup.c
--- a/cleanup.c
+++ b/cleanup.c
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -367,6 +367,7 @@ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \
+@@ -378,6 +378,7 @@ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \
unistd.h utime.h grp.h compat.h sys/param.h ctype.h sys/wait.h \
sys/ioctl.h sys/filio.h string.h stdlib.h sys/socket.h sys/mode.h \
sys/un.h sys/attr.h mcheck.h arpa/inet.h arpa/nameser.h locale.h \
netdb.h malloc.h float.h limits.h iconv.h libcharset.h langinfo.h \
sys/acl.h acl/libacl.h attr/xattr.h sys/xattr.h sys/extattr.h \
popt.h popt/popt.h linux/falloc.h netinet/in_systm.h netinet/ip.h \
-@@ -1132,6 +1133,48 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x"
+@@ -1155,6 +1156,48 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x"
fi
fi
int connect_timeout = 0;
int keep_partial = 0;
int safe_symlinks = 0;
-@@ -276,6 +281,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
- DEBUG_WORD(CHDIR, W_CLI|W_SRV, "Debug when the current directory changes"),
+@@ -277,6 +282,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
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(CSUM, W_CLI|W_SRV, "Debug checksum negotiation"),
+ DEBUG_WORD(DB, W_SND|W_REC, "Debug DB operations (levels 1-5)"),
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"),
-@@ -579,6 +585,7 @@ static void print_rsync_version(enum logcode f)
- char const *iconv = "no ";
+@@ -581,6 +587,7 @@ static void print_rsync_version(enum logcode f)
char const *ipv6 = "no ";
- char const *sse2 = "no ";
+ char const *simd = "no ";
+ char const *xxhash = "no ";
+ char const *db = "no ";
STRUCT_STAT *dumstat;
#if SUBPROTOCOL_VERSION != 0
-@@ -618,6 +625,12 @@ static void print_rsync_version(enum logcode f)
- #ifdef ENABLE_SSE2
- sse2 = "";
+@@ -623,6 +630,12 @@ static void print_rsync_version(enum logcode f)
+ #ifdef SUPPORT_XXHASH
+ xxhash = "";
#endif
+#if defined HAVE_MYSQL_MYSQL_H && defined HAVE_LIBMYSQLCLIENT
+ db = "";
rprintf(f, "%s version %s protocol version %d%s\n",
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol);
-@@ -631,8 +644,10 @@ static void print_rsync_version(enum logcode f)
+@@ -636,8 +649,10 @@ static void print_rsync_version(enum logcode f)
(int)(sizeof (int64) * 8));
rprintf(f, " %ssocketpairs, %shardlinks, %ssymlinks, %sIPv6, batchfiles, %sinplace,\n",
got_socketpair, hardlinks, links, ipv6, have_inplace);
-- rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %ssse2\n",
-+ rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %ssse2,\n",
- have_inplace, acls, xattrs, iconv, symtimes, prealloc, sse2);
-+ rprintf(f, " %sdb\n",
+- rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %sSIMD, %sxxhash\n",
++ rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %sSIMD, %sxxhash,\n",
+ have_inplace, acls, xattrs, iconv, symtimes, prealloc, simd, xxhash);
++ rprintf(f, " %sDB\n",
+ db);
#ifdef MAINTAINER_MODE
rprintf(f, "Panic Action: \"%s\"\n", get_panic_action());
-@@ -681,6 +696,9 @@ void usage(enum logcode F)
+@@ -686,6 +701,9 @@ void usage(enum logcode F)
rprintf(F," -q, --quiet suppress non-error messages\n");
rprintf(F," --no-motd suppress daemon-mode MOTD (see manpage caveat)\n");
rprintf(F," -c, --checksum skip based on checksum, not mod-time & size\n");
rprintf(F," -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)\n");
rprintf(F," --no-OPTION turn off an implied OPTION (e.g. --no-D)\n");
rprintf(F," -r, --recursive recurse into directories\n");
-@@ -833,6 +851,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -838,6 +856,7 @@ enum {OPT_VERSION = 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_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
OPT_SERVER, OPT_REFUSED_BASE = 9000};
-@@ -980,6 +999,10 @@ static struct poptOption long_options[] = {
+@@ -985,6 +1004,10 @@ static struct poptOption long_options[] = {
{"checksum", 'c', POPT_ARG_VAL, &always_checksum, 1, 0, 0 },
{"no-checksum", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 },
{"no-c", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 },
{"block-size", 'B', POPT_ARG_LONG, &block_size, 0, 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 },
-@@ -1071,6 +1094,9 @@ static struct poptOption long_options[] = {
+@@ -1076,6 +1099,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}
};
-@@ -1124,6 +1150,50 @@ static struct poptOption long_daemon_options[] = {
+@@ -1129,6 +1155,50 @@ static struct poptOption long_daemon_options[] = {
{0,0,0,0, 0, 0, 0}
};
static char err_buf[200];
-@@ -1247,6 +1317,8 @@ static void set_refuse_options(void)
+@@ -1252,6 +1322,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);
}
/* Now we use the descrip values to actually mark the options for refusal. */
-@@ -1371,6 +1443,102 @@ static void create_refuse_error(int which)
+@@ -1376,6 +1448,102 @@ static void create_refuse_error(int which)
}
}
/* 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
-@@ -1409,6 +1577,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1414,6 +1582,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
return 0;
}
set_refuse_options();
#ifdef ICONV_OPTION
-@@ -1530,6 +1704,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1535,6 +1709,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
-@@ -1604,6 +1784,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1609,6 +1789,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
preserve_devices = preserve_specials = 0;
break;
#define NDX_DONE -1
#define NDX_FLIST_EOF -2
#define NDX_DEL_STATS -3
-@@ -1317,7 +1321,8 @@ extern short info_levels[], debug_levels[];
- #define DEBUG_CHDIR (DEBUG_BIND+1)
+@@ -1318,7 +1322,8 @@ extern short info_levels[], debug_levels[];
#define DEBUG_CONNECT (DEBUG_CHDIR+1)
#define DEBUG_CMD (DEBUG_CONNECT+1)
--#define DEBUG_DEL (DEBUG_CMD+1)
-+#define DEBUG_DB (DEBUG_CMD+1)
+ #define DEBUG_CSUM (DEBUG_CMD+1)
+-#define DEBUG_DEL (DEBUG_CSUM+1)
++#define DEBUG_DB (DEBUG_CSUM+1)
+#define DEBUG_DEL (DEBUG_DB+1)
#define DEBUG_DELTASUM (DEBUG_DEL+1)
#define DEBUG_DUP (DEBUG_DELTASUM+1)
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
--no-OPTION turn off an implied OPTION (e.g. --no-D)
-r, --recursive recurse into directories
-@@ -660,6 +663,67 @@ option's before-the-transfer "Does this file need to be updated?" check.
- For protocol 30 and beyond (first supported in 3.0.0), the checksum used is
- MD5. For older protocols, the checksum used is MD4.
+@@ -661,6 +664,67 @@ The checksum used is auto-negotiated between the client and the server, but
+ can be overridden using either the bf(--checksum-choice) option or an
+ environment variable that is discussed in that option's section.
+dit(bf(--db=CONFIG_FILE)) This option specifies a CONFIG_FILE to read
+that holds connection details for a database of checksum information.
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -774,6 +774,8 @@ void usage(enum logcode F)
+@@ -779,6 +779,8 @@ void usage(enum logcode F)
rprintf(F," -T, --temp-dir=DIR create temporary files in directory DIR\n");
rprintf(F," -y, --fuzzy find similar file for basis if no dest file\n");
rprintf(F," --detect-renamed try to find renamed files to speed up the transfer\n");
rprintf(F," --compare-dest=DIR also compare destination files relative to DIR\n");
rprintf(F," --copy-dest=DIR ... and include copies of unchanged files\n");
rprintf(F," --link-dest=DIR hardlink to files in DIR when unchanged\n");
-@@ -986,7 +988,9 @@ static struct poptOption long_options[] = {
+@@ -991,7 +993,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 },
-@@ -2783,8 +2787,14 @@ void server_options(char **args, int *argc_p)
+@@ -2788,8 +2792,14 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
--compare-dest=DIR also compare received files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-@@ -1963,6 +1965,17 @@ the bf(--partial-dir) option, that directory will be used instead. These
+@@ -1987,6 +1989,17 @@ the bf(--partial-dir) option, that directory will be used instead. These
potential alternate-basis files will be removed as the transfer progresses.
This option conflicts with bf(--inplace) and bf(--append).
a file that can't use it, while missing out on giving it to a file
that could use it.
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/backup.c b/backup.c
--- a/backup.c
+++ b/backup.c
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -46,6 +46,7 @@ extern int checksum_seed;
+@@ -47,6 +47,7 @@ extern int checksum_seed;
extern int basis_dir_cnt;
extern int prune_empty_dirs;
extern int protocol_version;
extern int protect_args;
extern int preserve_uid;
extern int preserve_gid;
-@@ -132,6 +133,7 @@ void set_allow_inc_recurse(void)
+@@ -135,6 +136,7 @@ void set_allow_inc_recurse(void)
allow_inc_recurse = 0;
else if (!am_sender
&& (delete_before || delete_after
int implied_dirs = 1;
int missing_args = 0; /* 0 = FERROR_XFER, 1 = ignore, 2 = delete */
int numeric_ids = 0;
-@@ -772,6 +773,7 @@ void usage(enum logcode F)
+@@ -777,6 +778,7 @@ void usage(enum logcode F)
rprintf(F," -@, --modify-window=NUM set the accuracy for mod-time comparisons\n");
rprintf(F," -T, --temp-dir=DIR create temporary files in directory DIR\n");
rprintf(F," -y, --fuzzy find similar file for basis if no dest file\n");
rprintf(F," --compare-dest=DIR also compare destination files relative to DIR\n");
rprintf(F," --copy-dest=DIR ... and include copies of unchanged files\n");
rprintf(F," --link-dest=DIR hardlink to files in DIR when unchanged\n");
-@@ -984,6 +986,7 @@ static struct poptOption long_options[] = {
+@@ -989,6 +991,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 },
-@@ -2380,7 +2383,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2384,7 +2387,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
inplace = 1;
}
partial_dir = tmp_partialdir;
if (inplace) {
-@@ -2389,6 +2392,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2393,6 +2396,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;
}
-@@ -2779,6 +2783,8 @@ void server_options(char **args, int *argc_p)
+@@ -2784,6 +2788,8 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
--compare-dest=DIR also compare received files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-@@ -1947,6 +1948,21 @@ Note that the use of the bf(--delete) option might get rid of any potential
+@@ -1971,6 +1972,21 @@ Note that the use of the bf(--delete) option might get rid of any potential
fuzzy-match files, so either use bf(--delete-after) or specify some
filename exclusions if you need to prevent this.
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
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;
-@@ -759,6 +760,7 @@ void usage(enum logcode F)
+@@ -764,6 +765,7 @@ void usage(enum logcode F)
rprintf(F," --partial keep partially transferred files\n");
rprintf(F," --partial-dir=DIR put a partially transferred file into DIR\n");
rprintf(F," --delay-updates put all updated files into place at transfer's end\n");
rprintf(F," -m, --prune-empty-dirs prune empty directory chains from the file-list\n");
rprintf(F," --numeric-ids don't map uid/gid values by user/group name\n");
rprintf(F," --usermap=STRING custom username mapping\n");
-@@ -1002,6 +1004,8 @@ static struct poptOption long_options[] = {
+@@ -1007,6 +1009,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 },
-m, --prune-empty-dirs prune empty directory chains from file-list
--numeric-ids don't map uid/gid values by user/group name
--usermap=STRING custom username mapping
-@@ -2533,6 +2534,14 @@ See also the "atomic-rsync" perl script in the "support" subdir for an
+@@ -2557,6 +2558,14 @@ See also the "atomic-rsync" perl script in the "support" subdir for an
update algorithm that is even more atomic (it uses bf(--link-dest) and a
parallel hierarchy of files).
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int update_only = 0;
int open_noatime = 0;
int cvs_exclude = 0;
-@@ -690,6 +691,7 @@ void usage(enum logcode F)
+@@ -695,6 +696,7 @@ void usage(enum logcode F)
rprintf(F," --backup-dir=DIR make backups into hierarchy based in DIR\n");
rprintf(F," --suffix=SUFFIX set backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
rprintf(F," -u, --update skip files that are newer on the receiver\n");
rprintf(F," --inplace update destination files in-place (SEE MAN PAGE)\n");
rprintf(F," --append append data onto shorter files\n");
rprintf(F," --append-verify like --append, but with old data in file checksum\n");
-@@ -936,6 +938,7 @@ static struct poptOption long_options[] = {
+@@ -941,6 +943,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 },
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -46,12 +46,14 @@ extern int checksum_seed;
+@@ -47,12 +47,14 @@ extern int checksum_seed;
extern int basis_dir_cnt;
extern int prune_empty_dirs;
extern int protocol_version;
extern int xfer_flags_as_varint;
extern int need_messages_from_generator;
extern int delete_mode, delete_before, delete_during, delete_after;
-@@ -68,7 +70,7 @@ extern char *iconv_opt;
- #endif
+@@ -71,7 +73,7 @@ extern char *iconv_opt;
+ extern const char *negotiated_csum_name;
/* These index values are for the file-list's extra-attribute array. */
-int pathname_ndx, depth_ndx, atimes_ndx, uid_ndx, gid_ndx, acls_ndx, xattrs_ndx, unsort_ndx;
int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
int sender_symlink_iconv = 0; /* sender should convert symlink content */
-@@ -156,6 +158,8 @@ void setup_protocol(int f_out,int f_in)
+@@ -161,6 +163,8 @@ void setup_protocol(int f_out,int f_in)
uid_ndx = ++file_extra_cnt;
if (preserve_gid)
gid_ndx = ++file_extra_cnt;
if (preserve_acls && !am_sender)
acls_ndx = ++file_extra_cnt;
if (preserve_xattrs)
-@@ -299,6 +303,10 @@ void setup_protocol(int f_out,int f_in)
+@@ -316,6 +320,10 @@ void setup_protocol(int f_out,int f_in)
want_xattr_optim = protocol_version >= 31 && !(compat_flags & CF_AVOID_XATTR_OPTIM);
proper_seed_order = compat_flags & CF_CHKSUM_SEED_FIX ? 1 : 0;
xfer_flags_as_varint = compat_flags & CF_VARINT_FLIST_FLAGS ? 1 : 0;
int io_timeout = 0;
int prune_empty_dirs = 0;
int use_qsort = 0;
-@@ -579,6 +581,7 @@ static void print_rsync_version(enum logcode f)
- char const *iconv = "no ";
+@@ -581,6 +583,7 @@ static void print_rsync_version(enum logcode f)
char const *ipv6 = "no ";
- char const *sse2 = "no ";
+ char const *simd = "no ";
+ char const *xxhash = "no ";
+ char const *fileflags = "no ";
STRUCT_STAT *dumstat;
#if SUBPROTOCOL_VERSION != 0
-@@ -618,6 +621,9 @@ static void print_rsync_version(enum logcode f)
- #ifdef ENABLE_SSE2
- sse2 = "";
+@@ -623,6 +626,9 @@ static void print_rsync_version(enum logcode f)
+ #ifdef SUPPORT_XXHASH
+ xxhash = "";
#endif
+#ifdef SUPPORT_FILEFLAGS
+ fileflags = "";
rprintf(f, "%s version %s protocol version %d%s\n",
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol);
-@@ -631,8 +637,10 @@ static void print_rsync_version(enum logcode f)
+@@ -636,8 +642,10 @@ static void print_rsync_version(enum logcode f)
(int)(sizeof (int64) * 8));
rprintf(f, " %ssocketpairs, %shardlinks, %ssymlinks, %sIPv6, batchfiles, %sinplace,\n",
got_socketpair, hardlinks, links, ipv6, have_inplace);
-- rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %ssse2\n",
-+ rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %ssse2,\n",
- have_inplace, acls, xattrs, iconv, symtimes, prealloc, sse2);
+- rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %sSIMD, %sxxhash\n",
++ rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %sSIMD, %sxxhash,\n",
+ have_inplace, acls, xattrs, iconv, symtimes, prealloc, simd, xxhash);
+ rprintf(f, " %sfile-flags\n",
+ fileflags);
#ifdef MAINTAINER_MODE
rprintf(f, "Panic Action: \"%s\"\n", get_panic_action());
-@@ -703,6 +711,9 @@ void usage(enum logcode F)
+@@ -708,6 +716,9 @@ void usage(enum logcode F)
rprintf(F," -K, --keep-dirlinks treat symlinked dir on receiver as dir\n");
rprintf(F," -H, --hard-links preserve hard links\n");
rprintf(F," -p, --perms preserve permissions\n");
rprintf(F," -E, --executability preserve the file's executability\n");
rprintf(F," --chmod=CHMOD affect file and/or directory permissions\n");
#ifdef SUPPORT_ACLS
-@@ -752,7 +763,12 @@ void usage(enum logcode F)
+@@ -757,7 +768,12 @@ void usage(enum logcode F)
rprintf(F," --ignore-missing-args ignore missing source args without error\n");
rprintf(F," --delete-missing-args delete missing source args from destination\n");
rprintf(F," --ignore-errors delete even if there are I/O errors\n");
rprintf(F," --max-delete=NUM don't delete more than NUM files\n");
rprintf(F," --max-size=SIZE don't transfer any file larger than SIZE\n");
rprintf(F," --min-size=SIZE don't transfer any file smaller than SIZE\n");
-@@ -870,6 +886,10 @@ static struct poptOption long_options[] = {
+@@ -875,6 +891,10 @@ 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 },
-@@ -963,6 +983,14 @@ static struct poptOption long_options[] = {
+@@ -968,6 +988,14 @@ 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 },
-@@ -2680,6 +2708,9 @@ void server_options(char **args, int *argc_p)
+@@ -2685,6 +2713,9 @@ void server_options(char **args, int *argc_p)
if (xfer_dirs && !recurse && delete_mode && am_sender)
args[ac++] = "--no-r";
if (do_compression && def_compress_level != Z_DEFAULT_COMPRESSION) {
if (asprintf(&arg, "--compress-level=%d", def_compress_level) < 0)
goto oom;
-@@ -2773,6 +2804,16 @@ void server_options(char **args, int *argc_p)
+@@ -2778,6 +2809,16 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--delete-excluded";
if (force_delete)
args[ac++] = "--force";
--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
-@@ -668,7 +672,8 @@ specified, in which case bf(-r) is not implied.
+@@ -669,7 +673,8 @@ specified, in which case bf(-r) is not implied.
Note that bf(-a) bf(does not preserve hardlinks), because
finding multiply-linked files is expensive. You must separately
dit(--no-OPTION) You may turn off one or more implied options by prefixing
the option name with "no-". Not all options may be prefixed with a "no-":
-@@ -981,7 +986,7 @@ they would be using bf(--copy-links).
+@@ -982,7 +987,7 @@ they would be using bf(--copy-links).
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 bf(--keep-dirlinks) for an analogous option for the receiving
side.
-@@ -1165,6 +1170,29 @@ Note that the bf(-X) option does not copy rsync's special xattr values (e.g.
+@@ -1166,6 +1171,29 @@ Note that the bf(-X) option does not copy rsync's special xattr values (e.g.
those used by bf(--fake-super)) unless you repeat the option (e.g. -XX).
This "copy all xattrs" mode cannot be used with bf(--fake-super).
dit(bf(--chmod)) This option tells rsync to apply one or more
comma-separated "chmod" modes to the permission of the files in the
transfer. The resulting value is treated as though it were the permissions
-@@ -1549,12 +1577,13 @@ display as a "*missing" entry in the bf(--list-only) output.
+@@ -1573,12 +1601,13 @@ display as a "*missing" entry in the bf(--list-only) output.
dit(bf(--ignore-errors)) Tells bf(--delete) to go ahead and delete files
even when there are I/O errors.
bf(--recursive) option was also enabled.
dit(bf(--max-delete=NUM)) This tells rsync not to delete more than NUM
-@@ -2232,7 +2261,7 @@ with older versions of rsync, but that also turns on the output of other
+@@ -2256,7 +2285,7 @@ with older versions of rsync, but that also turns on the 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: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
diff --git a/rsync.yo b/rsync.yo
--- a/rsync.yo
+++ b/rsync.yo
-@@ -1187,6 +1187,8 @@ quote(--chmod=D2775,F664)
+@@ -1188,6 +1188,8 @@ quote(--chmod=D2775,F664)
It is also legal to specify multiple bf(--chmod) options, as each
additional option is just appended to the list of changes to make.
See the bf(--perms) and bf(--executability) options for how the resulting
permission value can be applied to the files in the transfer.
-@@ -2182,6 +2184,10 @@ be omitted, but if USER is empty, a leading colon must be supplied.
+@@ -2206,6 +2208,10 @@ be omitted, but if USER is empty, a leading colon must be supplied.
If you specify "--chown=foo:bar, this is exactly the same as specifying
"--usermap=*:foo --groupmap=*:bar", only easier.
dit(bf(--timeout=TIMEOUT)) This option allows you to set a maximum I/O
timeout in seconds. If no data is transferred for the specified time
then rsync will exit. The default is 0, which means no timeout.
-@@ -3076,6 +3082,15 @@ itemization(
+@@ -3100,6 +3106,15 @@ itemization(
option's default 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.
it() An bf(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
-@@ -3141,6 +3156,12 @@ itemization(
+@@ -3165,6 +3180,12 @@ itemization(
a rule prefix such as bf(hide)).
)
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
int ignore_times = 0;
int delete_mode = 0;
int delete_during = 0;
-@@ -760,6 +761,7 @@ void usage(enum logcode F)
+@@ -765,6 +766,7 @@ void usage(enum logcode F)
rprintf(F," --partial-dir=DIR put a partially transferred file into DIR\n");
rprintf(F," --delay-updates put all updated files into place at transfer's end\n");
rprintf(F," -m, --prune-empty-dirs prune empty directory chains from the file-list\n");
rprintf(F," --numeric-ids don't map uid/gid values by user/group name\n");
rprintf(F," --usermap=STRING custom username mapping\n");
rprintf(F," --groupmap=STRING custom groupname mapping\n");
-@@ -1037,6 +1039,7 @@ static struct poptOption long_options[] = {
+@@ -1042,6 +1044,7 @@ static struct poptOption long_options[] = {
{"no-timeout", 0, POPT_ARG_VAL, &io_timeout, 0, 0, 0 },
{"contimeout", 0, POPT_ARG_INT, &connect_timeout, 0, 0, 0 },
{"no-contimeout", 0, POPT_ARG_VAL, &connect_timeout, 0, 0, 0 },
{"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 },
{"rsync-path", 0, POPT_ARG_STRING, &rsync_path, 0, 0, 0 },
{"temp-dir", 'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 },
-@@ -2859,6 +2862,9 @@ void server_options(char **args, int *argc_p)
+@@ -2864,6 +2867,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = tmpdir;
}
int preserve_perms = 0;
int preserve_fileflags = 0;
int preserve_executability = 0;
-@@ -726,6 +727,10 @@ void usage(enum logcode F)
+@@ -731,6 +732,10 @@ void usage(enum logcode F)
#endif
#ifdef SUPPORT_XATTRS
rprintf(F," -X, --xattrs preserve extended attributes\n");
#endif
rprintf(F," -o, --owner preserve owner (super-user only)\n");
rprintf(F," -g, --group preserve group\n");
-@@ -1003,6 +1008,12 @@ static struct poptOption long_options[] = {
+@@ -1008,6 +1013,12 @@ 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 },
#endif
{"ignore-errors", 0, POPT_ARG_VAL, &ignore_errors, 1, 0, 0 },
{"no-ignore-errors", 0, POPT_ARG_VAL, &ignore_errors, 0, 0, 0 },
-@@ -2109,6 +2120,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2113,6 +2124,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
#endif
if (block_size) {
/* We may not know the real protocol_version at this point if this is the client
* option parsing, but we still want to check it so that the client can specify
-@@ -2728,6 +2748,11 @@ void server_options(char **args, int *argc_p)
+@@ -2733,6 +2753,11 @@ void server_options(char **args, int *argc_p)
if (preserve_fileflags)
args[ac++] = "--fileflags";
-o, --owner preserve owner (super-user only)
-g, --group preserve group
--devices preserve device files (super-user only)
-@@ -1194,6 +1196,42 @@ flags on files and directories that are being updated or deleted on the
+@@ -1195,6 +1197,42 @@ flags on files and directories that are being updated or deleted on the
receiving side. It does not try to affect user flags. This option overrides
bf(--force-change) and bf(--force-uchange).
- Make this code handle multibyte character encodings, and honor the
--iconv setting when converting case.
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
int blocking_io = -1;
int checksum_seed = 0;
int inplace = 0;
-@@ -790,6 +791,7 @@ void usage(enum logcode F)
+@@ -795,6 +796,7 @@ void usage(enum logcode F)
rprintf(F," -0, --from0 all *-from/filter files are delimited by 0s\n");
rprintf(F," -s, --protect-args no space-splitting; only wildcard special-chars\n");
rprintf(F," --copy-as=USER[:GROUP] specify user & optional group for the copy\n");
rprintf(F," --address=ADDRESS bind address for outgoing socket to daemon\n");
rprintf(F," --port=PORT specify double-colon alternate port number\n");
rprintf(F," --sockopts=OPTIONS specify custom TCP options\n");
-@@ -1022,6 +1024,8 @@ static struct poptOption long_options[] = {
+@@ -1027,6 +1029,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},
-@@ -2809,6 +2813,9 @@ void server_options(char **args, int *argc_p)
+@@ -2814,6 +2818,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
-@@ -1898,6 +1899,10 @@ available to that user, and makes it impossible for the joe user to do a timed
+@@ -1922,6 +1923,10 @@ available to that user, and makes it impossible for the joe user to do a timed
exploit of the path to induce a change to a file that the joe user has no
permissions to change.
./configure
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
-@@ -42,7 +42,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
+@@ -44,7 +44,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
util.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 \
fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
-OBJS3=progress.o pipe.o
+OBJS3=progress.o pipe.o gss-auth.o
- CXXOBJ=@CXXOBJ@
DAEMON_OBJ = params.o loadparm.o clientserver.o access.o connection.o authenticate.o
popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
+ popt/popthelp.o popt/poptparse.o
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -722,6 +722,31 @@ if test x"$enable_iconv" != x"no"; then
+@@ -745,6 +745,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
./configure
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
-@@ -42,7 +42,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
+@@ -44,7 +44,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
util.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 \
fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
-OBJS3=progress.o pipe.o
+OBJS3=progress.o pipe.o hashlink.o
- CXXOBJ=@CXXOBJ@
DAEMON_OBJ = params.o loadparm.o clientserver.o access.o connection.o authenticate.o
popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
+ popt/popthelp.o popt/poptparse.o
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c
-@@ -21,9 +21,12 @@
-
- #include "rsync.h"
-
+@@ -28,9 +28,12 @@ extern int am_server;
+ extern int local_server;
+ extern int whole_file;
+ extern int read_batch;
+extern int checksum_len;
extern int checksum_seed;
extern int protocol_version;
extern char *checksum_choice;
#define CSUM_NONE 0
-@@ -252,7 +255,7 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -455,7 +458,7 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
}
static int32 sumresidue;
-static md_context md;
+static md_context md, md2;
static int cursum_type;
-
- void sum_init(int csum_type, int seed)
-@@ -266,6 +269,8 @@ void sum_init(int csum_type, int seed)
+ #ifdef SUPPORT_XXHASH
+ XXH64_state_t* xxh64_state = NULL;
+@@ -472,6 +475,8 @@ void sum_init(int csum_type, int seed)
switch (csum_type) {
case CSUM_MD5:
md5_begin(&md);
break;
case CSUM_MD4:
mdfour_begin(&md);
-@@ -299,6 +304,8 @@ void sum_update(const char *p, int32 len)
+@@ -518,6 +523,8 @@ void sum_update(const char *p, int32 len)
switch (cursum_type) {
case CSUM_MD5:
md5_update(&md, (uchar *)p, len);
break;
case CSUM_MD4:
case CSUM_MD4_OLD:
-@@ -344,6 +351,8 @@ int sum_end(char *sum)
+@@ -571,6 +578,8 @@ int sum_end(char *sum)
switch (cursum_type) {
case CSUM_MD5:
md5_result(&md, (uchar *)sum);
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -60,6 +60,7 @@ extern char *partial_dir;
- extern char *dest_option;
+@@ -62,6 +62,7 @@ extern char *dest_option;
extern char *files_from;
extern char *filesfrom_host;
+ extern char *checksum_choice;
+extern char *link_by_hash_dir;
extern filter_rule_list filter_list;
extern int need_unsorted_flist;
};
#define MAX_VERBOSITY ((int)(sizeof debug_verbosity / sizeof debug_verbosity[0]) - 1)
-@@ -285,6 +286,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
+@@ -286,6 +287,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)"),
-@@ -775,6 +777,7 @@ void usage(enum logcode F)
+@@ -780,6 +782,7 @@ void usage(enum logcode F)
rprintf(F," --compare-dest=DIR also compare destination files relative to DIR\n");
rprintf(F," --copy-dest=DIR ... and include copies of unchanged files\n");
rprintf(F," --link-dest=DIR hardlink to files in DIR when unchanged\n");
rprintf(F," -z, --compress compress file data during the transfer\n");
rprintf(F," --compress-level=NUM explicitly set compression level\n");
rprintf(F," --skip-compress=LIST skip compressing files with a suffix in LIST\n");
-@@ -832,7 +835,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -837,7 +840,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
OPT_FILTER, OPT_COMPARE_DEST, OPT_COPY_DEST, OPT_LINK_DEST, OPT_HELP,
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_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
OPT_SERVER, OPT_REFUSED_BASE = 9000};
-@@ -984,6 +987,7 @@ static struct poptOption long_options[] = {
+@@ -989,6 +992,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 },
-@@ -1416,6 +1420,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1421,6 +1425,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
iconv_opt = strdup(arg);
#endif
/* TODO: Call poptReadDefaultConfig; handle errors. */
/* The context leaks in case of an error, but if there's a
-@@ -1899,6 +1906,21 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1904,6 +1911,21 @@ int parse_arguments(int *argc_p, const char ***argv_p)
return 0;
#endif
default:
/* A large opt value means that set_refuse_options()
* turned this option off. */
-@@ -2221,6 +2243,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2225,6 +2247,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;
-@@ -2888,6 +2912,12 @@ void server_options(char **args, int *argc_p)
+@@ -2893,6 +2917,12 @@ void server_options(char **args, int *argc_p)
} else if (inplace)
args[ac++] = "--inplace";
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -1326,7 +1326,8 @@ extern short info_levels[], debug_levels[];
+@@ -1327,7 +1327,8 @@ extern short info_levels[], debug_levels[];
#define DEBUG_FUZZY (DEBUG_FLIST+1)
#define DEBUG_GENR (DEBUG_FUZZY+1)
#define DEBUG_HASH (DEBUG_GENR+1)
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
--skip-compress=LIST skip compressing files with suffix in LIST
-@@ -2028,6 +2029,48 @@ bf(--link-dest) from working properly for a non-super-user when bf(-o) was
+@@ -2052,6 +2053,48 @@ bf(--link-dest) from working properly for a non-super-user when bf(-o) was
specified (or implied by bf(-a)). You can work-around this bug by avoiding
the bf(-o) option when sending to an old rsync.
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/authenticate.c b/authenticate.c
--- a/authenticate.c
+++ b/authenticate.c
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/access.c b/access.c
--- a/access.c
+++ b/access.c
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
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;
-@@ -721,6 +722,7 @@ void usage(enum logcode F)
+@@ -726,6 +727,7 @@ void usage(enum logcode F)
rprintf(F," --open-noatime avoid changing the atime on opened files\n");
rprintf(F," -O, --omit-dir-times omit directories from --times\n");
rprintf(F," -J, --omit-link-times omit symlinks from --times\n");
rprintf(F," --super receiver attempts super-user activities\n");
#ifdef SUPPORT_XATTRS
rprintf(F," --fake-super store/recover privileged attrs using xattrs\n");
-@@ -891,6 +893,7 @@ static struct poptOption long_options[] = {
+@@ -896,6 +898,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 },
-@@ -2289,6 +2292,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2293,6 +2296,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
parse_filter_str(&filter_list, backup_dir_buf, rule_template(0), 0);
}
if (preserve_times) {
preserve_times = PRESERVE_FILE_TIMES;
if (!omit_dir_times)
-@@ -2540,6 +2546,8 @@ void server_options(char **args, int *argc_p)
+@@ -2544,6 +2550,8 @@ void server_options(char **args, int *argc_p)
argstr[x++] = 'O';
if (omit_link_times)
argstr[x++] = 'J';
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
-S, --sparse turn sequences of nulls into sparse blocks
-@@ -1280,6 +1281,10 @@ directories.
+@@ -1281,6 +1282,10 @@ directories.
dit(bf(-J, --omit-link-times)) This tells rsync to omit symlinks when
it is preserving modification times (see bf(--times)).
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
size_t bwlimit_writemax = 0;
int ignore_existing = 0;
int ignore_non_existing = 0;
-@@ -806,6 +807,7 @@ void usage(enum logcode F)
+@@ -811,6 +812,7 @@ void usage(enum logcode F)
rprintf(F," --password-file=FILE read daemon-access password from FILE\n");
rprintf(F," --list-only list the files instead of copying them\n");
rprintf(F," --bwlimit=RATE limit socket I/O bandwidth\n");
#ifdef HAVE_SETVBUF
rprintf(F," --outbuf=N|L|B set output buffering to None, Line, or Block\n");
#endif
-@@ -1012,6 +1014,7 @@ static struct poptOption long_options[] = {
+@@ -1017,6 +1019,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 },
TODO: the configure changes should abort if the user requests --enable-slp
and we can't honor that request.
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
LIBOBJDIR=lib/
INSTALLCMD=@INSTALL@
-@@ -44,7 +46,7 @@ OBJS2=options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o \
+@@ -45,7 +47,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 \
fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
OBJS3=progress.o pipe.o
- CXXOBJ=@CXXOBJ@
-DAEMON_OBJ = params.o loadparm.o clientserver.o access.o connection.o authenticate.o
+DAEMON_OBJ = params.o loadparm.o clientserver.o access.o connection.o authenticate.o $(SLPOBJ)
popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
popt/popthelp.o popt/poptparse.o
- OBJS=$(OBJS1) $(OBJS2) $(OBJS3) $(CXXOBJ) $(DAEMON_OBJ) $(LIBOBJ) @BUILD_ZLIB@ @BUILD_POPT@
-@@ -92,7 +94,7 @@ install-strip:
+ OBJS=$(OBJS1) $(OBJS2) $(OBJS3) @SIMD@ $(DAEMON_OBJ) $(LIBOBJ) @BUILD_ZLIB@ @BUILD_POPT@
+@@ -93,7 +95,7 @@ install-strip:
$(MAKE) INSTALL_STRIP='-s' install
rsync$(EXEEXT): $(OBJS)
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -781,6 +781,29 @@ if test $rsync_cv_can_hardlink_special = yes; then
+@@ -804,6 +804,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/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -579,6 +579,7 @@ static void print_rsync_version(enum logcode f)
- char const *iconv = "no ";
+@@ -581,6 +581,7 @@ static void print_rsync_version(enum logcode f)
char const *ipv6 = "no ";
- char const *sse2 = "no ";
+ char const *simd = "no ";
+ char const *xxhash = "no ";
+ char const *slp = "no ";
STRUCT_STAT *dumstat;
#if SUBPROTOCOL_VERSION != 0
-@@ -618,6 +619,9 @@ static void print_rsync_version(enum logcode f)
- #ifdef ENABLE_SSE2
- sse2 = "";
+@@ -623,6 +624,9 @@ static void print_rsync_version(enum logcode f)
+ #ifdef SUPPORT_XXHASH
+ xxhash = "";
#endif
+#if HAVE_LIBSLP
+ slp = "";
rprintf(f, "%s version %s protocol version %d%s\n",
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol);
-@@ -631,8 +635,10 @@ static void print_rsync_version(enum logcode f)
+@@ -636,8 +640,10 @@ static void print_rsync_version(enum logcode f)
(int)(sizeof (int64) * 8));
rprintf(f, " %ssocketpairs, %shardlinks, %ssymlinks, %sIPv6, batchfiles, %sinplace,\n",
got_socketpair, hardlinks, links, ipv6, have_inplace);
-- rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %ssse2\n",
-+ rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %ssse2,\n",
- have_inplace, acls, xattrs, iconv, symtimes, prealloc, sse2);
+- rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %sSIMD, %sxxhash\n",
++ rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %sSIMD, %sxxhash,\n",
+ have_inplace, acls, xattrs, iconv, symtimes, prealloc, simd, xxhash);
+ rprintf(f, " %sSLP\n",
+ slp);
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
-- Matt McCutchen <hashproduct@gmail.com>
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
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
-@@ -742,6 +743,7 @@ void usage(enum logcode F)
+@@ -747,6 +748,7 @@ void usage(enum logcode F)
rprintf(F," --existing skip creating new files on receiver\n");
rprintf(F," --ignore-existing skip updating files that already exist on receiver\n");
rprintf(F," --remove-source-files sender removes synchronized files (non-dirs)\n");
rprintf(F," --del an alias for --delete-during\n");
rprintf(F," --delete delete extraneous files from destination dirs\n");
rprintf(F," --delete-before receiver deletes before transfer, not during\n");
-@@ -1015,6 +1017,7 @@ static struct poptOption long_options[] = {
+@@ -1020,6 +1022,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 },
-@@ -2787,6 +2790,8 @@ void server_options(char **args, int *argc_p)
+@@ -2792,6 +2795,8 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before xfer, not during
-@@ -1446,6 +1447,14 @@ bf(--exclude='*.new') for the rsync transfer).
+@@ -1470,6 +1471,14 @@ bf(--exclude='*.new') for the rsync transfer).
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: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
char *rsync_path = RSYNC_PATH;
char *backup_dir = NULL;
char backup_dir_buf[MAXPATHLEN];
-@@ -769,6 +772,7 @@ void usage(enum logcode F)
+@@ -774,6 +777,7 @@ void usage(enum logcode F)
rprintf(F," -I, --ignore-times don't skip files that match in size and mod-time\n");
rprintf(F," -M, --remote-option=OPTION send OPTION to the remote side only\n");
rprintf(F," --size-only skip files that match in size\n");
rprintf(F," -@, --modify-window=NUM set the accuracy for mod-time comparisons\n");
rprintf(F," -T, --temp-dir=DIR create temporary files in directory DIR\n");
rprintf(F," -y, --fuzzy find similar file for basis if no dest file\n");
-@@ -812,6 +816,8 @@ void usage(enum logcode F)
+@@ -817,6 +821,8 @@ void usage(enum logcode F)
rprintf(F," --write-batch=FILE write a batched update to FILE\n");
rprintf(F," --only-write-batch=FILE like --write-batch but w/o updating destination\n");
rprintf(F," --read-batch=FILE read a batched update from FILE\n");
rprintf(F," --protocol=NUM force an older protocol version to be used\n");
#ifdef ICONV_OPTION
rprintf(F," --iconv=CONVERT_SPEC request charset conversion of filenames\n");
-@@ -932,6 +938,7 @@ static struct poptOption long_options[] = {
+@@ -937,6 +943,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 },
-@@ -1057,6 +1064,8 @@ static struct poptOption long_options[] = {
+@@ -1062,6 +1069,8 @@ static struct poptOption long_options[] = {
{"password-file", 0, POPT_ARG_STRING, &password_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 },
#ifdef HAVE_SETVBUF
{"outbuf", 0, POPT_ARG_STRING, &outbuf_mode, 0, 0, 0 },
#endif
-@@ -2424,6 +2433,16 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2428,6 +2437,16 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
}
if (files_from) {
char *h, *p;
int q;
-@@ -2796,6 +2815,25 @@ void server_options(char **args, int *argc_p)
+@@ -2801,6 +2820,25 @@ void server_options(char **args, int *argc_p)
else if (missing_args == 1 && !am_sender)
args[ac++] = "--ignore-missing-args";
--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)
-@@ -2727,6 +2730,33 @@ file previously generated by bf(--write-batch).
+@@ -2751,6 +2754,33 @@ file previously generated by bf(--write-batch).
If em(FILE) is bf(-), the batch data will be read from standard input.
See the "BATCH MODE" section for details.
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/fileio.c b/fileio.c
--- a/fileio.c
+++ b/fileio.c
int preallocate_files = 0;
int do_compression = 0;
int def_compress_level = NOT_SPECIFIED;
-@@ -726,6 +727,7 @@ void usage(enum logcode F)
+@@ -731,6 +732,7 @@ void usage(enum logcode F)
rprintf(F," --fake-super store/recover privileged attrs using xattrs\n");
#endif
rprintf(F," -S, --sparse turn sequences of nulls into sparse blocks\n");
#ifdef SUPPORT_PREALLOCATION
rprintf(F," --preallocate allocate dest files before writing them\n");
#else
-@@ -944,6 +946,7 @@ static struct poptOption long_options[] = {
+@@ -949,6 +951,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 },
-@@ -2713,6 +2716,12 @@ void server_options(char **args, int *argc_p)
+@@ -2718,6 +2721,12 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
--preallocate allocate dest files before writing
--write-devices write to devices as files (implies --inplace)
-n, --dry-run perform a trial run with no changes made
-@@ -1346,6 +1347,15 @@ If combined with bf(--sparse), the file will only have sparse blocks (as
+@@ -1347,6 +1348,15 @@ If combined with bf(--sparse), the file will only have sparse blocks (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: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
diff --git a/rsync.yo b/rsync.yo
--- a/rsync.yo
+++ b/rsync.yo
-@@ -2769,14 +2769,18 @@ regardless of the remote charset you actually pass. Thus, you may feel free to
+@@ -2793,14 +2793,18 @@ regardless of the remote charset you actually pass. Thus, you may feel free to
specify just the local charset for a daemon transfer (e.g. bf(--iconv=utf8)).
dit(bf(-4, --ipv4) or bf(-6, --ipv6)) Tells rsync to prefer IPv4/IPv6
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/io.c b/io.c
--- a/io.c
+++ b/io.c
int max_delete = INT_MIN;
OFF_T max_size = -1;
OFF_T min_size = -1;
-@@ -806,6 +807,8 @@ void usage(enum logcode F)
+@@ -811,6 +812,8 @@ void usage(enum logcode F)
rprintf(F," --password-file=FILE read daemon-access password from FILE\n");
rprintf(F," --list-only list the files instead of copying them\n");
rprintf(F," --bwlimit=RATE limit socket I/O bandwidth\n");
#ifdef HAVE_SETVBUF
rprintf(F," --outbuf=N|L|B set output buffering to None, Line, or Block\n");
#endif
-@@ -834,6 +837,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -839,6 +842,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
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_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
OPT_SERVER, OPT_REFUSED_BASE = 9000};
static struct poptOption long_options[] = {
-@@ -1037,6 +1041,8 @@ static struct poptOption long_options[] = {
+@@ -1042,6 +1046,8 @@ static struct poptOption long_options[] = {
{"no-timeout", 0, POPT_ARG_VAL, &io_timeout, 0, 0, 0 },
{"contimeout", 0, POPT_ARG_INT, &connect_timeout, 0, 0, 0 },
{"no-contimeout", 0, POPT_ARG_VAL, &connect_timeout, 0, 0, 0 },
{"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 },
{"rsync-path", 0, POPT_ARG_STRING, &rsync_path, 0, 0, 0 },
{"temp-dir", 'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 },
-@@ -1899,6 +1905,36 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1904,6 +1910,36 @@ int parse_arguments(int *argc_p, const char ***argv_p)
return 0;
#endif
default:
/* A large opt value means that set_refuse_options()
* turned this option off. */
-@@ -2725,6 +2761,15 @@ void server_options(char **args, int *argc_p)
+@@ -2730,6 +2766,15 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
--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
-@@ -2701,6 +2703,19 @@ files can show up as being rapidly sent when the data is quickly buffered,
+@@ -2725,6 +2727,19 @@ files can show up as being rapidly sent when the data is quickly buffered,
while other can show up as very slow when the flushing of the output buffer
occurs. This may be fixed in a future version.
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
#define MAX_BATCH_NAME_LEN 256 /* Must be less than MAXPATHLEN-13 */
char *batch_name = NULL;
-@@ -816,6 +817,7 @@ void usage(enum logcode F)
+@@ -821,6 +822,7 @@ void usage(enum logcode F)
#ifdef ICONV_OPTION
rprintf(F," --iconv=CONVERT_SPEC request charset conversion of filenames\n");
#endif
rprintf(F," --checksum-seed=NUM set block/file checksum seed (advanced)\n");
rprintf(F," -4, --ipv4 prefer IPv4\n");
rprintf(F," -6, --ipv6 prefer IPv6\n");
-@@ -1044,6 +1046,7 @@ static struct poptOption long_options[] = {
+@@ -1049,6 +1051,7 @@ static struct poptOption long_options[] = {
{"iconv", 0, POPT_ARG_STRING, &iconv_opt, 0, 0, 0 },
{"no-iconv", 0, POPT_ARG_NONE, 0, OPT_NO_ICONV, 0, 0 },
#endif
{"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 },
-@@ -2470,6 +2473,24 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2474,6 +2477,24 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
}
am_starting_up = 0;
return 1;
-@@ -2905,6 +2926,12 @@ void server_options(char **args, int *argc_p)
+@@ -2910,6 +2931,12 @@ void server_options(char **args, int *argc_p)
if (relative_paths && !implied_dirs && (!am_sender || protocol_version >= 30))
args[ac++] = "--no-implied-dirs";
--checksum-seed=NUM set block/file checksum seed (advanced)
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
-@@ -2768,6 +2769,22 @@ daemon uses the charset specified in its "charset" configuration parameter
+@@ -2792,6 +2793,22 @@ daemon uses the charset specified in its "charset" configuration parameter
regardless of the remote charset you actually pass. Thus, you may feel free to
specify just the local charset for a daemon transfer (e.g. bf(--iconv=utf8)).
./configure (optional if already run)
make
-based-on: 70c6b408dc299f7aa00dd3452ae82b56d6c17f80
+based-on: a28bc3ebf672113cdd90432ef0270782d8ab6c2c
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -217,13 +217,6 @@ void setup_protocol(int f_out,int f_in)
+@@ -222,13 +222,6 @@ void setup_protocol(int f_out,int f_in)
if (protocol_version < 30) {
if (append_mode == 1)
append_mode = 2;