./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
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
-@@ -497,13 +497,6 @@ void setup_protocol(int f_out,int f_in)
+@@ -522,13 +522,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: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
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: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
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
-@@ -693,6 +693,7 @@ void usage(enum logcode F)
+@@ -701,6 +701,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");
-@@ -1024,7 +1025,8 @@ static struct poptOption long_options[] = {
+@@ -1032,7 +1033,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 },
-@@ -2776,6 +2778,10 @@ void server_options(char **args, int *argc_p)
+@@ -2775,6 +2777,10 @@ void server_options(char **args, int *argc_p)
}
if (am_sender) {
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -158,10 +158,14 @@ int no_detach
+@@ -157,10 +157,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];
-@@ -173,7 +177,9 @@ char *stdout_format = NULL;
+@@ -172,7 +176,9 @@ char *stdout_format = NULL;
char *password_file = NULL;
char *rsync_path = RSYNC_PATH;
char *backup_dir = NULL;
char *sockopts = NULL;
char *usermap = NULL;
char *groupmap = NULL;
-@@ -696,6 +702,8 @@ void usage(enum logcode F)
+@@ -704,6 +710,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");
-@@ -1029,7 +1037,9 @@ static struct poptOption long_options[] = {
+@@ -1037,7 +1045,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 },
-@@ -2243,6 +2253,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2242,6 +2252,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;
-@@ -2264,6 +2276,14 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2263,6 +2275,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)
-@@ -2275,6 +2295,20 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2274,6 +2294,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] == '/')
-@@ -2310,6 +2344,34 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2309,6 +2343,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;
-@@ -2752,6 +2814,10 @@ void server_options(char **args, int *argc_p)
+@@ -2751,6 +2813,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) {
-@@ -2760,6 +2826,14 @@ void server_options(char **args, int *argc_p)
+@@ -2759,6 +2825,14 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/errcode.h b/errcode.h
--- a/errcode.h
+++ b/errcode.h
./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
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
-@@ -119,6 +119,7 @@ size_t bwlimit_writemax = 0;
+@@ -118,6 +118,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;
-@@ -687,6 +688,7 @@ void usage(enum logcode F)
+@@ -695,6 +696,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");
-@@ -838,7 +840,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -846,7 +848,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_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS,
OPT_SERVER, OPT_REFUSED_BASE = 9000};
-@@ -988,6 +990,7 @@ static struct poptOption long_options[] = {
+@@ -996,6 +998,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_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 },
-@@ -1810,6 +1813,23 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1818,6 +1821,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);
-@@ -2088,6 +2108,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2087,6 +2107,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
#endif
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -1815,7 +1815,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1823,7 +1823,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
case OPT_SUMFILES:
arg = poptGetOptArg(pc);
./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
+++ b/loadparm.c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -75,6 +75,8 @@ int delete_during = 0;
+@@ -74,6 +74,8 @@ int delete_during = 0;
int delete_before = 0;
int delete_after = 0;
int delete_excluded = 0;
int remove_source_files = 0;
int one_file_system = 0;
int protocol_version = PROTOCOL_VERSION;
-@@ -799,6 +801,8 @@ void usage(enum logcode F)
+@@ -807,6 +809,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");
-@@ -1072,6 +1076,8 @@ static struct poptOption long_options[] = {
+@@ -1080,6 +1084,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 },
-@@ -1099,6 +1105,8 @@ static void daemon_usage(enum logcode F)
+@@ -1107,6 +1113,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: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
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
-@@ -51,6 +51,7 @@ int append_mode = 0;
+@@ -50,6 +50,7 @@ int append_mode = 0;
int keep_dirlinks = 0;
int copy_dirlinks = 0;
int copy_links = 0;
int write_devices = 0;
int preserve_links = 0;
int preserve_hard_links = 0;
-@@ -720,6 +721,7 @@ void usage(enum logcode F)
+@@ -728,6 +729,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");
-@@ -912,6 +914,7 @@ static struct poptOption long_options[] = {
+@@ -920,6 +922,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 },
-@@ -2940,6 +2943,9 @@ void server_options(char **args, int *argc_p)
+@@ -2939,6 +2942,9 @@ void server_options(char **args, int *argc_p)
else if (remove_source_files)
args[ac++] = "--remove-sent-files";
extern int preserve_acls;
extern int preserve_xattrs;
extern int preserve_fileflags;
-@@ -78,7 +79,7 @@ int inplace_partial = 0;
+@@ -77,7 +78,7 @@ int inplace_partial = 0;
int do_negotiated_strings = 0;
/* These index values are for the file-list's extra-attribute array. */
int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
int sender_symlink_iconv = 0; /* sender should convert symlink content */
-@@ -430,6 +431,8 @@ void setup_protocol(int f_out,int f_in)
+@@ -455,6 +456,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
-@@ -595,6 +598,10 @@ void setup_protocol(int f_out,int f_in)
+@@ -620,6 +623,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;
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -65,6 +65,7 @@ int preserve_uid = 0;
+@@ -64,6 +64,7 @@ int preserve_uid = 0;
int preserve_gid = 0;
int preserve_times = 0;
int preserve_atimes = 0;
+ rprintf(f, " %sfile-flags, %scrtimes\n",
+ fileflags, crtimes);
- #ifdef MAINTAINER_MODE
- rprintf(f, "Panic Action: \"%s\"\n", get_panic_action());
-@@ -736,6 +741,9 @@ void usage(enum logcode F)
+ rprintf(f,"\n");
+
+@@ -744,6 +749,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");
-@@ -912,6 +920,11 @@ static struct poptOption long_options[] = {
+@@ -920,6 +928,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 },
-@@ -2624,6 +2637,10 @@ void server_options(char **args, int *argc_p)
+@@ -2623,6 +2636,10 @@ void server_options(char **args, int *argc_p)
if (preserve_atimes > 1)
argstr[x++] = 'U';
}
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).
-@@ -2316,7 +2320,7 @@ with older versions of rsync, but that also turns on the output of other
+@@ -2310,7 +2314,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.
-@@ -2378,6 +2382,8 @@ quote(itemization(
+@@ -2372,6 +2376,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: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
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
-@@ -112,6 +112,7 @@ int safe_symlinks = 0;
+@@ -111,6 +111,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;
-@@ -775,6 +776,7 @@ void usage(enum logcode F)
+@@ -783,6 +784,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");
-@@ -939,6 +941,7 @@ static struct poptOption long_options[] = {
+@@ -947,6 +949,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 },
-@@ -2827,6 +2830,9 @@ void server_options(char **args, int *argc_p)
+@@ -2826,6 +2829,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: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c
-@@ -42,6 +42,7 @@ extern int read_batch;
+@@ -40,6 +40,7 @@ extern int whole_file;
extern int checksum_seed;
extern int protocol_version;
extern int proper_seed_order;
extern char *checksum_choice;
#define CSUM_NONE 0
-@@ -310,6 +311,8 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -308,6 +309,8 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
MD5_Update(&m5, (uchar *)map_ptr(buf, i, remainder), remainder);
MD5_Final((uchar *)sum, &m5);
break;
}
case CSUM_MD4:
-@@ -349,6 +352,8 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -347,6 +350,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);
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 \
-@@ -1169,6 +1170,48 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x"
+@@ -1167,6 +1168,48 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x"
fi
fi
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -86,6 +86,7 @@ int am_root = 0; /* 0 = normal, 1 = root, 2 = --super, -1 = --fake-super */
+@@ -85,6 +85,7 @@ int am_root = 0; /* 0 = normal, 1 = root, 2 = --super, -1 = --fake-super */
int am_server = 0;
int am_sender = 0;
int am_starting_up = 1;
int relative_paths = -1;
int implied_dirs = 1;
int missing_args = 0; /* 0 = FERROR_XFER, 1 = ignore, 2 = delete */
-@@ -99,6 +100,7 @@ int use_qsort = 0;
+@@ -98,6 +99,7 @@ int use_qsort = 0;
char *files_from = NULL;
int filesfrom_fd = -1;
char *filesfrom_host = NULL;
int eol_nulls = 0;
int protect_args = -1;
int human_readable = 1;
-@@ -106,6 +108,9 @@ int recurse = 0;
+@@ -105,6 +107,9 @@ int recurse = 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;
-@@ -277,6 +282,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
+@@ -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"),
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)"),
+ rprintf(f, " %sDB\n",
+ db);
- #ifdef MAINTAINER_MODE
- rprintf(f, "Panic Action: \"%s\"\n", get_panic_action());
-@@ -687,6 +702,9 @@ void usage(enum logcode F)
+ rprintf(f,"\n");
+
+@@ -695,6 +710,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");
-@@ -839,6 +857,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -847,6 +865,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_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS,
OPT_SERVER, OPT_REFUSED_BASE = 9000};
-@@ -988,6 +1007,10 @@ static struct poptOption long_options[] = {
+@@ -996,6 +1015,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_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 },
-@@ -1081,6 +1104,9 @@ static struct poptOption long_options[] = {
+@@ -1089,6 +1112,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}
};
-@@ -1134,6 +1160,50 @@ static struct poptOption long_daemon_options[] = {
+@@ -1142,6 +1168,50 @@ static struct poptOption long_daemon_options[] = {
{0,0,0,0, 0, 0, 0}
};
static char err_buf[200];
-@@ -1257,6 +1327,8 @@ static void set_refuse_options(void)
+@@ -1265,6 +1335,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. */
-@@ -1381,6 +1453,102 @@ static void create_refuse_error(int which)
+@@ -1389,6 +1461,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
-@@ -1419,6 +1587,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1427,6 +1595,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
return 0;
}
set_refuse_options();
#ifdef ICONV_OPTION
-@@ -1540,6 +1714,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1548,6 +1722,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
-@@ -1614,6 +1794,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1622,6 +1802,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
-@@ -1334,7 +1338,8 @@ extern short info_levels[], debug_levels[];
+@@ -1339,7 +1343,8 @@ extern short info_levels[], debug_levels[];
#define DEBUG_CHDIR (DEBUG_BIND+1)
#define DEBUG_CONNECT (DEBUG_CHDIR+1)
#define DEBUG_CMD (DEBUG_CONNECT+1)
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -780,6 +780,8 @@ void usage(enum logcode F)
+@@ -788,6 +788,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");
-@@ -994,7 +996,9 @@ static struct poptOption long_options[] = {
+@@ -1002,7 +1004,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 },
-@@ -2814,8 +2818,14 @@ void server_options(char **args, int *argc_p)
+@@ -2813,8 +2817,14 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
a file that can't use it, while missing out on giving it to a file
that could use it.
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/backup.c b/backup.c
--- a/backup.c
+++ b/backup.c
extern int protect_args;
extern int preserve_uid;
extern int preserve_gid;
-@@ -156,6 +157,7 @@ void set_allow_inc_recurse(void)
+@@ -150,6 +151,7 @@ void set_allow_inc_recurse(void)
allow_inc_recurse = 0;
else if (!am_sender
&& (delete_before || delete_after
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -87,6 +87,7 @@ int am_server = 0;
+@@ -86,6 +86,7 @@ int am_server = 0;
int am_sender = 0;
int am_starting_up = 1;
int relative_paths = -1;
int implied_dirs = 1;
int missing_args = 0; /* 0 = FERROR_XFER, 1 = ignore, 2 = delete */
int numeric_ids = 0;
-@@ -778,6 +779,7 @@ void usage(enum logcode F)
+@@ -786,6 +787,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");
-@@ -992,6 +994,7 @@ static struct poptOption long_options[] = {
+@@ -1000,6 +1002,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 },
-@@ -2400,7 +2403,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2399,7 +2402,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
inplace = 1;
}
partial_dir = tmp_partialdir;
if (inplace) {
-@@ -2409,6 +2412,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2408,6 +2411,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;
}
-@@ -2810,6 +2814,8 @@ void server_options(char **args, int *argc_p)
+@@ -2809,6 +2813,8 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -25,6 +25,7 @@
+@@ -24,6 +24,7 @@
+ #include "latest-year.h"
#include <popt.h>
- #include <zlib.h>
+extern int direct_io;
extern int module_id;
extern int local_server;
extern int sanitize_paths;
-@@ -765,6 +766,7 @@ void usage(enum logcode F)
+@@ -773,6 +774,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");
-@@ -1012,6 +1014,8 @@ static struct poptOption long_options[] = {
+@@ -1020,6 +1022,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
-@@ -2588,6 +2589,14 @@ See also the "atomic-rsync" perl script in the "support" subdir for an
+@@ -2582,6 +2583,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: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
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
-@@ -64,6 +64,7 @@ int preserve_uid = 0;
+@@ -63,6 +63,7 @@ int preserve_uid = 0;
int preserve_gid = 0;
int preserve_times = 0;
int preserve_atimes = 0;
int update_only = 0;
int open_noatime = 0;
int cvs_exclude = 0;
-@@ -696,6 +697,7 @@ void usage(enum logcode F)
+@@ -704,6 +705,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");
-@@ -943,6 +945,7 @@ static struct poptOption long_options[] = {
+@@ -951,6 +953,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: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
extern int xfer_flags_as_varint;
extern int need_messages_from_generator;
extern int delete_mode, delete_before, delete_during, delete_after;
-@@ -76,7 +78,7 @@ int inplace_partial = 0;
+@@ -75,7 +77,7 @@ int inplace_partial = 0;
int do_negotiated_strings = 0;
/* These index values are for the file-list's extra-attribute array. */
int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
int sender_symlink_iconv = 0; /* sender should convert symlink content */
-@@ -436,6 +438,8 @@ void setup_protocol(int f_out,int f_in)
+@@ -461,6 +463,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)
-@@ -591,6 +595,10 @@ void setup_protocol(int f_out,int f_in)
+@@ -616,6 +620,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;
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -57,6 +57,7 @@ int preserve_hard_links = 0;
+@@ -56,6 +56,7 @@ int preserve_hard_links = 0;
int preserve_acls = 0;
int preserve_xattrs = 0;
int preserve_perms = 0;
int preserve_executability = 0;
int preserve_devices = 0;
int preserve_specials = 0;
-@@ -93,6 +94,7 @@ int numeric_ids = 0;
+@@ -92,6 +93,7 @@ int numeric_ids = 0;
int msgs2stderr = 0;
int allow_8bit_chars = 0;
int force_delete = 0;
+ rprintf(f, " %sfile-flags\n",
+ fileflags);
- #ifdef MAINTAINER_MODE
- rprintf(f, "Panic Action: \"%s\"\n", get_panic_action());
-@@ -709,6 +717,9 @@ void usage(enum logcode F)
+ rprintf(f,"\n");
+
+@@ -717,6 +725,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
-@@ -758,7 +769,12 @@ void usage(enum logcode F)
+@@ -766,7 +777,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");
-@@ -877,6 +893,10 @@ static struct poptOption long_options[] = {
+@@ -885,6 +901,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 },
-@@ -970,6 +990,14 @@ static struct poptOption long_options[] = {
+@@ -978,6 +998,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 },
-@@ -2701,6 +2729,9 @@ void server_options(char **args, int *argc_p)
+@@ -2700,6 +2728,9 @@ void server_options(char **args, int *argc_p)
if (xfer_dirs && !recurse && delete_mode && am_sender)
args[ac++] = "--no-r";
+ if (preserve_fileflags)
+ args[ac++] = "--fileflags";
+
- if (do_compression && def_compress_level != Z_DEFAULT_COMPRESSION) {
- if (asprintf(&arg, "--compress-level=%d", def_compress_level) < 0)
+ if (do_compression && do_compression_level != CLVL_NOT_SPECIFIED) {
+ if (asprintf(&arg, "--compress-level=%d", do_compression_level) < 0)
goto oom;
-@@ -2804,6 +2835,16 @@ void server_options(char **args, int *argc_p)
+@@ -2803,6 +2834,16 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--delete-excluded";
if (force_delete)
args[ac++] = "--force";
bf(--recursive) option was also enabled.
dit(bf(--max-delete=NUM)) This tells rsync not to delete more than NUM
-@@ -2287,7 +2316,7 @@ with older versions of rsync, but that also turns on the output of other
+@@ -2281,7 +2310,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: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
See the bf(--perms) and bf(--executability) options for how the resulting
permission value can be applied to the files in the transfer.
-@@ -2237,6 +2239,10 @@ be omitted, but if USER is empty, a leading colon must be supplied.
+@@ -2231,6 +2233,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.
-@@ -3131,6 +3137,15 @@ itemization(
+@@ -3125,6 +3131,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
-@@ -3196,6 +3211,12 @@ itemization(
+@@ -3190,6 +3205,12 @@ itemization(
a rule prefix such as bf(hide)).
)
./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -69,6 +69,7 @@ int open_noatime = 0;
+@@ -68,6 +68,7 @@ int open_noatime = 0;
int cvs_exclude = 0;
int dry_run = 0;
int do_xfers = 1;
int ignore_times = 0;
int delete_mode = 0;
int delete_during = 0;
-@@ -766,6 +767,7 @@ void usage(enum logcode F)
+@@ -774,6 +775,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");
-@@ -1047,6 +1049,7 @@ static struct poptOption long_options[] = {
+@@ -1055,6 +1057,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 },
-@@ -2890,6 +2893,9 @@ void server_options(char **args, int *argc_p)
+@@ -2889,6 +2892,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = tmpdir;
}
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -56,6 +56,7 @@ int preserve_links = 0;
+@@ -55,6 +55,7 @@ int preserve_links = 0;
int preserve_hard_links = 0;
int preserve_acls = 0;
int preserve_xattrs = 0;
int preserve_perms = 0;
int preserve_fileflags = 0;
int preserve_executability = 0;
-@@ -732,6 +733,10 @@ void usage(enum logcode F)
+@@ -740,6 +741,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");
-@@ -1010,6 +1015,12 @@ static struct poptOption long_options[] = {
+@@ -1018,6 +1023,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 },
-@@ -2129,6 +2140,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2128,6 +2139,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
-@@ -2749,6 +2769,11 @@ void server_options(char **args, int *argc_p)
+@@ -2748,6 +2768,11 @@ void server_options(char **args, int *argc_p)
if (preserve_fileflags)
args[ac++] = "--fileflags";
+ args[ac++] = preserve_hfs_compression == 1 ? "--hfs-compression" : "--protect-decmpfs";
+#endif
+
- if (do_compression && def_compress_level != Z_DEFAULT_COMPRESSION) {
- if (asprintf(&arg, "--compress-level=%d", def_compress_level) < 0)
+ if (do_compression && do_compression_level != CLVL_NOT_SPECIFIED) {
+ if (asprintf(&arg, "--compress-level=%d", do_compression_level) < 0)
goto oom;
diff --git a/rsync.c b/rsync.c
--- a/rsync.c
- Make this code handle multibyte character encodings, and honor the
--iconv setting when converting case.
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
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
-@@ -124,6 +124,7 @@ OFF_T max_size = -1;
+@@ -123,6 +123,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;
-@@ -796,6 +797,7 @@ void usage(enum logcode F)
+@@ -804,6 +805,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");
-@@ -1032,6 +1034,8 @@ static struct poptOption long_options[] = {
+@@ -1040,6 +1042,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},
-@@ -2840,6 +2844,9 @@ void server_options(char **args, int *argc_p)
+@@ -2839,6 +2843,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
./configure
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -759,6 +759,31 @@ if test x"$enable_iconv" != x"no"; then
+@@ -757,6 +757,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: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c
-@@ -39,9 +39,12 @@ extern int am_server;
- extern int local_server;
- extern int whole_file;
- extern int read_batch;
-+extern int checksum_len;
+@@ -40,6 +40,8 @@ extern int whole_file;
extern int checksum_seed;
extern int protocol_version;
extern int proper_seed_order;
extern char *checksum_choice;
#define CSUM_NONE 0
-@@ -397,7 +400,7 @@ static union {
+@@ -395,7 +397,7 @@ static union {
MD4_CTX m4;
#endif
MD5_CTX m5;
#ifdef SUPPORT_XXHASH
static XXH64_state_t* xxh64_state;
#endif
-@@ -414,6 +417,8 @@ void sum_init(int csum_type, int seed)
+@@ -412,6 +414,8 @@ void sum_init(int csum_type, int seed)
switch (csum_type) {
case CSUM_MD5:
MD5_Init(&ctx.m5);
break;
case CSUM_MD4:
#ifdef USE_OPENSSL
-@@ -464,6 +469,8 @@ void sum_update(const char *p, int32 len)
+@@ -462,6 +466,8 @@ void sum_update(const char *p, int32 len)
switch (cursum_type) {
case CSUM_MD5:
MD5_Update(&ctx.m5, (uchar *)p, len);
break;
case CSUM_MD4:
#ifdef USE_OPENSSL
-@@ -521,6 +528,8 @@ int sum_end(char *sum)
+@@ -519,6 +525,8 @@ int sum_end(char *sum)
switch (cursum_type) {
case CSUM_MD5:
MD5_Final((uchar *)sum, &ctx.m5);
if (am_daemon && am_server) {
rprintf(FLOG, "rsync allowed access on module %s from %s (%s)\n",
name, host, addr);
-diff --git a/compat.c b/compat.c
---- a/compat.c
-+++ b/compat.c
-@@ -57,6 +57,7 @@ extern char *files_from;
- extern char *filesfrom_host;
- extern char *checksum_choice;
- extern char *compress_choice;
-+extern char *link_by_hash_dir;
- extern filter_rule_list filter_list;
- extern int need_unsorted_flist;
- #ifdef ICONV_OPTION
diff --git a/hashlink.c b/hashlink.c
new file mode 100644
--- /dev/null
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -165,6 +165,7 @@ char *backup_suffix = NULL;
+@@ -164,6 +164,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;
-@@ -216,7 +217,7 @@ static const char *debug_verbosity[] = {
+@@ -215,7 +216,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)
-@@ -286,6 +287,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
+@@ -285,6 +286,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)"),
-@@ -781,6 +783,7 @@ void usage(enum logcode F)
+@@ -789,6 +791,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");
-@@ -838,7 +841,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -846,7 +849,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_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS,
OPT_SERVER, OPT_REFUSED_BASE = 9000};
-@@ -992,6 +995,7 @@ static struct poptOption long_options[] = {
+@@ -1000,6 +1003,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 },
-@@ -1426,6 +1430,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1434,6 +1438,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
-@@ -1922,6 +1929,21 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1930,6 +1937,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. */
-@@ -2241,6 +2263,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2240,6 +2262,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;
-@@ -2915,6 +2939,12 @@ void server_options(char **args, int *argc_p)
+@@ -2914,6 +2938,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
-@@ -1343,7 +1343,8 @@ extern short info_levels[], debug_levels[];
+@@ -1348,7 +1348,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)
./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/authenticate.c b/authenticate.c
--- a/authenticate.c
+++ b/authenticate.c
./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/access.c b/access.c
--- a/access.c
+++ b/access.c
./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
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
-@@ -76,6 +76,7 @@ int delete_before = 0;
+@@ -75,6 +75,7 @@ int delete_before = 0;
int delete_after = 0;
int delete_excluded = 0;
int remove_source_files = 0;
int one_file_system = 0;
int protocol_version = PROTOCOL_VERSION;
int sparse_files = 0;
-@@ -727,6 +728,7 @@ void usage(enum logcode F)
+@@ -735,6 +736,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");
-@@ -898,6 +900,7 @@ static struct poptOption long_options[] = {
+@@ -906,6 +908,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 },
-@@ -2309,6 +2312,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2308,6 +2311,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)
-@@ -2560,6 +2566,8 @@ void server_options(char **args, int *argc_p)
+@@ -2559,6 +2565,8 @@ void server_options(char **args, int *argc_p)
argstr[x++] = 'O';
if (omit_link_times)
argstr[x++] = 'J';
./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
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
-@@ -115,6 +115,7 @@ int size_only = 0;
+@@ -114,6 +114,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;
-@@ -812,6 +813,7 @@ void usage(enum logcode F)
+@@ -820,6 +821,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
-@@ -1022,6 +1024,7 @@ static struct poptOption long_options[] = {
+@@ -1030,6 +1032,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: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -818,6 +818,29 @@ if test $rsync_cv_can_hardlink_special = yes; then
+@@ -816,6 +816,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
+ rprintf(f, " %sSLP\n",
+ slp);
- #ifdef MAINTAINER_MODE
- rprintf(f, "Panic Action: \"%s\"\n", get_panic_action());
+ rprintf(f,"\n");
+
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
-- Matt McCutchen <hashproduct@gmail.com>
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -36,6 +36,7 @@ extern filter_rule_list daemon_filter_list;
- #define NOT_SPECIFIED (-42)
+@@ -35,6 +35,7 @@ extern filter_rule_list filter_list;
+ extern filter_rule_list daemon_filter_list;
int make_backups = 0;
+int make_source_backups = 0;
/**
* If 1, send the whole file as literal data rather than trying to
-@@ -748,6 +749,7 @@ void usage(enum logcode F)
+@@ -756,6 +757,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");
-@@ -1025,6 +1027,7 @@ static struct poptOption long_options[] = {
+@@ -1033,6 +1035,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 },
-@@ -2818,6 +2821,8 @@ void server_options(char **args, int *argc_p)
+@@ -2817,6 +2820,8 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
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
-@@ -112,6 +112,7 @@ int safe_symlinks = 0;
+@@ -111,6 +111,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;
-@@ -171,6 +172,8 @@ char *logfile_name = NULL;
+@@ -170,6 +171,8 @@ char *logfile_name = NULL;
char *logfile_format = NULL;
char *stdout_format = NULL;
char *password_file = NULL;
char *rsync_path = RSYNC_PATH;
char *backup_dir = NULL;
char backup_dir_buf[MAXPATHLEN];
-@@ -775,6 +778,7 @@ void usage(enum logcode F)
+@@ -783,6 +786,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");
-@@ -818,6 +822,8 @@ void usage(enum logcode F)
+@@ -826,6 +830,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");
-@@ -939,6 +945,7 @@ static struct poptOption long_options[] = {
+@@ -947,6 +953,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 },
-@@ -1067,6 +1074,8 @@ static struct poptOption long_options[] = {
+@@ -1075,6 +1082,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
-@@ -2444,6 +2453,16 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2443,6 +2452,16 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
}
if (files_from) {
char *h, *p;
int q;
-@@ -2827,6 +2846,25 @@ void server_options(char **args, int *argc_p)
+@@ -2826,6 +2845,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)
-@@ -2782,6 +2785,33 @@ file previously generated by bf(--write-batch).
+@@ -2776,6 +2779,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: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/fileio.c b/fileio.c
--- a/fileio.c
+++ b/fileio.c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -79,6 +79,7 @@ int remove_source_files = 0;
+@@ -78,6 +78,7 @@ int remove_source_files = 0;
int one_file_system = 0;
int protocol_version = PROTOCOL_VERSION;
int sparse_files = 0;
+long sparse_files_block_size = SPARSE_WRITE_SIZE;
int preallocate_files = 0;
int do_compression = 0;
- int def_compress_level = NOT_SPECIFIED;
-@@ -732,6 +733,7 @@ void usage(enum logcode F)
+ int do_compression_level = CLVL_NOT_SPECIFIED;
+@@ -740,6 +741,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
-@@ -951,6 +953,7 @@ static struct poptOption long_options[] = {
+@@ -959,6 +961,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 },
-@@ -2734,6 +2737,12 @@ void server_options(char **args, int *argc_p)
+@@ -2733,6 +2736,12 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
./configure (optional if already run)
make
-based-on: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
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
-@@ -2824,14 +2824,18 @@ regardless of the remote charset you actually pass. Thus, you may feel free to
+@@ -2818,14 +2818,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: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/io.c b/io.c
--- a/io.c
+++ b/io.c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -119,6 +119,7 @@ size_t bwlimit_writemax = 0;
+@@ -118,6 +118,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;
-@@ -812,6 +813,8 @@ void usage(enum logcode F)
+@@ -820,6 +821,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
-@@ -841,6 +844,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -849,6 +852,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG,
OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS,
OPT_SERVER, OPT_REFUSED_BASE = 9000};
static struct poptOption long_options[] = {
-@@ -1047,6 +1051,8 @@ static struct poptOption long_options[] = {
+@@ -1055,6 +1059,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 },
-@@ -1922,6 +1928,36 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1930,6 +1936,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. */
-@@ -2746,6 +2782,15 @@ void server_options(char **args, int *argc_p)
+@@ -2745,6 +2781,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
-@@ -2756,6 +2758,19 @@ files can show up as being rapidly sent when the data is quickly buffered,
+@@ -2750,6 +2752,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: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
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
-@@ -199,6 +199,7 @@ int logfile_format_has_i = 0;
+@@ -198,6 +198,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;
-@@ -822,6 +823,7 @@ void usage(enum logcode F)
+@@ -830,6 +831,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");
-@@ -1054,6 +1056,7 @@ static struct poptOption long_options[] = {
+@@ -1062,6 +1064,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 },
-@@ -2490,6 +2493,24 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2489,6 +2492,24 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
}
am_starting_up = 0;
return 1;
-@@ -2932,6 +2953,12 @@ void server_options(char **args, int *argc_p)
+@@ -2931,6 +2952,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
-@@ -2823,6 +2824,22 @@ daemon uses the charset specified in its "charset" configuration parameter
+@@ -2817,6 +2818,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: faecd066a6b523713299e659d8295eb8e308f9ed
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
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
-@@ -497,13 +497,6 @@ void setup_protocol(int f_out,int f_in)
+@@ -522,13 +522,6 @@ void setup_protocol(int f_out,int f_in)
if (protocol_version < 30) {
if (append_mode == 1)
append_mode = 2;
./configure (optional if already run)
make
-based-on: 97e8c55ee8aa9e59d0a2f6f92cb9e04dcc426057
+based-on: abef92c03767d0c5dc9070eba15805f0f7075e6c
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c