./configure (optional if already run)
make
-based-on: 3b8f8192227b14e708bf535072485e50f4362270
+based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
-@@ -81,6 +81,7 @@ extern struct chmod_mode_struct *chmod_modes;
+@@ -80,6 +80,7 @@ extern struct chmod_mode_struct *chmod_modes;
extern filter_rule_list filter_list;
extern filter_rule_list daemon_filter_list;
#ifdef ICONV_OPTION
extern int filesfrom_convert;
-@@ -283,7 +284,8 @@ static inline int path_is_daemon_excluded(char *path, int ignore_filename)
+@@ -282,7 +283,8 @@ static inline int path_is_daemon_excluded(char *path, int ignore_filename)
/* This function is used to check if a file should be included/excluded
* from the list of files based on its name and type etc. The value of
static int is_excluded(const char *fname, int is_dir, int filter_level)
{
#if 0 /* This currently never happens, so avoid a useless compare. */
-@@ -292,6 +294,8 @@ static int is_excluded(const char *fname, int is_dir, int filter_level)
+@@ -291,6 +293,8 @@ static int is_excluded(const char *fname, int is_dir, int filter_level)
#endif
if (is_daemon_excluded(fname, is_dir))
return 1;
if (filter_level != ALL_FILTERS)
return 0;
if (filter_list.head
-@@ -1170,7 +1174,7 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
+@@ -1169,7 +1173,7 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
} else if (readlink_stat(thisname, &st, linkname) != 0) {
int save_errno = errno;
/* See if file is excluded before reporting an error. */
&& (is_excluded(thisname, 0, filter_level)
|| is_excluded(thisname, 1, filter_level))) {
if (ignore_perishable && save_errno != ENOENT)
-@@ -1215,6 +1219,12 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
+@@ -1214,6 +1218,12 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
if (filter_level == NO_FILTERS)
goto skip_filters;
if (S_ISDIR(st.st_mode)) {
if (!xfer_dirs) {
-@@ -1415,12 +1425,23 @@ static struct file_struct *send_file_name(int f, struct file_list *flist,
+@@ -1414,12 +1424,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) {
-@@ -2280,7 +2301,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
+@@ -2285,7 +2306,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) {
-@@ -2294,7 +2315,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
+@@ -2299,7 +2320,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
} else
send_if_directory(f, flist, file, fbuf, len, flags);
} else
+ send_file_name(f, flist, fbuf, &st, flags, ALL_FILTERS_NO_EXCLUDE);
}
- gettimeofday(&end_tv, NULL);
+ if (reenable_multiplex >= 0)
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -149,6 +149,9 @@
+@@ -151,6 +151,9 @@
#define NO_FILTERS 0
#define SERVER_FILTERS 1
#define ALL_FILTERS 2
#define XFLG_FATAL_ERRORS (1<<0)
#define XFLG_OLD_PREFIXES (1<<1)
-@@ -805,6 +808,8 @@ struct map_struct {
+@@ -809,6 +812,8 @@ struct map_struct {
int status; /* first errno from read errors */
};
#define FILTRULE_WILD (1<<0) /* pattern has '*', '[', and/or '?' */
#define FILTRULE_WILD2 (1<<1) /* pattern has '**' */
#define FILTRULE_WILD2_PREFIX (1<<2) /* pattern starts with "**" */
-@@ -825,8 +830,18 @@ struct map_struct {
+@@ -829,8 +834,18 @@ struct map_struct {
#define FILTRULE_RECEIVER_SIDE (1<<17)/* rule applies to the receiving side */
#define FILTRULE_CLEAR_LIST (1<<18)/* this item is the "!" token */
#define FILTRULE_PERISHABLE (1<<19)/* perishable if parent dir goes away */
typedef struct filter_struct {
struct filter_struct *next;
-@@ -836,6 +851,11 @@ typedef struct filter_struct {
+@@ -840,6 +855,11 @@ typedef struct filter_struct {
int slash_cnt;
struct filter_list_struct *mergelist;
} u;
See the bf(--perms) and bf(--executability) options for how the resulting
permission value can be applied to the files in the transfer.
-@@ -1831,6 +1833,10 @@ be omitted, but if USER is empty, a leading colon must be supplied.
+@@ -1832,6 +1834,10 @@ be omitted, but if USER is empty, a leading colon must be supplied.
If you specify "--chown=foo:bar, this is exactly the same as specifying
"--usermap=*:foo --groupmap=*:bar", only easier.
dit(bf(--timeout=TIMEOUT)) This option allows you to set a maximum I/O
timeout in seconds. If no data is transferred for the specified time
then rsync will exit. The default is 0, which means no timeout.
-@@ -2643,6 +2649,15 @@ itemization(
+@@ -2657,6 +2663,15 @@ itemization(
option's default rules that exclude things like "CVS" and "*.o" are
marked as perishable, and will not prevent a directory that was removed
on the source from being deleted on the destination.
)
manpagesection(MERGE-FILE FILTER RULES)
-@@ -2704,6 +2719,12 @@ itemization(
+@@ -2718,6 +2733,12 @@ itemization(
a rule prefix such as bf(hide)).
)