./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
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
-@@ -532,13 +532,6 @@ void setup_protocol(int f_out,int f_in)
+@@ -530,13 +530,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: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
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: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
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
-@@ -741,6 +741,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-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");
-@@ -1073,7 +1074,8 @@ static struct poptOption long_options[] = {
+@@ -926,7 +926,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 },
-@@ -2817,6 +2819,10 @@ void server_options(char **args, int *argc_p)
+@@ -2657,6 +2658,10 @@ void server_options(char **args, int *argc_p)
}
if (am_sender) {
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -341,6 +341,7 @@ detailed description below for a complete description.
- --relative, -R use relative path names
- --no-implied-dirs don't send implied dirs with --relative
- --backup, -b make backups (see --suffix & --backup-dir)
-+--backup-deleted make backups only of deleted files
- --backup-dir=DIR make backups into hierarchy based in DIR
- --suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
- --update, -u skip files that are newer on the receiver
-@@ -831,6 +832,13 @@ your home directory (remove the '=' for that).
+@@ -343,6 +343,7 @@ detailed description below for a complete description.
+ --relative, -R use relative path names
+ --no-implied-dirs don't send implied dirs with --relative
+ --backup, -b make backups (see --suffix & --backup-dir)
++--backup-deleted make backups only of deleted files
+ --backup-dir=DIR make backups into hierarchy based in DIR
+ --suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
+ --update, -u skip files that are newer on the receiver
+@@ -833,6 +834,13 @@ your home directory (remove the '=' for that).
trailing inclusion/exclusion of `*`, the auto-added rule would never be
reached).
char *sockopts = NULL;
char *usermap = NULL;
char *groupmap = NULL;
-@@ -744,6 +750,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," --backup-dir-dels=DIR backup removed files into hierarchy based in DIR\n");
-+ rprintf(F," --suffix-dels=SUFFIX set removed-files suffix (def. --suffix w/o b-d-d)\n");
- 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");
-@@ -1078,7 +1086,9 @@ static struct poptOption long_options[] = {
+@@ -930,7 +936,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 },
-@@ -2283,6 +2293,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2122,6 +2130,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;
-@@ -2304,6 +2316,14 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2143,6 +2153,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)
-@@ -2315,6 +2335,20 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2154,6 +2172,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] == '/')
-@@ -2350,6 +2384,34 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2189,6 +2221,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;
-@@ -2793,6 +2855,10 @@ void server_options(char **args, int *argc_p)
+@@ -2632,6 +2692,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) {
-@@ -2801,6 +2867,14 @@ void server_options(char **args, int *argc_p)
+@@ -2640,6 +2704,14 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
if (checksum_choice) {
if (asprintf(&arg, "--checksum-choice=%s", checksum_choice) < 0)
+diff --git a/rsync.1.md b/rsync.1.md
+--- a/rsync.1.md
++++ b/rsync.1.md
+@@ -345,7 +345,9 @@ detailed description below for a complete description.
+ --backup, -b make backups (see --suffix & --backup-dir)
+ --backup-deleted make backups only of deleted files
+ --backup-dir=DIR make backups into hierarchy based in DIR
++--backup-dir-dels=DIR backup removed files into hierarchy based in DIR
+ --suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
++--suffix-dels=SUFFIX set removed-files suffix (def. --suffix w/o b-d-d)
+ --update, -u skip files that are newer on the receiver
+ --inplace update destination files in-place
+ --append append data onto shorter files
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/errcode.h b/errcode.h
--- a/errcode.h
+++ b/errcode.h
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
+ if (*cp == '=')
+ while (*++cp == '=') {}
+ else
-+ while (isXDigit(cp)) cp++;
++ while (isHexDigit(cp)) cp++;
+ if (cp - alt_sum != MD4_DIGEST_LEN*2 || *cp != ' ')
+ break;
+ while (*++cp == ' ') {}
+ } else {
+ for (i = 0; i < flist_csum_len*2; i++, cp++) {
+ int x;
-+ if (isXDigit(cp)) {
++ if (isHexDigit(cp)) {
+ if (isDigit(cp))
+ x = *cp - '0';
+ else
+ if (*cp == '=')
+ while (*++cp == '=') {}
+ else
-+ while (isXDigit(cp)) cp++;
++ while (isHexDigit(cp)) cp++;
+ if (cp - alt_sum != MD5_DIGEST_LEN*2 || *cp != ' ')
+ break;
+ while (*++cp == ' ') {}
if (unsort_ndx)
F_NDX(file) = stats.num_dirs;
-@@ -2619,7 +2883,7 @@ struct file_list *recv_file_list(int f, int dir_ndx)
+@@ -2633,7 +2897,7 @@ struct file_list *recv_file_list(int f, int dir_ndx)
/* The --relative option sends paths with a leading slash, so we need
* to specify the strip_root option here. We rejected leading slashes
* for a non-relative transfer in recv_file_entry(). */
if (protocol_version < 30) {
/* Recv the io_error flag */
-@@ -2870,7 +3134,7 @@ void flist_free(struct file_list *flist)
+@@ -2884,7 +3148,7 @@ void flist_free(struct file_list *flist)
/* This routine ensures we don't have any duplicate names in our file list.
* duplicate names can cause corruption because of the pipelining. */
{
char fbuf[MAXPATHLEN];
int i, prev_i;
-@@ -2921,7 +3185,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2935,7 +3199,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
/* If one is a dir and the other is not, we want to
* keep the dir because it might have contents in the
* list. Otherwise keep the first one. */
struct file_struct *fp = flist->sorted[j];
if (!S_ISDIR(fp->mode))
keep = i, drop = j;
-@@ -2937,8 +3201,8 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2951,8 +3215,8 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
} else
keep = j, drop = i;
rprintf(FINFO,
"removing duplicate name %s from file list (%d)\n",
f_name(file, fbuf), drop + flist->ndx_start);
-@@ -2960,7 +3224,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2974,7 +3238,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
}
flist->high = prev_i;
continue;
statret = 1;
if (unchanged_attrs(cmpbuf, file, &alt_sx))
-diff --git a/itypes.h b/itypes.h
---- a/itypes.h
-+++ b/itypes.h
-@@ -22,6 +22,12 @@ isDigit(const char *ptr)
- return isdigit(*(unsigned char *)ptr);
- }
-
-+static inline int
-+isXDigit(const char *ptr)
-+{
-+ return isxdigit(*(unsigned char *)ptr);
-+}
-+
- static inline int
- isPrint(const char *ptr)
- {
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
+++ b/loadparm.c
-@@ -175,6 +175,7 @@ typedef struct {
+@@ -177,6 +177,7 @@ typedef struct {
BOOL temp_dir_EXP;
BOOL uid_EXP;
int max_connections;
int max_verbosity;
int syslog_facility;
-@@ -290,6 +291,7 @@ static const all_vars Defaults = {
+@@ -294,6 +295,7 @@ static const all_vars Defaults = {
/* temp_dir_EXP; */ False,
/* uid_EXP; */ False,
/* max_connections; */ 0,
/* max_verbosity; */ 1,
/* syslog_facility; */ LOG_DAEMON,
-@@ -392,6 +394,13 @@ static struct enum_list enum_facilities[] = {
+@@ -396,6 +398,13 @@ static struct enum_list enum_facilities[] = {
{ -1, NULL }
};
static struct parm_struct parm_table[] =
{
{"address", P_STRING, P_GLOBAL,&Vars.g.bind_address, NULL,0},
-@@ -406,6 +415,7 @@ static struct parm_struct parm_table[] =
+@@ -411,6 +420,7 @@ static struct parm_struct parm_table[] =
{"auth users", P_STRING, P_LOCAL, &Vars.l.auth_users, NULL,0},
{"charset", P_STRING, P_LOCAL, &Vars.l.charset, NULL,0},
{"comment", P_STRING, P_LOCAL, &Vars.l.comment, NULL,0},
{"dont compress", P_STRING, P_LOCAL, &Vars.l.dont_compress, NULL,0},
{"early exec", P_STRING, P_LOCAL, &Vars.l.early_exec, NULL,0},
-@@ -572,6 +582,7 @@ FN_LOCAL_STRING(lp_syslog_tag, syslog_tag)
+@@ -579,6 +589,7 @@ FN_LOCAL_STRING(lp_syslog_tag, syslog_tag)
FN_LOCAL_STRING(lp_temp_dir, temp_dir)
FN_LOCAL_STRING(lp_uid, uid)
int max_delete = INT_MIN;
OFF_T max_size = -1;
OFF_T min_size = -1;
-@@ -735,6 +736,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," --sumfiles=MODE use .rsyncsums to speedup --checksum mode\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");
-@@ -886,7 +888,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -739,7 +740,7 @@ enum {OPT_SERVER = 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_REFUSED_BASE = 9000};
-@@ -1037,6 +1039,7 @@ static struct poptOption long_options[] = {
+@@ -890,6 +891,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 },
-@@ -1859,6 +1862,23 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1699,6 +1701,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);
-@@ -2128,6 +2148,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1968,6 +1987,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
#endif
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -335,6 +335,7 @@ detailed description below for a complete description.
- --quiet, -q suppress non-error messages
- --no-motd suppress daemon-mode MOTD (see caveat)
- --checksum, -c skip based on checksum, not mod-time & size
-+--sumfiles=MODE use .rsyncsums to speedup --checksum mode
- --archive, -a archive mode; equals -rlptgoD (no -H,-A,-X)
- --no-OPTION turn off an implied OPTION (e.g. --no-D)
- --recursive, -r recurse into directories
-@@ -673,6 +674,8 @@ your home directory (remove the '=' for that).
+@@ -337,6 +337,7 @@ detailed description below for a complete description.
+ --quiet, -q suppress non-error messages
+ --no-motd suppress daemon-mode MOTD
+ --checksum, -c skip based on checksum, not mod-time & size
++--sumfiles=MODE use .rsyncsums to speedup --checksum mode
+ --archive, -a archive mode; equals -rlptgoD (no -H,-A,-X)
+ --no-OPTION turn off an implied OPTION (e.g. --no-D)
+ --recursive, -r recurse into directories
+@@ -675,6 +676,8 @@ your home directory (remove the '=' for that).
file that has the same size as the corresponding sender's file: files with
either a changed size or a changed checksum are selected for transfer.
Note that rsync always verifies that each _transferred_ file was correctly
reconstructed on the receiving side by checking a whole-file checksum that
is generated as the file is transferred, but that automatic
-@@ -683,6 +686,38 @@ your home directory (remove the '=' for that).
+@@ -685,6 +688,38 @@ your home directory (remove the '=' for that).
can be overridden using either the `--checksum-choice` option or an
environment variable that is discussed in that option's section.
diff --git a/rsyncd.conf.5.md b/rsyncd.conf.5.md
--- a/rsyncd.conf.5.md
+++ b/rsyncd.conf.5.md
-@@ -380,6 +380,19 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
+@@ -404,6 +404,19 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
the max connections limit is not exceeded for the modules sharing the lock
file. The default is `/var/run/rsyncd.lock`.
else
file_checksum(thisname, &st, tmp_sum);
if (sender_keeps_checksum)
-@@ -2050,6 +2263,9 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len,
+@@ -2064,6 +2277,9 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len,
closedir(d);
if (f >= 0 && recurse && !divert_dirs) {
int i, end = flist->used - 1;
/* send_if_directory() bumps flist->used, so use "end". */
-@@ -2719,6 +2935,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
+@@ -2733,6 +2949,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
rprintf(FINFO, "[%s] flist_eof=1\n", who_am_i());
}
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
+++ b/loadparm.c
-@@ -398,6 +398,10 @@ static struct enum_list enum_csum_modes[] = {
+@@ -402,6 +402,10 @@ static struct enum_list enum_csum_modes[] = {
{ CSF_IGNORE_FILES, "none" },
{ CSF_LAX_MODE, "lax" },
{ CSF_STRICT_MODE, "strict" },
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -1864,7 +1864,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1703,7 +1703,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
case OPT_SUMFILES:
arg = poptGetOptArg(pc);
|| (preserve_hard_links && F_IS_HLINKED(file)))
send_msg_int(MSG_SUCCESS, ndx);
handle_partial_dir(partialptr, PDIR_DELETE);
-@@ -919,7 +920,7 @@ int recv_files(int f_in, int f_out, char *local_name)
+@@ -908,7 +909,7 @@ int recv_files(int f_in, int f_out, char *local_name)
case 2:
break;
case 1:
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -697,9 +697,13 @@ your home directory (remove the '=' for that).
+@@ -699,9 +699,13 @@ your home directory (remove the '=' for that).
The MODE value is either "lax", for relaxed checking (which compares size
and mtime), "strict" (which also compares ctime and inode), or "none" to
diff --git a/rsyncd.conf.5.md b/rsyncd.conf.5.md
--- a/rsyncd.conf.5.md
+++ b/rsyncd.conf.5.md
-@@ -385,13 +385,15 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
+@@ -409,13 +409,15 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
This parameter tells rsync to make use of any cached checksum information
it finds in per-directory .rsyncsums files when the current transfer is
using the `--checksum` option. The value can be set to either "lax",
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
+++ b/loadparm.c
-@@ -121,6 +121,7 @@ typedef struct {
+@@ -123,6 +123,7 @@ typedef struct {
char *auth_users;
char *charset;
char *comment;
char *dont_compress;
char *early_exec;
char *exclude;
-@@ -150,6 +151,7 @@ typedef struct {
+@@ -152,6 +153,7 @@ typedef struct {
BOOL auth_users_EXP;
BOOL charset_EXP;
BOOL comment_EXP;
BOOL dont_compress_EXP;
BOOL early_exec_EXP;
BOOL exclude_EXP;
-@@ -175,6 +177,7 @@ typedef struct {
+@@ -177,6 +179,7 @@ typedef struct {
BOOL temp_dir_EXP;
BOOL uid_EXP;
int max_connections;
int max_verbosity;
int syslog_facility;
-@@ -237,6 +240,7 @@ static const all_vars Defaults = {
+@@ -241,6 +244,7 @@ static const all_vars Defaults = {
/* auth_users; */ NULL,
/* charset; */ NULL,
/* comment; */ NULL,
/* dont_compress; */ DEFAULT_DONT_COMPRESS,
/* early_exec; */ NULL,
/* exclude; */ NULL,
-@@ -265,6 +269,7 @@ static const all_vars Defaults = {
+@@ -269,6 +273,7 @@ static const all_vars Defaults = {
/* auth_users_EXP; */ False,
/* charset_EXP; */ False,
/* comment_EXP; */ False,
/* dont_compress_EXP; */ False,
/* early_exec_EXP; */ False,
/* exclude_EXP; */ False,
-@@ -290,6 +295,7 @@ static const all_vars Defaults = {
+@@ -294,6 +299,7 @@ static const all_vars Defaults = {
/* temp_dir_EXP; */ False,
/* uid_EXP; */ False,
/* max_connections; */ 0,
/* max_verbosity; */ 1,
/* syslog_facility; */ LOG_DAEMON,
-@@ -407,6 +413,8 @@ static struct parm_struct parm_table[] =
+@@ -412,6 +418,8 @@ static struct parm_struct parm_table[] =
{"auth users", P_STRING, P_LOCAL, &Vars.l.auth_users, NULL,0},
{"charset", P_STRING, P_LOCAL, &Vars.l.charset, NULL,0},
{"comment", P_STRING, P_LOCAL, &Vars.l.comment, NULL,0},
{"dont compress", P_STRING, P_LOCAL, &Vars.l.dont_compress, NULL,0},
{"early exec", P_STRING, P_LOCAL, &Vars.l.early_exec, NULL,0},
{"exclude from", P_STRING, P_LOCAL, &Vars.l.exclude_from, NULL,0},
-@@ -547,6 +555,7 @@ FN_GLOBAL_INTEGER(lp_rsync_port, rsync_port)
+@@ -554,6 +562,7 @@ FN_GLOBAL_BOOL(lp_haproxy_header, haproxy_header)
FN_LOCAL_STRING(lp_auth_users, auth_users)
FN_LOCAL_STRING(lp_charset, charset)
FN_LOCAL_STRING(lp_comment, comment)
FN_LOCAL_STRING(lp_dont_compress, dont_compress)
FN_LOCAL_STRING(lp_early_exec, early_exec)
FN_LOCAL_STRING(lp_exclude, exclude)
-@@ -572,6 +581,7 @@ FN_LOCAL_STRING(lp_syslog_tag, syslog_tag)
+@@ -579,6 +588,7 @@ FN_LOCAL_STRING(lp_syslog_tag, syslog_tag)
FN_LOCAL_STRING(lp_temp_dir, temp_dir)
FN_LOCAL_STRING(lp_uid, uid)
int remove_source_files = 0;
int one_file_system = 0;
int protocol_version = PROTOCOL_VERSION;
-@@ -847,6 +849,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," --diffserv=[0-63] specify diffserv setting \n");
-+ rprintf(F," --congestion-alg=STRING choose a congestion algo\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");
-@@ -1121,6 +1125,8 @@ static struct poptOption long_options[] = {
+@@ -974,6 +976,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 },
-@@ -1148,6 +1154,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");
-+ rprintf(F," --diffserv=[0-63] specify diffserv setting \n");
-+ rprintf(F," --congestion-alg=STRING choose a congestion algo\n");
- rprintf(F," -v, --verbose increase verbosity\n");
- rprintf(F," -4, --ipv4 prefer IPv4\n");
- rprintf(F," -6, --ipv6 prefer IPv6\n");
+diff --git a/rsync.1.md b/rsync.1.md
+--- a/rsync.1.md
++++ b/rsync.1.md
+@@ -438,6 +438,8 @@ detailed description below for a complete description.
+ --address=ADDRESS bind address for outgoing socket to daemon
+ --port=PORT specify double-colon alternate port number
+ --sockopts=OPTIONS specify custom TCP options
++--diffserv=[0-63] specify diffserv setting
++--congestion-alg=STRING choose a congestion algo
+ --blocking-io use blocking I/O for the remote shell
+ --outbuf=N|L|B set out buffering to None, Line, or Block
+ --stats give some file-transfer stats
diff --git a/socket.c b/socket.c
--- a/socket.c
+++ b/socket.c
./configure (optional if already run)
make
-based-on: c117fa4bf9976f3e5e284b87a2304398e4428208
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
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;
-@@ -768,6 +769,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," --copy-devices copy device contents as regular file\n");
- rprintf(F," --specials preserve special files\n");
- rprintf(F," -D same as --devices --specials\n");
- rprintf(F," -t, --times preserve modification times\n");
-@@ -961,6 +963,7 @@ static struct poptOption long_options[] = {
+@@ -814,6 +815,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 },
-@@ -1281,8 +1284,10 @@ static void set_refuse_options(void)
+@@ -1121,8 +1123,10 @@ static void set_refuse_options(void)
}
assert(list_end != NULL);
while (1) {
while (*ref == ' ') ref++;
-@@ -2981,6 +2986,9 @@ void server_options(char **args, int *argc_p)
+@@ -2821,6 +2825,9 @@ void server_options(char **args, int *argc_p)
else if (remove_source_files)
args[ac++] = "--remove-sent-files";
if (preallocate_files && am_sender)
args[ac++] = "--preallocate";
+diff --git a/rsync.1.md b/rsync.1.md
+--- a/rsync.1.md
++++ b/rsync.1.md
+@@ -366,6 +366,7 @@ detailed description below for a complete description.
+ --owner, -o preserve owner (super-user only)
+ --group, -g preserve group
+ --devices preserve device files (super-user only)
++--copy-devices copy device contents as regular file
+ --specials preserve special files
+ -D same as --devices --specials
+ --times, -t preserve modification times
diff --git a/rsync.c b/rsync.c
--- a/rsync.c
+++ b/rsync.c
int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
int sender_symlink_iconv = 0; /* sender should convert symlink content */
-@@ -465,6 +466,8 @@ void setup_protocol(int f_out,int f_in)
+@@ -463,6 +464,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
-@@ -630,6 +633,10 @@ void setup_protocol(int f_out,int f_in)
+@@ -628,6 +631,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;
NULL
};
-@@ -783,6 +789,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");
-+#ifdef SUPPORT_CRTIMES
-+ rprintf(F," -N, --crtimes preserve create times (newness)\n");
-+#endif
- 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");
-@@ -960,6 +969,11 @@ static struct poptOption long_options[] = {
+@@ -805,6 +811,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 },
-@@ -2664,6 +2678,10 @@ void server_options(char **args, int *argc_p)
+@@ -2496,6 +2507,10 @@ void server_options(char **args, int *argc_p)
if (preserve_atimes > 1)
argstr[x++] = 'U';
}
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -370,6 +370,7 @@ detailed description below for a complete description.
- --times, -t preserve modification times
- --atimes, -U preserve access (use) times
- --open-noatime avoid changing the atime on opened files
-+--crtimes, -N preserve create times (newness)
- --omit-dir-times, -O omit directories from --times
- --omit-link-times, -J omit symlinks from --times
- --super receiver attempts super-user activities
-@@ -1360,6 +1361,11 @@ your home directory (remove the '=' for that).
+@@ -372,6 +372,7 @@ detailed description below for a complete description.
+ --times, -t preserve modification times
+ --atimes, -U preserve access (use) times
+ --open-noatime avoid changing the atime on opened files
++--crtimes, -N preserve create times (newness)
+ --omit-dir-times, -O omit directories from --times
+ --omit-link-times, -J omit symlinks from --times
+ --super receiver attempts super-user activities
+@@ -1362,6 +1363,11 @@ your home directory (remove the '=' for that).
mounted to avoid updating the atime on read access even without the
O_NOATIME flag being set.
0. `--omit-dir-times`, `-O`
This tells rsync to omit directories when it is preserving modification
-@@ -2521,7 +2527,7 @@ your home directory (remove the '=' for that).
+@@ -2523,7 +2529,7 @@ your home directory (remove the '=' for that).
output of other verbose messages).
The "%i" escape has a cryptic output that is 11 letters long. The general
of update being done, **X** is replaced by the file-type, and the other
letters represent attributes that may be output if they are being modified.
-@@ -2578,6 +2584,8 @@ your home directory (remove the '=' for that).
+@@ -2580,6 +2586,8 @@ your home directory (remove the '=' for that).
happens when a symlink or directory is updated.
- The `a` means that the ACL information changed.
- The `x` means that the extended attribute information changed.
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
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;
-@@ -823,6 +824,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," --date-only skip files that match in mod-time\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");
-@@ -988,6 +990,7 @@ static struct poptOption long_options[] = {
+@@ -841,6 +842,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 },
-@@ -2868,6 +2871,9 @@ void server_options(char **args, int *argc_p)
+@@ -2708,6 +2710,9 @@ void server_options(char **args, int *argc_p)
else if (missing_args == 1 && !am_sender)
args[ac++] = "--ignore-missing-args";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -412,6 +412,7 @@ detailed description below for a complete description.
- --contimeout=SECONDS set daemon connection timeout in seconds
- --ignore-times, -I don't skip files that match size and time
- --size-only skip files that match in size
-+--date-only skip files that match in mod-time
- --modify-window=NUM, -@ set the accuracy for mod-time comparisons
- --temp-dir=DIR, -T create temporary files in directory DIR
- --fuzzy, -y find similar file for basis if no dest file
-@@ -635,6 +636,14 @@ your home directory (remove the '=' for that).
+@@ -414,6 +414,7 @@ detailed description below for a complete description.
+ --contimeout=SECONDS set daemon connection timeout in seconds
+ --ignore-times, -I don't skip files that match size and time
+ --size-only skip files that match in size
++--date-only skip files that match in mod-time
+ --modify-window=NUM, -@ set the accuracy for mod-time comparisons
+ --temp-dir=DIR, -T create temporary files in directory DIR
+ --fuzzy, -y find similar file for basis if no dest file
+@@ -637,6 +638,14 @@ your home directory (remove the '=' for that).
after using another mirroring system which may not preserve timestamps
exactly.
./configure
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
-@@ -26,6 +26,7 @@ aclocal.m4
+@@ -27,6 +27,7 @@ aclocal.m4
/getgroups
/gmon.out
/rsync
OBJS3=progress.o pipe.o
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 \
-@@ -78,10 +80,12 @@ install: all
+@@ -76,10 +78,12 @@ install: all
+ -${MKDIR_P} ${DESTDIR}${bindir}
${INSTALLCMD} ${INSTALL_STRIP} -m 755 rsync$(EXEEXT) ${DESTDIR}${bindir}
${INSTALLCMD} -m 755 rsync-ssl ${DESTDIR}${bindir}
- ${INSTALLCMD} -m 755 ssl-rsh ${DESTDIR}${libdir}
+ rsync -ilt rsyncdb$(EXEEXT) ${DESTDIR}${bindir}/
-${MKDIR_P} ${DESTDIR}${mandir}/man1
-${MKDIR_P} ${DESTDIR}${mandir}/man5
if test -f rsyncd.conf.5; then ${INSTALLMAN} -m 644 rsyncd.conf.5 ${DESTDIR}${mandir}/man5; fi
install-ssl-daemon: stunnel-rsyncd.conf
-@@ -99,6 +103,9 @@ install-strip:
+@@ -97,6 +101,9 @@ install-strip:
rsync$(EXEEXT): $(OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
+
$(OBJS): $(HEADERS)
$(CHECK_OBJS): $(HEADERS)
- options.o: latest-year.h
-@@ -222,7 +229,7 @@ proto.h-tstamp: $(srcdir)/*.c $(srcdir)/lib/compat.c config.h
+ options.o: latest-year.h help-rsync.h help-rsyncd.h
+@@ -240,7 +247,7 @@ proto.h-tstamp: $(srcdir)/*.c $(srcdir)/lib/compat.c config.h
awk -f $(srcdir)/mkproto.awk $(srcdir)/*.c $(srcdir)/lib/compat.c
.PHONY: man
rsync.1: rsync.1.md md2man NEWS.md Makefile
@$(srcdir)/maybe-make-man $(srcdir) rsync.1.md
-@@ -233,9 +240,12 @@ rsync-ssl.1: rsync-ssl.1.md md2man NEWS.md Makefile
+@@ -251,9 +258,12 @@ rsync-ssl.1: rsync-ssl.1.md md2man NEWS.md Makefile
rsyncd.conf.5: rsyncd.conf.5.md md2man NEWS.md Makefile
@$(srcdir)/maybe-make-man $(srcdir) rsyncd.conf.5.md
clean: cleantests
- rm -f *~ $(OBJS) $(CHECK_PROGS) $(CHECK_OBJS) $(CHECK_SYMLINKS) \
+ rm -f *~ $(OBJS) $(CHECK_PROGS) $(CHECK_OBJS) $(CHECK_SYMLINKS) rsyncdb$(EXEEXT) \
- rounding rounding.h *.old
+ rounding rounding.h *.old rsync*.1 rsync*.5 rsync*.html
.PHONY: cleantests
diff --git a/checksum.c b/checksum.c
if (unsort_ndx)
F_NDX(file) = stats.num_dirs;
-@@ -2087,6 +2089,9 @@ void send_extra_file_list(int f, int at_least)
+@@ -2101,6 +2103,9 @@ void send_extra_file_list(int f, int at_least)
finish:
if (io_error != save_io_error && protocol_version == 30 && !ignore_errors)
send_msg_int(MSG_IO_ERROR, io_error);
}
struct file_list *send_file_list(int f, int argc, char *argv[])
-@@ -2110,6 +2115,13 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
+@@ -2124,6 +2129,13 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
| (eol_nulls || reading_remotely ? RL_EOL_NULLS : 0);
int implied_dot_dir = 0;
rprintf(FLOG, "building file list\n");
if (show_filelist_progress)
start_filelist_progress("building file list");
-@@ -2455,6 +2467,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
+@@ -2469,6 +2481,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
rprintf(FINFO, "[%s] flist_eof=1\n", who_am_i());
}
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
+++ b/loadparm.c
-@@ -121,6 +121,7 @@ typedef struct {
+@@ -123,6 +123,7 @@ typedef struct {
char *auth_users;
char *charset;
char *comment;
char *dont_compress;
char *early_exec;
char *exclude;
-@@ -150,6 +151,7 @@ typedef struct {
+@@ -152,6 +153,7 @@ typedef struct {
BOOL auth_users_EXP;
BOOL charset_EXP;
BOOL comment_EXP;
BOOL dont_compress_EXP;
BOOL early_exec_EXP;
BOOL exclude_EXP;
-@@ -180,6 +182,7 @@ typedef struct {
+@@ -182,6 +184,7 @@ typedef struct {
int syslog_facility;
int timeout;
BOOL fake_super;
BOOL forward_lookup;
BOOL ignore_errors;
-@@ -237,6 +240,7 @@ static const all_vars Defaults = {
+@@ -241,6 +244,7 @@ static const all_vars Defaults = {
/* auth_users; */ NULL,
/* charset; */ NULL,
/* comment; */ NULL,
/* dont_compress; */ DEFAULT_DONT_COMPRESS,
/* early_exec; */ NULL,
/* exclude; */ NULL,
-@@ -265,6 +269,7 @@ static const all_vars Defaults = {
+@@ -269,6 +273,7 @@ static const all_vars Defaults = {
/* auth_users_EXP; */ False,
/* charset_EXP; */ False,
/* comment_EXP; */ False,
/* dont_compress_EXP; */ False,
/* early_exec_EXP; */ False,
/* exclude_EXP; */ False,
-@@ -295,6 +300,7 @@ static const all_vars Defaults = {
+@@ -299,6 +304,7 @@ static const all_vars Defaults = {
/* syslog_facility; */ LOG_DAEMON,
/* timeout; */ 0,
/* fake_super; */ False,
/* forward_lookup; */ True,
/* ignore_errors; */ False,
-@@ -407,6 +413,8 @@ static struct parm_struct parm_table[] =
+@@ -412,6 +418,8 @@ static struct parm_struct parm_table[] =
{"auth users", P_STRING, P_LOCAL, &Vars.l.auth_users, NULL,0},
{"charset", P_STRING, P_LOCAL, &Vars.l.charset, NULL,0},
{"comment", P_STRING, P_LOCAL, &Vars.l.comment, NULL,0},
{"dont compress", P_STRING, P_LOCAL, &Vars.l.dont_compress, NULL,0},
{"early exec", P_STRING, P_LOCAL, &Vars.l.early_exec, NULL,0},
{"exclude from", P_STRING, P_LOCAL, &Vars.l.exclude_from, NULL,0},
-@@ -547,6 +555,7 @@ FN_GLOBAL_INTEGER(lp_rsync_port, rsync_port)
+@@ -554,6 +562,7 @@ FN_GLOBAL_BOOL(lp_haproxy_header, haproxy_header)
FN_LOCAL_STRING(lp_auth_users, auth_users)
FN_LOCAL_STRING(lp_charset, charset)
FN_LOCAL_STRING(lp_comment, comment)
FN_LOCAL_STRING(lp_dont_compress, dont_compress)
FN_LOCAL_STRING(lp_early_exec, early_exec)
FN_LOCAL_STRING(lp_exclude, exclude)
-@@ -577,6 +586,7 @@ FN_LOCAL_INTEGER(lp_max_verbosity, max_verbosity)
+@@ -584,6 +593,7 @@ FN_LOCAL_INTEGER(lp_max_verbosity, max_verbosity)
FN_LOCAL_INTEGER(lp_syslog_facility, syslog_facility)
FN_LOCAL_INTEGER(lp_timeout, timeout)
NULL
};
-@@ -735,6 +751,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," --db=CONFIG_FILE specify a CONFIG_FILE for DB checksums\n");
-+ rprintf(F," --db-only=CONFIG_FILE behave like rsyncdb\n");
-+ rprintf(F," --db-lax ignore ctime changes (use with CAUTION)\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");
-@@ -887,6 +906,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -740,6 +756,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD,
OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG,
OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS,
OPT_REFUSED_BASE = 9000};
-@@ -1037,6 +1057,10 @@ static struct poptOption long_options[] = {
+@@ -890,6 +907,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 },
-@@ -1130,6 +1154,9 @@ static struct poptOption long_options[] = {
+@@ -983,6 +1004,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}
};
-@@ -1183,6 +1210,50 @@ static struct poptOption long_daemon_options[] = {
+@@ -1023,6 +1047,50 @@ static struct poptOption long_daemon_options[] = {
{0,0,0,0, 0, 0, 0}
};
static char err_buf[200];
-@@ -1306,6 +1377,8 @@ static void set_refuse_options(void)
+@@ -1146,6 +1214,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. */
-@@ -1430,6 +1503,102 @@ static void create_refuse_error(int which)
+@@ -1270,6 +1340,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
-@@ -1468,6 +1637,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1308,6 +1474,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
return 0;
}
set_refuse_options();
#ifdef ICONV_OPTION
-@@ -1589,6 +1764,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1429,6 +1601,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
-@@ -1663,6 +1844,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1503,6 +1681,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
preserve_devices = preserve_specials = 0;
break;
progress_init();
while (1) {
-@@ -891,6 +901,8 @@ int recv_files(int f_in, int f_out, char *local_name)
+@@ -880,6 +890,8 @@ int recv_files(int f_in, int f_out, char *local_name)
do_unlink(partialptr);
handle_partial_dir(partialptr, PDIR_DELETE);
}
} else if (keep_partial && partialptr && !one_inplace) {
if (!handle_partial_dir(partialptr, PDIR_CREATE)) {
rprintf(FERROR,
-@@ -904,6 +916,8 @@ int recv_files(int f_in, int f_out, char *local_name)
+@@ -893,6 +905,8 @@ int recv_files(int f_in, int f_out, char *local_name)
recv_ok = -1;
else if (delay_updates && recv_ok) {
bitbag_set_bit(delayed_bits, ndx);
recv_ok = 2;
} else
partialptr = NULL;
+diff --git a/rsync.1.md b/rsync.1.md
+--- a/rsync.1.md
++++ b/rsync.1.md
+@@ -381,6 +381,9 @@ detailed description below for a complete description.
+ --dry-run, -n perform a trial run with no changes made
+ --whole-file, -W copy files whole (w/o delta-xfer algorithm)
+ --checksum-choice=STR choose the checksum algorithms
++--db=CONFIG_FILE specify a CONFIG_FILE for DB checksums
++--db-only=CONFIG_FILE behave like rsyncdb
++--db-lax ignore ctime changes (use with CAUTION)
+ --one-file-system, -x don't cross filesystem boundaries
+ --block-size=SIZE, -B force a fixed checksum block-size
+ --rsh=COMMAND, -e specify the remote shell to use
diff --git a/rsync.c b/rsync.c
--- a/rsync.c
+++ b/rsync.c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -828,6 +828,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," --detect-renamed-lax ... and assume identical to source files (risky!)\n");
-+ rprintf(F," --detect-moved ... only if basenames match (less risky)\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");
-@@ -1043,7 +1045,9 @@ static struct poptOption long_options[] = {
+@@ -895,7 +895,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 },
-@@ -2855,8 +2859,14 @@ void server_options(char **args, int *argc_p)
+@@ -2694,8 +2696,14 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -416,6 +416,8 @@ detailed description below for a complete description.
- --temp-dir=DIR, -T create temporary files in directory DIR
- --fuzzy, -y find similar file for basis if no dest file
- --detect-renamed try to find renamed files to speed the xfer
-+--detect-renamed-lax ...& assume identical to src files (risky!)
-+--detect-moved ... only if basenames match (less risky)
- --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
-@@ -2167,6 +2169,17 @@ your home directory (remove the '=' for that).
+@@ -418,6 +418,8 @@ detailed description below for a complete description.
+ --temp-dir=DIR, -T create temporary files in directory DIR
+ --fuzzy, -y find similar file for basis if no dest file
+ --detect-renamed try to find renamed files to speed the xfer
++--detect-renamed-lax ...& assume identical to src files (risky!)
++--detect-moved ... only if basenames match (less risky)
+ --compare-dest=DIR also compare destination files relative to DIR
+ --copy-dest=DIR ... and include copies of unchanged files
+ --link-dest=DIR hardlink to files in DIR when unchanged
+@@ -2169,6 +2171,17 @@ your home directory (remove the '=' for that).
otential alternate-basis files will be removed as the transfer progresses.
This option conflicts with `--inplace` and `--append`.
a file that can't use it, while missing out on giving it to a file
that could use it.
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
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;
-@@ -158,6 +159,7 @@ void set_allow_inc_recurse(void)
+@@ -156,6 +157,7 @@ void set_allow_inc_recurse(void)
allow_inc_recurse = 0;
else if (!am_sender
&& (delete_before || delete_after
static void send_directory(int f, struct file_list *flist,
char *fbuf, int len, int flags);
-@@ -2621,6 +2663,25 @@ struct file_list *recv_file_list(int f, int dir_ndx)
+@@ -2635,6 +2677,25 @@ struct file_list *recv_file_list(int f, int dir_ndx)
* for a non-relative transfer in recv_file_entry(). */
flist_sort_and_clean(flist, relative_paths);
int implied_dirs = 1;
int missing_args = 0; /* 0 = FERROR_XFER, 1 = ignore, 2 = delete */
int numeric_ids = 0;
-@@ -826,6 +827,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," --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");
-@@ -1041,6 +1043,7 @@ static struct poptOption long_options[] = {
+@@ -894,6 +895,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 },
-@@ -2440,7 +2443,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2280,7 +2282,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
inplace = 1;
}
partial_dir = tmp_partialdir;
if (inplace) {
-@@ -2449,6 +2452,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2289,6 +2291,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;
}
-@@ -2851,6 +2855,8 @@ void server_options(char **args, int *argc_p)
+@@ -2691,6 +2694,8 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -415,6 +415,7 @@ detailed description below for a complete description.
- --modify-window=NUM, -@ set the accuracy for mod-time comparisons
- --temp-dir=DIR, -T create temporary files in directory DIR
- --fuzzy, -y find similar file for basis if no dest file
-+--detect-renamed try to find renamed files to speed the xfer
- --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
-@@ -2150,6 +2151,22 @@ your home directory (remove the '=' for that).
+@@ -417,6 +417,7 @@ detailed description below for a complete description.
+ --modify-window=NUM, -@ set the accuracy for mod-time comparisons
+ --temp-dir=DIR, -T create temporary files in directory DIR
+ --fuzzy, -y find similar file for basis if no dest file
++--detect-renamed try to find renamed files to speed the xfer
+ --compare-dest=DIR also compare destination files relative to DIR
+ --copy-dest=DIR ... and include copies of unchanged files
+ --link-dest=DIR hardlink to files in DIR when unchanged
+@@ -2152,6 +2153,22 @@ your home directory (remove the '=' for that).
fuzzy-match files, so either use `--delete-after` or specify some filename
exclusions if you need to prevent this.
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
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;
-@@ -813,6 +814,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," --direct-io don't use buffer cache for xfer file I/O\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");
-@@ -1061,6 +1063,8 @@ static struct poptOption long_options[] = {
+@@ -914,6 +915,8 @@ static struct poptOption long_options[] = {
{"partial-dir", 0, POPT_ARG_STRING, &partial_dir, 0, 0, 0 },
{"delay-updates", 0, POPT_ARG_VAL, &delay_updates, 1, 0, 0 },
{"no-delay-updates", 0, POPT_ARG_VAL, &delay_updates, 0, 0, 0 },
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -403,6 +403,7 @@ detailed description below for a complete description.
- --partial keep partially transferred files
- --partial-dir=DIR put a partially transferred file into DIR
- --delay-updates put all updated files into place at end
-+--direct-io don't use buffer cache for xfer file I/O
- --prune-empty-dirs, -m prune empty directory chains from file-list
- --numeric-ids don't map uid/gid values by user/group name
- --usermap=STRING custom username mapping
-@@ -2797,6 +2798,16 @@ your home directory (remove the '=' for that).
+@@ -405,6 +405,7 @@ detailed description below for a complete description.
+ --partial keep partially transferred files
+ --partial-dir=DIR put a partially transferred file into DIR
+ --delay-updates put all updated files into place at end
++--direct-io don't use buffer cache for xfer file I/O
+ --prune-empty-dirs, -m prune empty directory chains from file-list
+ --numeric-ids don't map uid/gid values by user/group name
+ --usermap=STRING custom username mapping
+@@ -2799,6 +2800,16 @@ your home directory (remove the '=' for that).
update algorithm that is even more atomic (it uses `--link-dest` and a
parallel hierarchy of files).
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
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;
-@@ -744,6 +745,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," -w, --downdate skip files that are older 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");
-@@ -992,6 +994,7 @@ static struct poptOption long_options[] = {
+@@ -845,6 +846,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 },
{"existing", 0, POPT_ARG_NONE, &ignore_non_existing, 0, 0, 0 },
{"ignore-non-existing",0,POPT_ARG_NONE, &ignore_non_existing, 0, 0, 0 },
{"ignore-existing", 0, POPT_ARG_NONE, &ignore_existing, 0, 0, 0 },
+diff --git a/rsync.1.md b/rsync.1.md
+--- a/rsync.1.md
++++ b/rsync.1.md
+@@ -346,6 +346,7 @@ detailed description below for a complete description.
+ --backup-dir=DIR make backups into hierarchy based in DIR
+ --suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
+ --update, -u skip files that are newer on the receiver
++--downdate, -w skip files that are older on the receiver
+ --inplace update destination files in-place
+ --append append data onto shorter files
+ --append-verify --append w/old data in file checksum
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
int sender_symlink_iconv = 0; /* sender should convert symlink content */
-@@ -471,6 +473,8 @@ void setup_protocol(int f_out,int f_in)
+@@ -469,6 +471,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)
-@@ -626,6 +630,10 @@ void setup_protocol(int f_out,int f_in)
+@@ -624,6 +628,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;
NULL
};
-@@ -757,6 +764,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");
-+#ifdef SUPPORT_FILEFLAGS
-+ rprintf(F," --fileflags preserve file-flags (aka chflags)\n");
-+#endif
- rprintf(F," -E, --executability preserve the file's executability\n");
- rprintf(F," --chmod=CHMOD affect file and/or directory permissions\n");
- #ifdef SUPPORT_ACLS
-@@ -806,7 +816,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," --force force deletion of directories even if not empty\n");
-+ rprintf(F," --force-delete force deletion of directories even if not empty\n");
-+#ifdef SUPPORT_FORCE_CHANGE
-+ rprintf(F," --force-change affect user-/system-immutable files/dirs\n");
-+ rprintf(F," --force-uchange affect user-immutable files/dirs\n");
-+ rprintf(F," --force-schange affect system-immutable files/dirs\n");
-+#endif
- 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");
-@@ -926,6 +941,10 @@ static struct poptOption long_options[] = {
+@@ -779,6 +786,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 },
-@@ -1019,6 +1038,14 @@ static struct poptOption long_options[] = {
+@@ -872,6 +883,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 },
-@@ -2742,6 +2769,9 @@ void server_options(char **args, int *argc_p)
+@@ -2582,6 +2601,9 @@ void server_options(char **args, int *argc_p)
if (xfer_dirs && !recurse && delete_mode && am_sender)
args[ac++] = "--no-r";
if (do_compression && do_compression_level != CLVL_NOT_SPECIFIED) {
if (asprintf(&arg, "--compress-level=%d", do_compression_level) < 0)
goto oom;
-@@ -2845,6 +2875,16 @@ void server_options(char **args, int *argc_p)
+@@ -2685,6 +2707,16 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--delete-excluded";
if (force_delete)
args[ac++] = "--force";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -357,6 +357,7 @@ detailed description below for a complete description.
- --keep-dirlinks, -K treat symlinked dir on receiver as dir
- --hard-links, -H preserve hard links
- --perms, -p preserve permissions
-+--fileflags preserve file-flags (aka chflags)
- --executability, -E preserve executability
- --chmod=CHMOD affect file and/or directory permissions
- --acls, -A preserve ACLs (implies -p)
-@@ -396,7 +397,10 @@ detailed description below for a complete description.
- --ignore-missing-args ignore missing source args without error
- --delete-missing-args delete missing source args from destination
- --ignore-errors delete even if there are I/O errors
----force force deletion of dirs even if not empty
-+--force-delete force deletion of dirs even if not empty
-+--force-change affect user/system immutable files/dirs
-+--force-uchange affect user-immutable files/dirs
-+--force-schange affect system-immutable files/dirs
- --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
-@@ -692,6 +696,8 @@ your home directory (remove the '=' for that).
+@@ -359,6 +359,7 @@ detailed description below for a complete description.
+ --keep-dirlinks, -K treat symlinked dir on receiver as dir
+ --hard-links, -H preserve hard links
+ --perms, -p preserve permissions
++--fileflags preserve file-flags (aka chflags)
+ --executability, -E preserve executability
+ --chmod=CHMOD affect file and/or directory permissions
+ --acls, -A preserve ACLs (implies --perms)
+@@ -398,7 +399,10 @@ detailed description below for a complete description.
+ --ignore-missing-args ignore missing source args without error
+ --delete-missing-args delete missing source args from destination
+ --ignore-errors delete even if there are I/O errors
+---force force deletion of dirs even if not empty
++--force-delete force deletion of directories even if not empty
++--force-change affect user-/system-immutable files/dirs
++--force-uchange affect user-immutable files/dirs
++--force-schange affect system-immutable files/dirs
+ --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
+@@ -694,6 +698,8 @@ your home directory (remove the '=' for that).
Note that `-a` **does not preserve hardlinks**, because finding
multiply-linked files is expensive. You must separately specify `-H`.
0. `--no-OPTION`
-@@ -1030,7 +1036,7 @@ your home directory (remove the '=' for that).
+@@ -1032,7 +1038,7 @@ your home directory (remove the '=' for that).
Without this option, if the sending side has replaced a directory with a
symlink to a directory, the receiving side will delete anything that is in
the way of the new symlink, including a directory hierarchy (as long as
See also `--keep-dirlinks` for an analogous option for the receiving side.
-@@ -1216,6 +1222,29 @@ your home directory (remove the '=' for that).
+@@ -1218,6 +1224,29 @@ your home directory (remove the '=' for that).
those used by `--fake-super`) unless you repeat the option (e.g. `-XX`).
This "copy all xattrs" mode cannot be used with `--fake-super`.
0. `--chmod`
This option tells rsync to apply one or more comma-separated "chmod" modes
-@@ -1670,7 +1699,7 @@ your home directory (remove the '=' for that).
+@@ -1672,7 +1701,7 @@ your home directory (remove the '=' for that).
option a step farther: each missing arg will become a deletion request of
the corresponding destination file on the receiving side (should it exist).
If the destination file is a non-empty directory, it will only be
that, this option is independent of any other type of delete processing.
The missing source files are represented by special file-list entries which
-@@ -1681,15 +1710,16 @@ your home directory (remove the '=' for that).
+@@ -1683,15 +1712,16 @@ your home directory (remove the '=' for that).
Tells `--delete` to go ahead and delete files even when there are I/O
errors.
0. `--max-delete=NUM`
-@@ -2491,7 +2521,7 @@ your home directory (remove the '=' for that).
+@@ -2493,7 +2523,7 @@ your home directory (remove the '=' for that).
output of other verbose messages).
The "%i" escape has a cryptic output that is 11 letters long. The general
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
if (S_ISDIR(st.st_mode)) {
if (!xfer_dirs) {
-@@ -1431,12 +1438,23 @@ static struct file_struct *send_file_name(int f, struct file_list *flist,
+@@ -1445,12 +1452,23 @@ static struct file_struct *send_file_name(int f, struct file_list *flist,
int flags, int filter_level)
{
struct file_struct *file;
file->mode = tweak_mode(file->mode, chmod_modes);
if (f >= 0) {
-@@ -2341,7 +2359,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
+@@ -2355,7 +2373,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
struct file_struct *file;
file = send_file_name(f, flist, fbuf, &st,
FLAG_TOP_DIR | FLAG_CONTENT_DIR | flags,
if (!file)
continue;
if (inc_recurse) {
-@@ -2355,7 +2373,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
+@@ -2369,7 +2387,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
} else
send_if_directory(f, flist, file, fbuf, len, flags);
} else
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -1239,7 +1239,9 @@ your home directory (remove the '=' for that).
+@@ -1241,7 +1241,9 @@ your home directory (remove the '=' for that).
> --chmod=D2775,F664
It is also legal to specify multiple `--chmod` options, as each additional
See the `--perms` and `--executability` options for how the resulting
permission value can be applied to the files in the transfer.
-@@ -2428,6 +2430,10 @@ your home directory (remove the '=' for that).
+@@ -2430,6 +2432,10 @@ your home directory (remove the '=' for that).
If you specify "--chown=foo:bar, this is exactly the same as specifying
"`--usermap=*:foo --groupmap=*:bar`", only easier.
0. `--timeout=TIMEOUT`
This option allows you to set a maximum I/O timeout in seconds. If no data
-@@ -3351,6 +3357,15 @@ The following modifiers are accepted after a "`+`" or "`-`":
+@@ -3353,6 +3359,15 @@ The following modifiers are accepted after a "`+`" or "`-`":
rules that exclude things like "CVS" and "`*.o`" are marked as perishable,
and will not prevent a directory that was removed on the source from being
deleted on the destination.
- An `x` indicates that a rule affects xattr names in xattr copy/delete
operations (and is thus ignored when matching file/dir names). If no
xattr-matching rules are specified, a default xattr filtering rule is used
-@@ -3408,6 +3423,12 @@ The following modifiers are accepted after a merge or dir-merge rule:
+@@ -3410,6 +3425,12 @@ The following modifiers are accepted after a merge or dir-merge rule:
rules in the file must not specify sides (via a modifier or a rule prefix
such as `hide`).
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
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;
-@@ -814,6 +815,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," --fsync fsync every written file\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");
-@@ -1096,6 +1098,7 @@ static struct poptOption long_options[] = {
+@@ -949,6 +950,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 },
-@@ -2931,6 +2934,9 @@ void server_options(char **args, int *argc_p)
+@@ -2771,6 +2773,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = tmpdir;
}
if (mapbuf)
unmap_file(mapbuf);
+diff --git a/rsync.1.md b/rsync.1.md
+--- a/rsync.1.md
++++ b/rsync.1.md
+@@ -406,6 +406,7 @@ detailed description below for a complete description.
+ --partial-dir=DIR put a partially transferred file into DIR
+ --delay-updates put all updated files into place at end
+ --prune-empty-dirs, -m prune empty directory chains from file-list
++--fsync fsync every written file
+ --numeric-ids don't map uid/gid values by user/group name
+ --usermap=STRING custom username mapping
+ --groupmap=STRING custom groupname mapping
diff --git a/t_stub.c b/t_stub.c
--- a/t_stub.c
+++ b/t_stub.c
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
-@@ -1611,6 +1611,9 @@ static struct file_struct *send_file_name(int f, struct file_list *flist,
+@@ -1625,6 +1625,9 @@ static struct file_struct *send_file_name(int f, struct file_list *flist,
#ifdef SUPPORT_XATTRS
if (preserve_xattrs) {
sx.st.st_mode = file->mode;
int preserve_perms = 0;
int preserve_fileflags = 0;
int preserve_executability = 0;
-@@ -780,6 +781,10 @@ void usage(enum logcode F)
- #endif
- #ifdef SUPPORT_XATTRS
- rprintf(F," -X, --xattrs preserve extended attributes\n");
-+#endif
-+#ifdef SUPPORT_HFS_COMPRESSION
-+ rprintf(F," --hfs-compression preserve HFS compression if supported\n");
-+ rprintf(F," --protect-decmpfs preserve HFS compression as xattrs\n");
- #endif
- rprintf(F," -o, --owner preserve owner (super-user only)\n");
- rprintf(F," -g, --group preserve group\n");
-@@ -1059,6 +1064,12 @@ static struct poptOption long_options[] = {
+@@ -901,6 +902,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 },
-@@ -2169,6 +2180,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1998,6 +2005,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
-@@ -2790,6 +2810,11 @@ void server_options(char **args, int *argc_p)
+@@ -2619,6 +2635,11 @@ void server_options(char **args, int *argc_p)
if (preserve_fileflags)
args[ac++] = "--fileflags";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -362,6 +362,8 @@ detailed description below for a complete description.
- --chmod=CHMOD affect file and/or directory permissions
- --acls, -A preserve ACLs (implies -p)
- --xattrs, -X preserve extended attributes
-+--hfs-compression preserve HFS compression if supported
-+--protect-decmpfs preserve HFS compression as xattrs
- --owner, -o preserve owner (super-user only)
- --group, -g preserve group
- --devices preserve device files (super-user only)
-@@ -1246,6 +1248,47 @@ your home directory (remove the '=' for that).
+@@ -364,6 +364,8 @@ detailed description below for a complete description.
+ --chmod=CHMOD affect file and/or directory permissions
+ --acls, -A preserve ACLs (implies --perms)
+ --xattrs, -X preserve extended attributes
++--hfs-compression preserve HFS compression if supported
++--protect-decmpfs preserve HFS compression as xattrs
+ --owner, -o preserve owner (super-user only)
+ --group, -g preserve group
+ --devices preserve device files (super-user only)
+@@ -1248,6 +1250,47 @@ your home directory (remove the '=' for that).
receiving side. It does not try to affect user flags. This option
overrides `--force-change` and `--force-uchange`.
- Make this code handle multibyte character encodings, and honor the
--iconv setting when converting case.
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
extern int ignore_errors;
extern int numeric_ids;
extern int quiet;
-@@ -3110,6 +3111,7 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
+@@ -3124,6 +3125,7 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
{
int dif;
const uchar *c1, *c2;
enum fnc_state state1, state2;
enum fnc_type type1, type2;
enum fnc_type t_path = protocol_version >= 29 ? t_PATH : t_ITEM;
-@@ -3220,7 +3222,15 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
+@@ -3234,7 +3236,15 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
if (type1 != type2)
return type1 == t_PATH ? 1 : -1;
}
int blocking_io = -1;
int checksum_seed = 0;
int inplace = 0;
-@@ -844,6 +845,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," --ignore-case ignore case when comparing filenames\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");
-@@ -1081,6 +1083,8 @@ static struct poptOption long_options[] = {
+@@ -934,6 +935,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},
-@@ -2881,6 +2885,9 @@ void server_options(char **args, int *argc_p)
+@@ -2721,6 +2724,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -433,6 +433,7 @@ detailed description below for a complete description.
- --from0, -0 all *from/filter files are delimited by 0s
- --protect-args, -s no space-splitting; wildcard chars only
- --copy-as=USER[:GROUP] specify user & optional group for the copy
-+--ignore-case ignore case when comparing filenames
- --address=ADDRESS bind address for outgoing socket to daemon
- --port=PORT specify double-colon alternate port number
- --sockopts=OPTIONS specify custom TCP options
-@@ -2098,6 +2099,12 @@ your home directory (remove the '=' for that).
+@@ -435,6 +435,7 @@ detailed description below for a complete description.
+ --from0, -0 all *-from/filter files are delimited by 0s
+ --protect-args, -s no space-splitting; wildcard chars only
+ --copy-as=USER[:GROUP] specify user & optional group for the copy
++--ignore-case ignore case when comparing filenames
+ --address=ADDRESS bind address for outgoing socket to daemon
+ --port=PORT specify double-colon alternate port number
+ --sockopts=OPTIONS specify custom TCP options
+@@ -2100,6 +2101,12 @@ your home directory (remove the '=' for that).
> sudo rsync -aive lsh -M--copy-as=joe src/ lh:dest/
./configure
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
+++ b/loadparm.c
-@@ -192,6 +192,7 @@ typedef struct {
+@@ -194,6 +194,7 @@ typedef struct {
BOOL strict_modes;
BOOL transfer_logging;
BOOL use_chroot;
BOOL write_only;
} local_vars;
-@@ -307,6 +308,7 @@ static const all_vars Defaults = {
+@@ -311,6 +312,7 @@ static const all_vars Defaults = {
/* strict_modes; */ True,
/* transfer_logging; */ False,
/* use_chroot; */ True,
/* write_only; */ False,
}
};
-@@ -449,6 +451,7 @@ static struct parm_struct parm_table[] =
+@@ -454,6 +456,7 @@ static struct parm_struct parm_table[] =
{"transfer logging", P_BOOL, P_LOCAL, &Vars.l.transfer_logging, NULL,0},
{"uid", P_STRING, P_LOCAL, &Vars.l.uid, NULL,0},
{"use chroot", P_BOOL, P_LOCAL, &Vars.l.use_chroot, NULL,0},
{"write only", P_BOOL, P_LOCAL, &Vars.l.write_only, NULL,0},
{NULL, P_BOOL, P_NONE, NULL, NULL,0}
};
-@@ -589,6 +592,7 @@ FN_LOCAL_BOOL(lp_reverse_lookup, reverse_lookup)
+@@ -596,6 +599,7 @@ FN_LOCAL_BOOL(lp_reverse_lookup, reverse_lookup)
FN_LOCAL_BOOL(lp_strict_modes, strict_modes)
FN_LOCAL_BOOL(lp_transfer_logging, transfer_logging)
FN_LOCAL_BOOL(lp_use_chroot, use_chroot)
./configure
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
+++ b/loadparm.c
-@@ -132,6 +132,7 @@ typedef struct {
+@@ -134,6 +134,7 @@ typedef struct {
char *include;
char *include_from;
char *incoming_chmod;
char *lock_file;
char *log_file;
char *log_format;
-@@ -161,6 +162,7 @@ typedef struct {
+@@ -163,6 +164,7 @@ typedef struct {
BOOL include_EXP;
BOOL include_from_EXP;
BOOL incoming_chmod_EXP;
BOOL lock_file_EXP;
BOOL log_file_EXP;
BOOL log_format_EXP;
-@@ -248,6 +250,7 @@ static const all_vars Defaults = {
+@@ -252,6 +254,7 @@ static const all_vars Defaults = {
/* include; */ NULL,
/* include_from; */ NULL,
/* incoming_chmod; */ NULL,
/* lock_file; */ DEFAULT_LOCK_FILE,
/* log_file; */ NULL,
/* log_format; */ "%o %h [%a] %m (%u) %f %l",
-@@ -276,6 +279,7 @@ static const all_vars Defaults = {
+@@ -280,6 +283,7 @@ static const all_vars Defaults = {
/* include_EXP; */ False,
/* include_from_EXP; */ False,
/* incoming_chmod_EXP; */ False,
/* lock_file_EXP; */ False,
/* log_file_EXP; */ False,
/* log_format_EXP; */ False,
-@@ -422,6 +426,7 @@ static struct parm_struct parm_table[] =
+@@ -427,6 +431,7 @@ static struct parm_struct parm_table[] =
{"include from", P_STRING, P_LOCAL, &Vars.l.include_from, NULL,0},
{"include", P_STRING, P_LOCAL, &Vars.l.include, NULL,0},
{"incoming chmod", P_STRING, P_LOCAL, &Vars.l.incoming_chmod, NULL,0},
{"list", P_BOOL, P_LOCAL, &Vars.l.list, NULL,0},
{"lock file", P_STRING, P_LOCAL, &Vars.l.lock_file, NULL,0},
{"log file", P_STRING, P_LOCAL, &Vars.l.log_file, NULL,0},
-@@ -558,6 +563,7 @@ FN_LOCAL_STRING(lp_hosts_deny, hosts_deny)
+@@ -565,6 +570,7 @@ FN_LOCAL_STRING(lp_hosts_deny, hosts_deny)
FN_LOCAL_STRING(lp_include, include)
FN_LOCAL_STRING(lp_include_from, include_from)
FN_LOCAL_STRING(lp_incoming_chmod, incoming_chmod)
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)"),
-@@ -829,6 +831,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," --link-by-hash=DIR create hardlinks by hash into DIR\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");
-@@ -886,7 +889,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -739,7 +741,7 @@ enum {OPT_SERVER = 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_REFUSED_BASE = 9000};
-@@ -1041,6 +1044,7 @@ static struct poptOption long_options[] = {
+@@ -894,6 +896,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 },
-@@ -1475,6 +1479,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1315,6 +1318,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
-@@ -1971,6 +1978,21 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1811,6 +1817,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. */
-@@ -2281,6 +2303,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2121,6 +2142,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;
-@@ -2956,6 +2980,12 @@ void server_options(char **args, int *argc_p)
+@@ -2796,6 +2819,12 @@ void server_options(char **args, int *argc_p)
} else if (inplace)
args[ac++] = "--inplace";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -418,6 +418,7 @@ detailed description below for a complete description.
- --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
-+--link-by-hash=DIR create hardlinks by hash into DIR
- --compress, -z compress file data during the transfer
- --compress-level=NUM explicitly set compression level
- --skip-compress=LIST skip compressing files with suffix in LIST
-@@ -2234,6 +2235,50 @@ your home directory (remove the '=' for that).
+@@ -420,6 +420,7 @@ detailed description below for a complete description.
+ --compare-dest=DIR also compare destination files relative to DIR
+ --copy-dest=DIR ... and include copies of unchanged files
+ --link-dest=DIR hardlink to files in DIR when unchanged
++--link-by-hash=DIR create hardlinks by hash into DIR
+ --compress, -z compress file data during the transfer
+ --compress-level=NUM explicitly set compression level
+ --skip-compress=LIST skip compressing files with suffix in LIST
+@@ -2236,6 +2237,50 @@ your home directory (remove the '=' for that).
specified (or implied by `-a`). You can work-around this bug by avoiding
the `-o` option when sending to an old rsync.
diff --git a/rsyncd.conf.5.md b/rsyncd.conf.5.md
--- a/rsyncd.conf.5.md
+++ b/rsyncd.conf.5.md
-@@ -315,6 +315,23 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
+@@ -339,6 +339,23 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
is 0, which means no limit. A negative value disables the module. See
also the "lock file" parameter.
fast fallback for the case where xxHash libraries are not available at
build time.
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
lib/permstring.o lib/pool_alloc.o lib/sysacls.o lib/sysxattrs.o @LIBOBJS@
zlib_OBJS=zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o \
zlib/trees.o zlib/zutil.o zlib/adler32.o zlib/compress.o zlib/crc32.o
-@@ -126,6 +126,9 @@ rounding.h: rounding.c rsync.h proto.h
+@@ -144,6 +144,9 @@ rounding.h: rounding.c rsync.h proto.h
simd-checksum-x86_64.o: simd-checksum-x86_64.cpp
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/authenticate.c b/authenticate.c
--- a/authenticate.c
+++ b/authenticate.c
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
+++ b/loadparm.c
-@@ -136,6 +136,7 @@ typedef struct {
+@@ -138,6 +138,7 @@ typedef struct {
char *log_file;
char *log_format;
char *name;
char *outgoing_chmod;
char *path;
char *postxfer_exec;
-@@ -165,6 +166,7 @@ typedef struct {
+@@ -167,6 +168,7 @@ typedef struct {
BOOL log_file_EXP;
BOOL log_format_EXP;
BOOL name_EXP;
BOOL outgoing_chmod_EXP;
BOOL path_EXP;
BOOL postxfer_exec_EXP;
-@@ -252,6 +254,7 @@ static const all_vars Defaults = {
+@@ -256,6 +258,7 @@ static const all_vars Defaults = {
/* log_file; */ NULL,
/* log_format; */ "%o %h [%a] %m (%u) %f %l",
/* name; */ NULL,
/* outgoing_chmod; */ NULL,
/* path; */ NULL,
/* postxfer_exec; */ NULL,
-@@ -280,6 +283,7 @@ static const all_vars Defaults = {
+@@ -284,6 +287,7 @@ static const all_vars Defaults = {
/* log_file_EXP; */ False,
/* log_format_EXP; */ False,
/* name_EXP; */ False,
/* outgoing_chmod_EXP; */ False,
/* path_EXP; */ False,
/* postxfer_exec_EXP; */ False,
-@@ -430,6 +434,7 @@ static struct parm_struct parm_table[] =
+@@ -435,6 +439,7 @@ static struct parm_struct parm_table[] =
{"max verbosity", P_INTEGER,P_LOCAL, &Vars.l.max_verbosity, NULL,0},
{"munge symlinks", P_BOOL, P_LOCAL, &Vars.l.munge_symlinks, NULL,0},
{"name", P_STRING, P_LOCAL, &Vars.l.name, NULL,0},
{"numeric ids", P_BOOL, P_LOCAL, &Vars.l.numeric_ids, NULL,0},
{"outgoing chmod", P_STRING, P_LOCAL, &Vars.l.outgoing_chmod, NULL,0},
{"path", P_PATH, P_LOCAL, &Vars.l.path, NULL,0},
-@@ -566,6 +571,7 @@ FN_LOCAL_STRING(lp_outgoing_chmod, outgoing_chmod)
+@@ -573,6 +578,7 @@ FN_LOCAL_STRING(lp_outgoing_chmod, outgoing_chmod)
FN_LOCAL_STRING(lp_path, path)
FN_LOCAL_STRING(lp_postxfer_exec, postxfer_exec)
FN_LOCAL_STRING(lp_prexfer_exec, prexfer_exec)
diff --git a/rsyncd.conf.5.md b/rsyncd.conf.5.md
--- a/rsyncd.conf.5.md
+++ b/rsyncd.conf.5.md
-@@ -292,6 +292,29 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
+@@ -316,6 +316,29 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
There are tricky ways to work around this, though, so you had better trust
your users if you choose this combination of parameters.
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/access.c b/access.c
--- a/access.c
+++ b/access.c
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
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;
-@@ -775,6 +776,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," --omit-dir-changes omit directories from any attribute changes\n");
- rprintf(F," --super receiver attempts super-user activities\n");
- #ifdef SUPPORT_XATTRS
- rprintf(F," --fake-super store/recover privileged attrs using xattrs\n");
-@@ -947,6 +949,7 @@ static struct poptOption long_options[] = {
+@@ -800,6 +801,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 },
-@@ -2349,6 +2352,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2189,6 +2191,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)
-@@ -2601,6 +2607,8 @@ void server_options(char **args, int *argc_p)
+@@ -2441,6 +2446,8 @@ void server_options(char **args, int *argc_p)
argstr[x++] = 'O';
if (omit_link_times)
argstr[x++] = 'J';
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -371,6 +371,7 @@ detailed description below for a complete description.
- --open-noatime avoid changing the atime on opened files
- --omit-dir-times, -O omit directories from --times
- --omit-link-times, -J omit symlinks from --times
-+--omit-dir-changes omit directories from any attribute changes
- --super receiver attempts super-user activities
- --fake-super store/recover privileged attrs using xattrs
- --sparse, -S turn sequences of nulls into sparse blocks
-@@ -1354,6 +1355,11 @@ your home directory (remove the '=' for that).
+@@ -373,6 +373,7 @@ detailed description below for a complete description.
+ --open-noatime avoid changing the atime on opened files
+ --omit-dir-times, -O omit directories from --times
+ --omit-link-times, -J omit symlinks from --times
++--omit-dir-changes omit directories from any attribute changes
+ --super receiver attempts super-user activities
+ --fake-super store/recover privileged attrs using xattrs
+ --sparse, -S turn sequences of nulls into sparse blocks
+@@ -1356,6 +1357,11 @@ your home directory (remove the '=' for that).
This tells rsync to omit symlinks when it is preserving modification times
(see `--times`).
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
extern uid_t our_uid;
extern struct stats stats;
extern char *filesfrom_host;
-@@ -1775,6 +1776,9 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len,
+@@ -1789,6 +1790,9 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len,
}
send_file_name(f, flist, fbuf, NULL, flags, filter_level);
size_t bwlimit_writemax = 0;
int ignore_existing = 0;
int ignore_non_existing = 0;
-@@ -860,6 +861,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");
-+ rprintf(F," --slow-down=USECs sleep N usec while creating the filelist\n");
- #ifdef HAVE_SETVBUF
- rprintf(F," --outbuf=N|L|B set output buffering to None, Line, or Block\n");
- #endif
-@@ -1071,6 +1073,7 @@ static struct poptOption long_options[] = {
+@@ -924,6 +925,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 },
{"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 },
+diff --git a/rsync.1.md b/rsync.1.md
+--- a/rsync.1.md
++++ b/rsync.1.md
+@@ -453,6 +453,7 @@ detailed description below for a complete description.
+ --password-file=FILE read daemon-access password from FILE
+ --list-only list the files instead of copying them
+ --bwlimit=RATE limit socket I/O bandwidth
++--slow-down=USECs sleep N usec while creating the filelist
+ --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
TODO: the configure changes should abort if the user requests --enable-slp
and we can't honor that request.
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
popt/popthelp.o popt/poptparse.o
OBJS=$(OBJS1) $(OBJS2) $(OBJS3) @SIMD@ $(DAEMON_OBJ) $(LIBOBJ) @BUILD_ZLIB@ @BUILD_POPT@
-@@ -97,7 +99,7 @@ install-strip:
+@@ -95,7 +97,7 @@ install-strip:
$(MAKE) INSTALL_STRIP='-s' install
rsync$(EXEEXT): $(OBJS)
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
-@@ -1350,6 +1350,13 @@ int daemon_main(void)
+@@ -1353,6 +1353,13 @@ int daemon_main(void)
* address too. In fact, why not just do getnameinfo on the
* local address??? */
+#ifdef HAVE_LIBSLP
+ int slp_refresh;
+#endif
- } global_vars;
- /* This structure describes a single section. Their order must match the
-@@ -402,6 +405,9 @@ static struct parm_struct parm_table[] =
+ BOOL haproxy_header;
+ } global_vars;
+@@ -406,6 +409,9 @@ static struct parm_struct parm_table[] =
{"motd file", P_STRING, P_GLOBAL,&Vars.g.motd_file, NULL,0},
{"pid file", P_STRING, P_GLOBAL,&Vars.g.pid_file, NULL,0},
{"port", P_INTEGER,P_GLOBAL,&Vars.g.rsync_port, NULL,0},
+ {"slp refresh", P_INTEGER,P_GLOBAL,&Vars.g.slp_refresh, NULL,0},
+#endif
{"socket options", P_STRING, P_GLOBAL,&Vars.g.socket_options, NULL,0},
+ {"haproxy header", P_BOOL, P_LOCAL, &Vars.g.haproxy_header, NULL,0},
- {"auth users", P_STRING, P_LOCAL, &Vars.l.auth_users, NULL,0},
-@@ -543,6 +549,9 @@ FN_GLOBAL_STRING(lp_socket_options, socket_options)
+@@ -548,6 +554,9 @@ FN_GLOBAL_STRING(lp_socket_options, socket_options)
FN_GLOBAL_INTEGER(lp_listen_backlog, listen_backlog)
FN_GLOBAL_INTEGER(lp_rsync_port, rsync_port)
+FN_GLOBAL_INTEGER(lp_slp_refresh, slp_refresh)
+#endif
- FN_LOCAL_STRING(lp_auth_users, auth_users)
- FN_LOCAL_STRING(lp_charset, charset)
+ FN_GLOBAL_BOOL(lp_haproxy_header, haproxy_header)
+
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
-- Matt McCutchen <hashproduct@gmail.com>
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
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
-@@ -796,6 +797,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," --source-backup ... and backs up those files\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");
-@@ -1074,6 +1076,7 @@ static struct poptOption long_options[] = {
+@@ -927,6 +928,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 },
-@@ -2859,6 +2862,8 @@ void server_options(char **args, int *argc_p)
+@@ -2699,6 +2701,8 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -386,6 +386,7 @@ detailed description below for a complete description.
- --existing skip creating new files on receiver
- --ignore-existing skip updating files that exist on receiver
- --remove-source-files sender removes synchronized files (non-dir)
-+--source-backup ... and backs up those files
- --del an alias for --delete-during
- --delete delete extraneous files from dest dirs
- --delete-before receiver deletes before xfer, not during
-@@ -1561,6 +1562,16 @@ your home directory (remove the '=' for that).
+@@ -388,6 +388,7 @@ detailed description below for a complete description.
+ --existing skip creating new files on receiver
+ --ignore-existing skip updating files that exist on receiver
+ --remove-source-files sender removes synchronized files (non-dir)
++--source-backup ... and backs up those files
+ --del an alias for --delete-during
+ --delete delete extraneous files from dest dirs
+ --delete-before receiver deletes before xfer, not during
+@@ -1563,6 +1564,16 @@ your home directory (remove the '=' for that).
Starting with 3.1.0, rsync will skip the sender-side removal (and output an
error) if the file's size or modify time has not stayed unchanged.
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
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];
-@@ -823,6 +826,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," --times-only skip files that match in mod-time\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");
-@@ -866,6 +870,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," --source-filter=COMMAND filter file through COMMAND at source\n");
-+ rprintf(F," --dest-filter=COMMAND filter file through COMMAND at destination\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");
-@@ -988,6 +994,7 @@ static struct poptOption long_options[] = {
+@@ -841,6 +844,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 },
-@@ -1116,6 +1123,8 @@ static struct poptOption long_options[] = {
+@@ -969,6 +973,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
-@@ -2484,6 +2493,16 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2324,6 +2330,16 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
}
if (files_from) {
char *h, *p;
int q;
-@@ -2868,6 +2887,25 @@ void server_options(char **args, int *argc_p)
+@@ -2708,6 +2724,25 @@ void server_options(char **args, int *argc_p)
else if (missing_args == 1 && !am_sender)
args[ac++] = "--ignore-missing-args";
progress_init();
while (1) {
-@@ -865,6 +885,9 @@ int recv_files(int f_in, int f_out, char *local_name)
+@@ -854,6 +874,9 @@ int recv_files(int f_in, int f_out, char *local_name)
else if (!am_server && INFO_GTE(NAME, 1) && INFO_EQ(PROGRESS, 1))
rprintf(FINFO, "%s\n", fname);
/* recv file data */
recv_ok = receive_data(f_in, fnamecmp, fd1, st.st_size, fname, fd2, file, inplace || one_inplace);
-@@ -880,6 +903,16 @@ int recv_files(int f_in, int f_out, char *local_name)
+@@ -869,6 +892,16 @@ int recv_files(int f_in, int f_out, char *local_name)
exit_cleanup(RERR_FILEIO);
}
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -412,6 +412,7 @@ detailed description below for a complete description.
- --contimeout=SECONDS set daemon connection timeout in seconds
- --ignore-times, -I don't skip files that match size and time
- --size-only skip files that match in size
-+--times-only skip files that match in mod-time
- --modify-window=NUM, -@ set the accuracy for mod-time comparisons
- --temp-dir=DIR, -T create temporary files in directory DIR
- --fuzzy, -y find similar file for basis if no dest file
-@@ -454,6 +455,8 @@ detailed description below for a complete description.
- --write-batch=FILE write a batched update to FILE
- --only-write-batch=FILE like --write-batch but w/o updating dest
- --read-batch=FILE read a batched update from FILE
-+--source-filter=COMMAND filter file through COMMAND at source
-+--dest-filter=COMMAND filter file through COMMAND at destination
- --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)
-@@ -3008,6 +3011,36 @@ your home directory (remove the '=' for that).
+@@ -414,6 +414,7 @@ detailed description below for a complete description.
+ --contimeout=SECONDS set daemon connection timeout in seconds
+ --ignore-times, -I don't skip files that match size and time
+ --size-only skip files that match in size
++--times-only skip files that match in mod-time
+ --modify-window=NUM, -@ set the accuracy for mod-time comparisons
+ --temp-dir=DIR, -T create temporary files in directory DIR
+ --fuzzy, -y find similar file for basis if no dest file
+@@ -456,6 +457,8 @@ detailed description below for a complete description.
+ --write-batch=FILE write a batched update to FILE
+ --only-write-batch=FILE like --write-batch but w/o updating dest
+ --read-batch=FILE read a batched update from FILE
++--source-filter=COMMAND filter file through COMMAND at source
++--dest-filter=COMMAND filter file through COMMAND at destination
+ --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)
+@@ -3010,6 +3013,36 @@ your home directory (remove the '=' for that).
`--write-batch`. If _FILE_ is `-`, the batch data will be read from
standard input. See the "BATCH MODE" section for details.
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/fileio.c b/fileio.c
--- a/fileio.c
+++ b/fileio.c
int preallocate_files = 0;
int do_compression = 0;
int do_compression_level = CLVL_NOT_SPECIFIED;
-@@ -780,6 +781,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");
-+ rprintf(F," --sparse-block=SIZE set the block size used to handle sparse files\n");
- #ifdef SUPPORT_PREALLOCATION
- rprintf(F," --preallocate allocate dest files before writing them\n");
- #else
-@@ -1000,6 +1002,7 @@ static struct poptOption long_options[] = {
+@@ -853,6 +854,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 },
-@@ -2775,6 +2778,12 @@ void server_options(char **args, int *argc_p)
+@@ -2615,6 +2617,12 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -374,6 +374,7 @@ detailed description below for a complete description.
- --super receiver attempts super-user activities
- --fake-super store/recover privileged attrs using xattrs
- --sparse, -S turn sequences of nulls into sparse blocks
-+--sparse-block=SIZE set block size used to handle sparse files
- --preallocate allocate dest files before writing
- --write-devices write to devices as files (implies --inplace)
- --dry-run, -n perform a trial run with no changes made
-@@ -1426,6 +1427,18 @@ your home directory (remove the '=' for that).
+@@ -376,6 +376,7 @@ detailed description below for a complete description.
+ --super receiver attempts super-user activities
+ --fake-super store/recover privileged attrs using xattrs
+ --sparse, -S turn sequences of nulls into sparse blocks
++--sparse-block=SIZE set block size used to handle sparse files
+ --preallocate allocate dest files before writing them
+ --write-devices write to devices as files (implies --inplace)
+ --dry-run, -n perform a trial run with no changes made
+@@ -1428,6 +1429,18 @@ your home directory (remove the '=' for that).
opposed to allocated sequences of null bytes) if the kernel version and
filesystem type support creating holes in the allocated data.
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -3052,14 +3052,20 @@ your home directory (remove the '=' for that).
+@@ -3054,14 +3054,20 @@ your home directory (remove the '=' for that).
0. `--ipv4`, `-4` or `--ipv6`, `-6`
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
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;
-@@ -860,6 +861,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");
-+ rprintf(F," --stop-at=y-m-dTh:m Stop rsync at year-month-dayThour:minute\n");
-+ rprintf(F," --time-limit=MINS Stop rsync after MINS minutes have elapsed\n");
- #ifdef HAVE_SETVBUF
- rprintf(F," --outbuf=N|L|B set output buffering to None, Line, or Block\n");
- #endif
-@@ -889,6 +892,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -742,6 +743,7 @@ enum {OPT_SERVER = 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_REFUSED_BASE = 9000};
static struct poptOption long_options[] = {
-@@ -1096,6 +1100,8 @@ static struct poptOption long_options[] = {
+@@ -949,6 +951,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 },
-@@ -1971,6 +1977,36 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1811,6 +1815,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. */
-@@ -2787,6 +2823,15 @@ void server_options(char **args, int *argc_p)
+@@ -2627,6 +2661,15 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -451,6 +451,8 @@ detailed description below for a complete description.
- --password-file=FILE read daemon-access password from FILE
- --list-only list the files instead of copying them
- --bwlimit=RATE limit socket I/O bandwidth
-+--stop-at=y-m-dTh:m Stop rsync at year-month-dayThour:minute
-+--time-limit=MINS Stop rsync after MINS minutes have elapsed
- --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
-@@ -2977,6 +2979,22 @@ your home directory (remove the '=' for that).
+@@ -453,6 +453,8 @@ detailed description below for a complete description.
+ --password-file=FILE read daemon-access password from FILE
+ --list-only list the files instead of copying them
+ --bwlimit=RATE limit socket I/O bandwidth
++--stop-at=y-m-dTh:m Stop rsync at year-month-dayThour:minute
++--time-limit=MINS Stop rsync after MINS minutes have elapsed
+ --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
+@@ -2979,6 +2981,22 @@ your home directory (remove the '=' for that).
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: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
if (*thisname
&& (clean_fname(thisname, CFN_REFUSE_DOT_DOT_DIRS) < 0 || (!relative_paths && *thisname == '/'))) {
rprintf(FERROR, "ABORTING due to unsafe pathname from sender: %s\n", thisname);
-@@ -2475,6 +2499,15 @@ struct file_list *recv_file_list(int f, int dir_ndx)
+@@ -2489,6 +2513,15 @@ struct file_list *recv_file_list(int f, int dir_ndx)
parse_name_map(usermap, True);
if (groupmap)
parse_name_map(groupmap, False);
#define MAX_BATCH_NAME_LEN 256 /* Must be less than MAXPATHLEN-13 */
char *batch_name = NULL;
-@@ -870,6 +871,7 @@ void usage(enum logcode F)
- #ifdef ICONV_OPTION
- rprintf(F," --iconv=CONVERT_SPEC request charset conversion of filenames\n");
- #endif
-+ rprintf(F," --tr=BAD/GOOD transliterate filenames\n");
- 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");
-@@ -1103,6 +1105,7 @@ static struct poptOption long_options[] = {
+@@ -956,6 +957,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 },
-@@ -2530,6 +2533,24 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2370,6 +2372,24 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
}
am_starting_up = 0;
return 1;
-@@ -2973,6 +2994,12 @@ void server_options(char **args, int *argc_p)
+@@ -2813,6 +2833,12 @@ void server_options(char **args, int *argc_p)
if (relative_paths && !implied_dirs && (!am_sender || protocol_version >= 30))
args[ac++] = "--no-implied-dirs";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -456,6 +456,7 @@ detailed description below for a complete description.
- --read-batch=FILE read a batched update from FILE
- --protocol=NUM force an older protocol version to be used
- --iconv=CONVERT_SPEC request charset conversion of filenames
-+--tr=BAD/GOOD transliterate filenames
- --checksum-seed=NUM set block/file checksum seed (advanced)
- --ipv4, -4 prefer IPv4
- --ipv6, -6 prefer IPv6
-@@ -3050,6 +3051,25 @@ your home directory (remove the '=' for that).
+@@ -458,6 +458,7 @@ detailed description below for a complete description.
+ --read-batch=FILE read a batched update from FILE
+ --protocol=NUM force an older protocol version to be used
+ --iconv=CONVERT_SPEC request charset conversion of filenames
++--tr=BAD/GOOD transliterate filenames
+ --checksum-seed=NUM set block/file checksum seed (advanced)
+ --ipv4, -4 prefer IPv4
+ --ipv6, -6 prefer IPv6
+@@ -3052,6 +3053,25 @@ your home directory (remove the '=' for that).
free to specify just the local charset for a daemon transfer (e.g.
`--iconv=utf8`).
./configure (optional if already run)
make
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
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
-@@ -532,13 +532,6 @@ void setup_protocol(int f_out,int f_in)
+@@ -530,13 +530,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: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: 34141954c7179438f3b3c5e11f55089e5aee5a8e
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c