./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -366,6 +366,7 @@ has its own detailed description later in this manpage.
+@@ -365,6 +365,7 @@ has its own detailed description later in this manpage.
--relative, -R use relative path names
--no-implied-dirs don't send implied dirs with --relative
--backup, -b make backups (see --suffix & --backup-dir)
--backup-dir=DIR make backups into hierarchy based in DIR
--suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
--update, -u skip files that are newer on the receiver
-@@ -939,6 +940,13 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -938,6 +939,13 @@ option name from the pathname using a space if you want the shell to expand it.
rules specify a trailing inclusion/exclusion of `*`, the auto-added rule
would never be reached).
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -368,7 +368,9 @@ has its own detailed description later in this manpage.
+@@ -367,7 +367,9 @@ has its own detailed description later in this manpage.
--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
--update, -u skip files that are newer on the receiver
--inplace update destination files in-place
--append append data onto shorter files
-@@ -961,6 +963,11 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -960,6 +962,11 @@ option name from the pathname using a space if you want the shell to expand it.
daemon is the receiver, the backup dir cannot go outside the module's path
hierarchy, so take extra care not to delete it or copy into it.
./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/errcode.h b/errcode.h
--- a/errcode.h
+++ b/errcode.h
}
void write_del_stats(int f)
-@@ -1636,6 +1639,14 @@ void remember_children(UNUSED(int val))
+@@ -1637,6 +1640,14 @@ void remember_children(UNUSED(int val))
break;
}
}
}
#endif
#ifndef HAVE_SIGACTION
-@@ -1689,6 +1700,13 @@ static void rsync_panic_handler(UNUSED(int whatsig))
+@@ -1690,6 +1701,13 @@ static void rsync_panic_handler(UNUSED(int whatsig))
}
#endif
static void unset_env_var(const char *var)
{
#ifdef HAVE_UNSETENV
-@@ -1705,7 +1723,6 @@ static void unset_env_var(const char *var)
+@@ -1706,7 +1724,6 @@ static void unset_env_var(const char *var)
#endif
}
int main(int argc,char *argv[])
{
int ret;
-@@ -1729,6 +1746,11 @@ int main(int argc,char *argv[])
+@@ -1730,6 +1747,11 @@ int main(int argc,char *argv[])
SIGACTMASK(SIGFPE, rsync_panic_handler);
SIGACTMASK(SIGABRT, rsync_panic_handler);
SIGACTMASK(SIGBUS, rsync_panic_handler);
./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -360,6 +360,7 @@ has its own detailed description later in this manpage.
+@@ -359,6 +359,7 @@ has its own detailed description later in this manpage.
--quiet, -q suppress non-error messages
--no-motd suppress daemon-mode MOTD
--checksum, -c skip based on checksum, not mod-time & size
--archive, -a archive mode is -rlptgoD (no -A,-X,-U,-N,-H)
--no-OPTION turn off an implied OPTION (e.g. --no-D)
--recursive, -r recurse into directories
-@@ -747,6 +748,8 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -746,6 +747,8 @@ option name from the pathname using a space if you want the shell to expand it.
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
-@@ -758,6 +761,38 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -757,6 +760,38 @@ option name from the pathname using a space if you want the shell to expand it.
option or an environment variable that is discussed in that option's
section.
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -772,9 +772,13 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -771,9 +771,13 @@ option name from the pathname using a space if you want the shell to expand it.
The MODE value is either "lax", for relaxed checking (which compares size
and mtime), "strict" (which also compares ctime and inode), or "none" to
./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -448,6 +448,7 @@ has its own detailed description later in this manpage.
+@@ -447,6 +447,7 @@ has its own detailed description later in this manpage.
--compare-dest=DIR also compare destination files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
--compress, -z compress file data during the transfer
--compress-choice=STR choose the compression algorithm (aka --zc)
--compress-level=NUM explicitly set compression level (aka --zl)
-@@ -2585,6 +2586,18 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -2584,6 +2585,18 @@ option name from the pathname using a space if you want the shell to expand it.
this bug by avoiding the `-o` option (or using `--no-o`) when sending to an
old rsync.
./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/daemon-parm.txt b/daemon-parm.txt
--- a/daemon-parm.txt
+++ b/daemon-parm.txt
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -468,6 +468,8 @@ has its own detailed description later in this manpage.
+@@ -467,6 +467,8 @@ has its own detailed description later in this manpage.
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -442,6 +442,7 @@ has its own detailed description later in this manpage.
+@@ -441,6 +441,7 @@ has its own detailed description later in this manpage.
--contimeout=SECONDS set daemon connection timeout in seconds
--ignore-times, -I don't skip files that match size and time
--size-only skip files that match in size
--modify-window=NUM, -@ set the accuracy for mod-time comparisons
--temp-dir=DIR, -T create temporary files in directory DIR
--fuzzy, -y find similar file for basis if no dest file
-@@ -709,6 +710,14 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -708,6 +709,14 @@ option name from the pathname using a space if you want the shell to expand it.
after using another mirroring system which may not preserve timestamps
exactly.
./configure
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
netdb.h malloc.h float.h limits.h iconv.h libcharset.h langinfo.h mcheck.h \
sys/acl.h acl/libacl.h attr/xattr.h sys/xattr.h sys/extattr.h dl.h \
popt.h popt/popt.h linux/falloc.h netinet/in_systm.h netgroup.h \
-@@ -1434,6 +1435,48 @@ if test x"$enable_acl_support" = x"no" || test x"$enable_xattr_support" = x"no"
+@@ -1438,6 +1439,48 @@ if test x"$enable_acl_support" = x"no" || test x"$enable_xattr_support" = x"no"
fi
fi
extern char *shell_cmd;
extern char *password_file;
extern char *backup_dir;
-@@ -1239,6 +1242,9 @@ void start_server(int f_in, int f_out, int argc, char *argv[])
+@@ -1240,6 +1243,9 @@ void start_server(int f_in, int f_out, int argc, char *argv[])
if (am_daemon && io_timeout && protocol_version >= 31)
send_msg_int(MSG_IO_TIMEOUT, io_timeout);
if (am_sender) {
keep_dirlinks = 0; /* Must be disabled on the sender. */
if (need_messages_from_generator)
-@@ -1536,6 +1542,9 @@ static int start_client(int argc, char *argv[])
+@@ -1537,6 +1543,9 @@ static int start_client(int argc, char *argv[])
else
env_port = rsync_port;
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -408,6 +408,9 @@ has its own detailed description later in this manpage.
+@@ -407,6 +407,9 @@ has its own detailed description later in this manpage.
--dry-run, -n perform a trial run with no changes made
--whole-file, -W copy files whole (w/o delta-xfer algorithm)
--checksum-choice=STR choose the checksum algorithm (aka --cc)
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -446,6 +446,8 @@ has its own detailed description later in this manpage.
+@@ -445,6 +445,8 @@ has its own detailed description later in this manpage.
--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
-@@ -2517,6 +2519,20 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -2516,6 +2518,20 @@ option name from the pathname using a space if you want the shell to expand it.
otential alternate-basis files will be removed as the transfer progresses.
This option conflicts with [`--inplace`](#opt) and [`--append`](#opt).
a file that can't use it, while missing out on giving it to a file
that could use it.
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/backup.c b/backup.c
--- a/backup.c
+++ b/backup.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -445,6 +445,7 @@ has its own detailed description later in this manpage.
+@@ -444,6 +444,7 @@ has its own detailed description later in this manpage.
--modify-window=NUM, -@ set the accuracy for mod-time comparisons
--temp-dir=DIR, -T create temporary files in directory DIR
--fuzzy, -y find similar file for basis if no dest file
--compare-dest=DIR also compare destination files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-@@ -2500,6 +2501,22 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -2499,6 +2500,22 @@ option name from the pathname using a space if you want the shell to expand it.
potential fuzzy-match files, so either use [`--delete-after`](#opt) or
specify some filename exclusions if you need to prevent this.
./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -433,6 +433,7 @@ has its own detailed description later in this manpage.
+@@ -432,6 +432,7 @@ has its own detailed description later in this manpage.
--partial keep partially transferred files
--partial-dir=DIR put a partially transferred file into DIR
--delay-updates put all updated files into place at end
--prune-empty-dirs, -m prune empty directory chains from file-list
--numeric-ids don't map uid/gid values by user/group name
--usermap=STRING custom username mapping
-@@ -3300,6 +3301,17 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -3299,6 +3300,17 @@ option name from the pathname using a space if you want the shell to expand it.
update algorithm that is even more atomic (it uses [`--link-dest`](#opt)
and a parallel hierarchy of files).
./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -369,6 +369,7 @@ has its own detailed description later in this manpage.
+@@ -368,6 +368,7 @@ has its own detailed description later in this manpage.
--backup-dir=DIR make backups into hierarchy based in DIR
--suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
--update, -u skip files that are newer on the receiver
./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -384,6 +384,7 @@ has its own detailed description later in this manpage.
+@@ -383,6 +383,7 @@ has its own detailed description later in this manpage.
--keep-dirlinks, -K treat symlinked dir on receiver as dir
--hard-links, -H preserve hard links
--perms, -p preserve permissions
--executability, -E preserve executability
--chmod=CHMOD affect file and/or directory permissions
--acls, -A preserve ACLs (implies --perms)
-@@ -425,7 +426,10 @@ has its own detailed description later in this manpage.
+@@ -424,7 +425,10 @@ has its own detailed description later in this manpage.
--ignore-missing-args ignore missing source args without error
--delete-missing-args delete missing source args from destination
--ignore-errors delete even if there are I/O errors
--max-delete=NUM don't delete more than NUM files
--max-size=SIZE don't transfer any file larger than SIZE
--min-size=SIZE don't transfer any file smaller than SIZE
-@@ -764,6 +768,7 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -763,6 +767,7 @@ option name from the pathname using a space if you want the shell to expand it.
recursion and want to preserve almost everything. Be aware that it does
**not** include preserving ACLs (`-A`), xattrs (`-X`), atimes (`-U`),
crtimes (`-N`), nor the finding and preserving of hardlinks (`-H`).
The only exception to the above equivalence is when [`--files-from`](#opt)
is specified, in which case [`-r`](#opt) is not implied.
-@@ -1223,7 +1228,7 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -1222,7 +1227,7 @@ option name from the pathname using a space if you want the shell to expand it.
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`](#opt) for an analogous option for the
receiving side.
-@@ -1418,6 +1423,37 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -1417,6 +1422,37 @@ option name from the pathname using a space if you want the shell to expand it.
those used by [`--fake-super`](#opt)) unless you repeat the option (e.g. `-XX`).
This "copy all xattrs" mode cannot be used with [`--fake-super`](#opt).
0. `--chmod=CHMOD`
This option tells rsync to apply one or more comma-separated "chmod" modes
-@@ -1931,8 +1967,8 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -1930,8 +1966,8 @@ option name from the pathname using a space if you want the shell to expand it.
[`--ignore-missing-args`](#opt) 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
independent of any other type of delete processing.
The missing source files are represented by special file-list entries which
-@@ -1943,14 +1979,14 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -1942,14 +1978,14 @@ option name from the pathname using a space if you want the shell to expand it.
Tells [`--delete`](#opt) to go ahead and delete files even when there are
I/O errors.
[`--recursive`](#opt) option was also enabled.
0. `--max-delete=NUM`
-@@ -2966,7 +3002,7 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -2965,7 +3001,7 @@ option name from the pathname using a space if you want the shell to expand it.
also turns on the output of other verbose messages).
The "%i" escape has a cryptic output that is 11 letters long. The general
./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
-@@ -52,11 +52,14 @@ filter_rule_list cvs_filter_list = { .debug_type = " [global CVS]" };
+@@ -53,11 +53,14 @@ filter_rule_list cvs_filter_list = { .debug_type = " [global CVS]" };
filter_rule_list daemon_filter_list = { .debug_type = " [daemon]" };
filter_rule_list implied_filter_list = { .debug_type = " [implied]" };
#define SLASH_WILD3_SUFFIX "/***"
-@@ -135,8 +138,27 @@ static void teardown_mergelist(filter_rule *ex)
+@@ -136,8 +139,27 @@ static void teardown_mergelist(filter_rule *ex)
mergelist_cnt--;
}
if (ex->rflags & FILTRULE_PERDIR_MERGE)
teardown_mergelist(ex);
free(ex->pattern);
-@@ -853,7 +875,9 @@ static void report_filter_result(enum logcode code, char const *name,
+@@ -864,7 +886,9 @@ static void report_filter_result(enum logcode code, char const *name,
/* 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
int name_is_excluded(const char *fname, int name_flags, int filter_level)
{
if (daemon_filter_list.head && check_filter(&daemon_filter_list, FLOG, fname, name_flags) < 0) {
-@@ -862,6 +886,9 @@ int name_is_excluded(const char *fname, int name_flags, int filter_level)
+@@ -873,6 +897,9 @@ int name_is_excluded(const char *fname, int name_flags, int filter_level)
return 1;
}
if (filter_level != ALL_FILTERS)
return 0;
-@@ -872,7 +899,8 @@ int name_is_excluded(const char *fname, int name_flags, int filter_level)
+@@ -883,7 +910,8 @@ int name_is_excluded(const char *fname, int name_flags, int filter_level)
}
/* Return -1 if file "name" is defined to be excluded by the specified
int check_filter(filter_rule_list *listp, enum logcode code,
const char *name, int name_flags)
{
-@@ -895,10 +923,12 @@ int check_filter(filter_rule_list *listp, enum logcode code,
+@@ -906,10 +934,12 @@ int check_filter(filter_rule_list *listp, enum logcode code,
}
if (rule_matches(name, ent, name_flags)) {
report_filter_result(code, name, ent, name_flags, listp->debug_type);
return 0;
}
-@@ -915,9 +945,45 @@ static const uchar *rule_strcmp(const uchar *str, const char *rule, int rule_len
+@@ -926,9 +956,45 @@ static const uchar *rule_strcmp(const uchar *str, const char *rule, int rule_len
return NULL;
}
/* Gets the next include/exclude rule from *rulestr_ptr and advances
* *rulestr_ptr to point beyond it. Stores the pattern's start (within
-@@ -932,6 +998,7 @@ static filter_rule *parse_rule_tok(const char **rulestr_ptr,
+@@ -943,6 +1009,7 @@ static filter_rule *parse_rule_tok(const char **rulestr_ptr,
const char **pat_ptr, unsigned int *pat_len_ptr)
{
const uchar *s = (const uchar *)*rulestr_ptr;
filter_rule *rule;
unsigned int len;
-@@ -950,6 +1017,12 @@ static filter_rule *parse_rule_tok(const char **rulestr_ptr,
+@@ -961,6 +1028,12 @@ static filter_rule *parse_rule_tok(const char **rulestr_ptr,
/* Inherit from the template. Don't inherit FILTRULES_SIDES; we check
* that later. */
rule->rflags = template->rflags & FILTRULES_FROM_CONTAINER;
/* Figure out what kind of a filter rule "s" is pointing at. Note
* that if FILTRULE_NO_PREFIXES is set, the rule is either an include
-@@ -1096,11 +1169,63 @@ static filter_rule *parse_rule_tok(const char **rulestr_ptr,
+@@ -1107,11 +1180,63 @@ static filter_rule *parse_rule_tok(const char **rulestr_ptr,
goto invalid;
rule->rflags |= FILTRULE_EXCLUDE_SELF;
break;
case 'p':
rule->rflags |= FILTRULE_PERISHABLE;
break;
-@@ -1414,6 +1539,23 @@ char *get_rule_prefix(filter_rule *rule, const char *pat, int for_xfer,
+@@ -1425,6 +1550,23 @@ char *get_rule_prefix(filter_rule *rule, const char *pat, int for_xfer,
else if (am_sender)
return NULL;
}
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -1441,7 +1441,9 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -1440,7 +1440,9 @@ option name from the pathname using a space if you want the shell to expand it.
> --chmod=D2775,F664
It is also legal to specify multiple `--chmod` options, as each additional
See the [`--perms`](#opt) and [`--executability`](#opt) options for how the
resulting permission value can be applied to the files in the transfer.
-@@ -2900,6 +2902,10 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -2899,6 +2901,10 @@ option name from the pathname using a space if you want the shell to expand it.
avoid a complaint about wildcard characters, but a modern rsync handles
this automatically.
0. `--timeout=SECONDS`
This option allows you to set a maximum I/O timeout in seconds. If no data
-@@ -4052,6 +4058,15 @@ The following modifiers are accepted after an include (+) or exclude (-) rule:
+@@ -4051,6 +4057,15 @@ The following modifiers are accepted after an include (+) or exclude (-) rule:
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
-@@ -4109,6 +4124,12 @@ The following modifiers are accepted after a merge or dir-merge rule:
+@@ -4108,6 +4123,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`).
- Make this code handle multibyte character encodings, and honor the
--iconv setting when converting case.
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
-@@ -814,16 +814,15 @@ static int rule_matches(const char *fname, filter_rule *ex, int name_flags)
+@@ -824,16 +824,15 @@ static int rule_matches(const char *fname, filter_rule *ex, int name_flags)
if (litmatch_array(pattern, strings, slash_handling))
return ret_match;
} else if (anchored_match) {
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -465,6 +465,7 @@ has its own detailed description later in this manpage.
+@@ -464,6 +464,7 @@ has its own detailed description later in this manpage.
--old-args disable the modern arg-protection idiom
--protect-args, -s no space-splitting; wildcard chars only
--copy-as=USER[:GROUP] specify user & optional group for the copy
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
-@@ -2448,6 +2449,12 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -2447,6 +2448,12 @@ option name from the pathname using a space if you want the shell to expand it.
> sudo rsync -aive lsh -M--copy-as=joe src/ lh:dest/
./configure
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -967,6 +967,31 @@ if test x"$enable_iconv" != x"no"; then
+@@ -971,6 +971,31 @@ if test x"$enable_iconv" != x"no"; then
AC_DEFINE(UTF8_CHARSET, "UTF-8", [String to pass to iconv() for the UTF-8 charset.])
fi
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
-@@ -1579,7 +1579,7 @@ static int start_client(int argc, char *argv[])
+@@ -1580,7 +1580,7 @@ static int start_client(int argc, char *argv[])
* remote shell command, we need to do the RSYNCD protocol first */
if (daemon_connection) {
int tmpret;
./configure
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -448,6 +448,7 @@ has its own detailed description later in this manpage.
+@@ -447,6 +447,7 @@ has its own detailed description later in this manpage.
--compare-dest=DIR also compare destination files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
--compress, -z compress file data during the transfer
--compress-choice=STR choose the compression algorithm (aka --zc)
--compress-level=NUM explicitly set compression level (aka --zl)
-@@ -2585,6 +2586,50 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -2584,6 +2585,50 @@ option name from the pathname using a space if you want the shell to expand it.
this bug by avoiding the `-o` option (or using `--no-o`) when sending to an
old rsync.
./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -401,6 +401,7 @@ has its own detailed description later in this manpage.
+@@ -400,6 +400,7 @@ has its own detailed description later in this manpage.
--crtimes, -N preserve create times (newness)
--omit-dir-times, -O omit directories from --times
--omit-link-times, -J omit symlinks from --times
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
--sparse, -S turn sequences of nulls into sparse blocks
-@@ -1573,6 +1574,11 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -1572,6 +1573,11 @@ option name from the pathname using a space if you want the shell to expand it.
This tells rsync to omit symlinks when it is preserving modification,
access, and create times.
./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -484,6 +484,7 @@ has its own detailed description later in this manpage.
+@@ -483,6 +483,7 @@ has its own detailed description later in this manpage.
--early-input=FILE use FILE for daemon's early exec input
--list-only list the files instead of copying them
--bwlimit=RATE limit socket I/O bandwidth
TODO: the configure changes should abort if the user requests --enable-slp
and we can't honor that request.
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -1035,6 +1035,29 @@ if test $rsync_cv_can_hardlink_special = yes; then
+@@ -1039,6 +1039,29 @@ if test $rsync_cv_can_hardlink_special = yes; then
AC_DEFINE(CAN_HARDLINK_SPECIAL, 1, [Define to 1 if link() can hard-link special files.])
fi
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
-@@ -1403,6 +1403,22 @@ static int start_client(int argc, char *argv[])
+@@ -1404,6 +1404,22 @@ static int start_client(int argc, char *argv[])
if (!read_batch) { /* for read_batch, NO source is specified */
char *path = check_for_hostspec(argv[0], &shell_machine, &rsync_port);
./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
-- Matt McCutchen <hashproduct@gmail.com>
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -415,6 +415,7 @@ has its own detailed description later in this manpage.
+@@ -414,6 +414,7 @@ has its own detailed description later in this manpage.
--existing skip creating new files on receiver
--ignore-existing skip updating files that exist on receiver
--remove-source-files sender removes synchronized files (non-dir)
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before xfer, not during
-@@ -1805,6 +1806,17 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -1804,6 +1805,17 @@ option name from the pathname using a space if you want the shell to expand it.
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: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -442,6 +442,7 @@ has its own detailed description later in this manpage.
+@@ -441,6 +441,7 @@ has its own detailed description later in this manpage.
--contimeout=SECONDS set daemon connection timeout in seconds
--ignore-times, -I don't skip files that match size and time
--size-only skip files that match in size
--modify-window=NUM, -@ set the accuracy for mod-time comparisons
--temp-dir=DIR, -T create temporary files in directory DIR
--fuzzy, -y find similar file for basis if no dest file
-@@ -490,6 +491,8 @@ has its own detailed description later in this manpage.
+@@ -489,6 +490,8 @@ has its own detailed description later in this manpage.
--write-batch=FILE write a batched update to FILE
--only-write-batch=FILE like --write-batch but w/o updating dest
--read-batch=FILE read a batched update from FILE
--protocol=NUM force an older protocol version to be used
--iconv=CONVERT_SPEC request charset conversion of filenames
--checksum-seed=NUM set block/file checksum seed (advanced)
-@@ -3576,6 +3579,36 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -3575,6 +3578,36 @@ option name from the pathname using a space if you want the shell to expand it.
[`--write-batch`](#opt). 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: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/fileio.c b/fileio.c
--- a/fileio.c
+++ b/fileio.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -404,6 +404,7 @@ has its own detailed description later in this manpage.
+@@ -403,6 +403,7 @@ has its own detailed description later in this manpage.
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
--sparse, -S turn sequences of nulls into sparse blocks
--preallocate allocate dest files before writing them
--dry-run, -n perform a trial run with no changes made
--whole-file, -W copy files whole (w/o delta-xfer algorithm)
-@@ -1647,6 +1648,18 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -1646,6 +1647,18 @@ option name from the pathname using a space if you want the shell to expand it.
(as opposed to allocated sequences of null bytes) if the kernel version and
filesystem type support creating holes in the allocated data.
./configure (optional if already run)
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -492,6 +492,7 @@ has its own detailed description later in this manpage.
+@@ -491,6 +491,7 @@ has its own detailed description later in this manpage.
--read-batch=FILE read a batched update from FILE
--protocol=NUM force an older protocol version to be used
--iconv=CONVERT_SPEC request charset conversion of filenames
--checksum-seed=NUM set block/file checksum seed (advanced)
--ipv4, -4 prefer IPv4
--ipv6, -6 prefer IPv6
-@@ -3618,6 +3619,25 @@ option name from the pathname using a space if you want the shell to expand it.
+@@ -3617,6 +3618,25 @@ option name from the pathname using a space if you want the shell to expand it.
free to specify just the local charset for a daemon transfer (e.g.
`--iconv=utf8`).
patch -p1 <patches/xxh3-safety-check.diff
make
-based-on: 43f70b961e92d88387fecd3c7f6dbefc044ce4a3
+based-on: 0773cecc1fc6462b321f96dc8cae6e11983c357d
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c