./configure (optional if already run)
make
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
-@@ -1837,7 +1837,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1834,7 +1834,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto notify_others;
if (read_batch || whole_file) {
if (!(backupptr = get_backup_name(fname)))
goto cleanup;
if (!(back_file = make_file(fname, NULL, NULL, 0, NO_FILTERS)))
-@@ -1873,7 +1873,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1870,7 +1870,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto notify_others;
}
if (!(backupptr = get_backup_name(fname))) {
close(fd);
goto cleanup;
-@@ -1997,7 +1997,7 @@ int atomic_create(struct file_struct *file, char *fname, const char *slnk, const
+@@ -1994,7 +1994,7 @@ int atomic_create(struct file_struct *file, char *fname, const char *slnk, const
skip_atomic = 0;
if (del_for_flag) {
{"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 },
-@@ -2726,6 +2727,10 @@ void server_options(char **args, int *argc_p)
+@@ -2687,6 +2688,10 @@ void server_options(char **args, int *argc_p)
}
if (am_sender) {
--backup-dir=DIR make backups into hierarchy based in DIR
--suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
--update, -u skip files that are newer on the receiver
-@@ -856,6 +857,13 @@ your home directory (remove the '=' for that).
+@@ -860,6 +861,13 @@ your home directory (remove the '=' for that).
trailing inclusion/exclusion of `*`, the auto-added rule would never be
reached).
if (preserve_times) {
preserve_times = PRESERVE_FILE_TIMES;
-@@ -2701,6 +2761,10 @@ void server_options(char **args, int *argc_p)
+@@ -2662,6 +2722,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) {
-@@ -2709,6 +2773,14 @@ void server_options(char **args, int *argc_p)
+@@ -2670,6 +2734,14 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
./configure (optional if already run)
make
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/errcode.h b/errcode.h
--- a/errcode.h
+++ b/errcode.h
}
void write_del_stats(int f)
-@@ -1629,6 +1632,14 @@ void remember_children(UNUSED(int val))
+@@ -1632,6 +1635,14 @@ void remember_children(UNUSED(int val))
break;
}
}
}
#endif
#ifndef HAVE_SIGACTION
-@@ -1684,6 +1695,12 @@ static void rsync_panic_handler(UNUSED(int whatsig))
+@@ -1687,6 +1698,12 @@ static void rsync_panic_handler(UNUSED(int whatsig))
}
#endif
int main(int argc,char *argv[])
{
-@@ -1708,6 +1725,11 @@ int main(int argc,char *argv[])
+@@ -1711,6 +1728,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: d2a97a7ab492e0d0548708251309e077e6aa8c8b
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
extern int remove_source_files;
extern int delay_updates;
extern int update_only;
-@@ -611,7 +612,7 @@ static enum filetype get_file_type(mode_t mode)
+@@ -612,7 +613,7 @@ static enum filetype get_file_type(mode_t mode)
}
/* Perform our quick-check heuristic for determining if a file is unchanged. */
{
switch (ftype) {
case FT_REG:
-@@ -622,7 +623,10 @@ int quick_check_ok(enum filetype ftype, const char *fn, struct file_struct *file
+@@ -623,7 +624,10 @@ int quick_check_ok(enum filetype ftype, const char *fn, struct file_struct *file
* of the file mtime to determine whether to sync. */
if (always_checksum > 0) {
char sum[MAX_DIGEST_LEN];
return memcmp(sum, F_SUM(file), flist_csum_len) == 0;
}
-@@ -950,7 +954,7 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx,
+@@ -951,7 +955,7 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx,
best_match = j;
match_level = 1;
}
continue;
if (match_level == 1) {
best_match = j;
-@@ -1209,7 +1213,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1210,7 +1214,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
* --ignore-non-existing, daemon exclude, or mkdir failure. */
static struct file_struct *skip_dir = NULL;
static struct file_list *fuzzy_dirlist[MAX_BASIS_DIRS+1];
struct file_struct *fuzzy_file = NULL;
int fd = -1, f_copy = -1;
stat_x sx, real_sx;
-@@ -1327,8 +1331,9 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1328,8 +1332,9 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
fuzzy_dirlist[i] = NULL;
}
}
#ifdef SUPPORT_ACLS
if (!preserve_perms)
dflt_perms = default_perms_for_dir(dn);
-@@ -1336,6 +1341,24 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1337,6 +1342,24 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
parent_dirname = dn;
statret = link_stat(fname, &sx.st, keep_dirlinks && is_dir);
stat_errno = errno;
}
-@@ -1743,22 +1766,6 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1746,22 +1769,6 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
partialptr = NULL;
if (statret != 0 && fuzzy_basis) {
/* Sets fnamecmp_type to FNAMECMP_FUZZY or above. */
fuzzy_file = find_fuzzy(file, fuzzy_dirlist, &fnamecmp_type);
if (fuzzy_file) {
-@@ -1791,7 +1798,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1794,7 +1801,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
;
else if (fnamecmp_type >= FNAMECMP_FUZZY)
;
static const char *solo_file = NULL;
/* Forward declarations. */
-@@ -1354,7 +1355,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1355,7 +1356,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
}
if (checksum_files) {
}
need_new_dirscan = 0;
}
-@@ -1540,6 +1542,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1543,6 +1545,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
else
change_local_filter_dir(fname, strlen(fname), F_DEPTH(file));
}
prior_dir_file = file;
goto cleanup;
}
-@@ -1804,6 +1807,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1807,6 +1810,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
handle_partial_dir(partialptr, PDIR_DELETE);
}
set_file_attrs(fname, file, &sx, NULL, maybe_ATTRS_REPORT | maybe_ATTRS_ACCURATE_TIME);
if (itemizing)
itemize(fnamecmp, file, ndx, statret, &sx, 0, 0, NULL);
#ifdef SUPPORT_HARD_LINKS
-@@ -2300,6 +2305,7 @@ void generate_files(int f_out, const char *local_name)
+@@ -2303,6 +2308,7 @@ void generate_files(int f_out, const char *local_name)
} else
change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp));
}
}
for (i = cur_flist->low; i <= cur_flist->high; i++) {
struct file_struct *file = cur_flist->sorted[i];
-@@ -2394,6 +2400,9 @@ void generate_files(int f_out, const char *local_name)
+@@ -2397,6 +2403,9 @@ void generate_files(int f_out, const char *local_name)
wait_for_receiver();
}
./configure (optional if already run)
make
-based-on: d2a97a7ab492e0d0548708251309e077e6aa8c8b
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
-@@ -622,7 +622,8 @@ int quick_check_ok(enum filetype ftype, const char *fn, struct file_struct *file
+@@ -623,7 +623,8 @@ int quick_check_ok(enum filetype ftype, const char *fn, struct file_struct *file
* of the file mtime to determine whether to sync. */
if (always_checksum > 0) {
char sum[MAX_DIGEST_LEN];
+
int get_stat_xattr(const char *fname, int fd, STRUCT_STAT *fst, STRUCT_STAT *xst)
{
- int mode, rdev_major, rdev_minor, uid, gid, len;
+ unsigned int mode;
-This patch adds the --clone-dest option that works like --link-dest but
-without requiring the metadata of the files to match in order to be able
-to share the file's data. This currently only supports Linux's FICLONE
-syscall, and that may only be supported on Btrfs at the moment.
+This patch adds the --clone-dest option that works link --link-dest
+but without requiring the metadata of the files to match in order
+to be able to share the file's data.
-This patch has had minor testing, including some fixes that make sure
-that the attributes of a cloned file get set after it is cloned.
+NOTE: this patch is mostly untested because I don't currently have
+a btrfs mount to test it out on. I still need to make sure that a
+cloned file gets its destination attributes set correctly after the
+clone, for instance.
To use this patch, run these commands for a successful build:
./configure (optional if already run)
make
-based-on: a28c4558c5644d4423a937d025ca64fe4e3ce84b
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
./configure (optional if already run)
make
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/daemon-parm.txt b/daemon-parm.txt
--- a/daemon-parm.txt
+++ b/daemon-parm.txt
./configure (optional if already run)
make
-based-on: d2a97a7ab492e0d0548708251309e077e6aa8c8b
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int write_devices;
extern int preserve_specials;
extern int preserve_hard_links;
-@@ -1673,7 +1674,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1676,7 +1677,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto cleanup;
}
if (solo_file)
fname = f_name(file, NULL);
rprintf(FINFO, "skipping non-regular file \"%s\"\n", fname);
-@@ -1894,6 +1895,9 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1897,6 +1898,9 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
fnamecmp_type = FNAMECMP_BACKUP;
}
./configure (optional if already run)
make
-based-on: d2a97a7ab492e0d0548708251309e077e6aa8c8b
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int size_only;
extern OFF_T max_size;
extern OFF_T min_size;
-@@ -618,6 +619,9 @@ int quick_check_ok(enum filetype ftype, const char *fn, struct file_struct *file
+@@ -619,6 +620,9 @@ int quick_check_ok(enum filetype ftype, const char *fn, struct file_struct *file
if (st->st_size != F_LENGTH(file))
return 0;
./configure
make
-based-on: 9dd62525f3b98d692e031f22c02be8f775966503
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
LIBOBJ=lib/wildmatch.o lib/compat.o lib/snprintf.o lib/mdfour.o lib/md5.o \
@@ -43,7 +44,7 @@ zlib_OBJS=zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o \
OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
- util.o util2.o main.o checksum.o match.o syscall.o log.o backup.o delete.o
+ util1.o util2.o main.o checksum.o match.o syscall.o log.o backup.o delete.o
OBJS2=options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o \
- usage.o fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
+ usage.o fileio.o batch.o clientname.o chmod.o db.o acls.o xattrs.o
+ mysql/mysql.h sqlite3.h \
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 netinet/ip.h \
-@@ -1467,6 +1468,48 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x"
+ popt.h popt/popt.h linux/falloc.h netinet/in_systm.h netgroup.h \
+@@ -1473,6 +1474,48 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x"
fi
fi
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
-@@ -468,7 +468,9 @@ static int fattr_find(struct file_struct *f, char *fname)
+@@ -465,7 +465,9 @@ static int fattr_find(struct file_struct *f, char *fname)
continue;
}
}
diff = u_strcmp(fmid->basename, f->basename);
if (diff == 0) {
good_match = mid;
-@@ -1982,6 +1984,21 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1979,6 +1981,21 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
fnamecmp = partialptr;
fnamecmp_type = FNAMECMP_PARTIAL_DIR;
statret = 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 },
-@@ -2763,8 +2765,14 @@ void server_options(char **args, int *argc_p)
+@@ -2724,8 +2726,14 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
--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
-@@ -2264,6 +2266,17 @@ your home directory (remove the '=' for that).
+@@ -2276,6 +2278,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: 9cd85b849672c93c4b1f534898585f92ec4de30d
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/backup.c b/backup.c
--- a/backup.c
+++ b/backup.c
static int deldelay_size = 0, deldelay_cnt = 0;
static char *deldelay_buf = NULL;
static int deldelay_fd = -1;
-@@ -269,14 +272,19 @@ static void do_delayed_deletions(char *delbuf)
+@@ -266,14 +269,19 @@ static void do_delayed_deletions(char *delbuf)
* all the --delete-WHEN options. Note that the fbuf pointer must point to a
* MAXPATHLEN buffer with the name of the directory in it (the functions we
* call will append names onto the end, but the old dir value will be restored
if (!fbuf) {
change_local_filter_dir(NULL, 0, 0);
-@@ -290,17 +298,22 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
+@@ -287,17 +295,22 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
maybe_send_keepalive(time(NULL), MSK_ALLOW_FLUSH);
if (io_error & IOERR_GENERAL && !ignore_errors) {
if (one_file_system) {
if (!dev_tbl)
dev_tbl = hashtable_create(16, HT_KEY64);
-@@ -316,6 +329,14 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
+@@ -313,6 +326,14 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
dirlist = get_dirlist(fbuf, dlen, 0);
/* If an item in dirlist is not found in flist, delete it
* from the filesystem. */
for (i = dirlist->used; i--; ) {
-@@ -328,6 +349,10 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
+@@ -325,6 +346,10 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
f_name(fp, NULL));
continue;
}
/* Here we want to match regardless of file type. Replacement
* of a file with one of another type is handled separately by
* a delete_item call with a DEL_MAKE_ROOM flag. */
-@@ -336,14 +361,19 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
+@@ -333,14 +358,19 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
if (!(fp->mode & S_IWUSR) && !am_root && fp->flags & FLAG_OWNED_BY_US)
flags |= DEL_NO_UID_WRITE;
f_name(fp, delbuf);
flist_free(dirlist);
}
-@@ -379,14 +409,125 @@ static void do_delete_pass(void)
+@@ -376,14 +406,125 @@ static void do_delete_pass(void)
|| !S_ISDIR(st.st_mode))
continue;
static inline int mtime_differs(STRUCT_STAT *stp, struct file_struct *file)
{
#ifdef ST_MTIME_NSEC
-@@ -1187,6 +1328,7 @@ static void list_file_entry(struct file_struct *f)
+@@ -1177,6 +1318,7 @@ static void list_file_entry(struct file_struct *f)
}
}
static int phase = 0;
static int dflt_perms;
-@@ -1323,7 +1465,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1314,7 +1456,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
&& do_stat(dn, &sx.st) < 0) {
if (dry_run)
goto parent_is_dry_missing;
rsyserr(FERROR_XFER, errno,
"recv_generator: mkdir %s failed",
full_fname(dn));
-@@ -1459,7 +1601,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1467,7 +1609,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
if (real_ret != 0 && do_mkdir(fname,file->mode|added_perms) < 0 && errno != EEXIST) {
if (!relative_paths || errno != ENOENT
|| (do_mkdir(fname, file->mode|added_perms) < 0 && errno != EEXIST)) {
rsyserr(FERROR_XFER, errno,
"recv_generator: mkdir %s failed",
-@@ -1507,9 +1649,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1515,9 +1657,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
else if (delete_during && f_out != -1 && !phase
&& !(file->flags & FLAG_MISSING_DIR)) {
change_local_filter_dir(fname, strlen(fname), F_DEPTH(file));
}
prior_dir_file = file;
-@@ -1786,8 +1931,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1783,8 +1928,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto cleanup;
}
#endif
rsyserr(FERROR_XFER, stat_errno, "recv_generator: failed to stat %s",
full_fname(fname));
goto cleanup;
-@@ -2251,6 +2402,12 @@ void generate_files(int f_out, const char *local_name)
+@@ -2248,6 +2399,12 @@ void generate_files(int f_out, const char *local_name)
if (DEBUG_GTE(GENR, 1))
rprintf(FINFO, "generator starting pid=%d\n", (int)getpid());
if (delete_before && !solo_file && cur_flist->used > 0)
do_delete_pass();
if (delete_during == 2) {
-@@ -2259,7 +2416,7 @@ void generate_files(int f_out, const char *local_name)
+@@ -2256,7 +2413,7 @@ void generate_files(int f_out, const char *local_name)
}
info_levels[INFO_FLIST] = info_levels[INFO_PROGRESS] = 0;
whole_file = 0;
if (DEBUG_GTE(FLIST, 1)) {
rprintf(FINFO, "delta-transmission %s\n",
-@@ -2295,7 +2452,7 @@ void generate_files(int f_out, const char *local_name)
+@@ -2292,7 +2449,7 @@ void generate_files(int f_out, const char *local_name)
dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp));
} else
dirdev = MAKEDEV(0, 0);
} else
change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp));
}
-@@ -2342,7 +2499,21 @@ void generate_files(int f_out, const char *local_name)
+@@ -2339,7 +2496,21 @@ void generate_files(int f_out, const char *local_name)
} while ((cur_flist = cur_flist->next) != NULL);
if (delete_during)
--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
-@@ -2249,6 +2250,22 @@ your home directory (remove the '=' for that).
+@@ -2259,6 +2260,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.
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -282,7 +282,7 @@ enum msgcode {
+@@ -286,7 +286,7 @@ enum filetype {
#define NDX_DEL_STATS -3
#define NDX_FLIST_OFFSET -101
#define DEL_NO_UID_WRITE (1<<0) /* file/dir has our uid w/o write perm */
#define DEL_RECURSE (1<<1) /* if dir, delete all contents */
#define DEL_DIR_IS_EMPTY (1<<2) /* internal delete_FUNCTIONS use only */
-@@ -292,6 +292,7 @@ enum msgcode {
+@@ -296,6 +296,7 @@ enum filetype {
#define DEL_FOR_DEVICE (1<<6) /* making room for a replacement device */
#define DEL_FOR_SPECIAL (1<<7) /* making room for a replacement special */
#define DEL_FOR_BACKUP (1<<8) /* the delete is for a backup operation */
#define DEL_MAKE_ROOM (DEL_FOR_FILE|DEL_FOR_DIR|DEL_FOR_SYMLINK|DEL_FOR_DEVICE|DEL_FOR_SPECIAL)
-diff --git a/util.c b/util.c
---- a/util.c
-+++ b/util.c
+diff --git a/util1.c b/util1.c
+--- a/util1.c
++++ b/util1.c
@@ -182,7 +182,7 @@ int set_times(const char *fname, STRUCT_STAT *stp)
/* Create any necessary directories in fname. Any missing directories are
* created with default permissions. Returns < 0 on error, or the number
./configure (optional if already run)
make
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
--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
-@@ -3012,6 +3013,16 @@ your home directory (remove the '=' for that).
+@@ -3024,6 +3025,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).
return open(pathname, flags | O_BINARY, mode);
}
-@@ -624,6 +633,9 @@ int do_open_nofollow(const char *pathname, int flags)
+@@ -632,6 +641,9 @@ int do_open_nofollow(const char *pathname, int flags)
#endif
}
./configure (optional if already run)
make
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int human_readable;
extern int ignore_existing;
extern int ignore_non_existing;
-@@ -1713,6 +1714,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1710,6 +1711,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto cleanup;
}
+
fnamecmp_type = FNAMECMP_FNAME;
- if (statret == 0 && !(S_ISREG(sx.st.st_mode) || (write_devices && IS_DEVICE(sx.st.st_mode)))) {
-@@ -2157,6 +2164,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
+ if (statret == 0 && !(stype == FT_REG || (write_devices && stype == FT_DEVICE))) {
+@@ -2154,6 +2161,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
ignore_existing = -ignore_existing;
ignore_non_existing = -ignore_non_existing;
update_only = -update_only;
always_checksum = -always_checksum;
size_only = -size_only;
append_mode = -append_mode;
-@@ -2182,6 +2190,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
+@@ -2179,6 +2187,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
ignore_existing = -ignore_existing;
ignore_non_existing = -ignore_non_existing;
update_only = -update_only;
./configure (optional if already run)
make
-based-on: 9dd62525f3b98d692e031f22c02be8f775966503
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
"*Optimizations",
#ifndef HAVE_SIMD
-diff --git a/util.c b/util.c
---- a/util.c
-+++ b/util.c
+diff --git a/util1.c b/util1.c
+--- a/util1.c
++++ b/util1.c
@@ -33,6 +33,7 @@ extern int relative_paths;
extern int preserve_times;
extern int preserve_xattrs;
./configure (optional if already run)
make
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -1285,7 +1285,9 @@ your home directory (remove the '=' for that).
+@@ -1291,7 +1291,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.
-@@ -2636,6 +2638,10 @@ your home directory (remove the '=' for that).
+@@ -2648,6 +2650,10 @@ your home directory (remove the '=' for that).
"`--usermap=*:foo --groupmap=*:bar`", only easier. If your shell complains
about the wildcards, use `--protect-args` (`-s`).
0. `--timeout=SECONDS`
This option allows you to set a maximum I/O timeout in seconds. If no data
-@@ -3633,6 +3639,15 @@ The following modifiers are accepted after a "`+`" or "`-`":
+@@ -3645,6 +3651,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
-@@ -3690,6 +3705,12 @@ The following modifiers are accepted after a merge or dir-merge rule:
+@@ -3702,6 +3717,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`).
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -171,6 +171,9 @@
+@@ -181,6 +181,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)
-@@ -966,6 +969,8 @@ struct map_struct {
+@@ -979,6 +982,8 @@ struct map_struct {
int status; /* first errno from read errors */
};
#define NAME_IS_FILE (0) /* filter name as a file */
#define NAME_IS_DIR (1<<0) /* filter name as a dir */
#define NAME_IS_XATTR (1<<2) /* filter name as an xattr */
-@@ -991,8 +996,18 @@ struct map_struct {
+@@ -1004,8 +1009,18 @@ struct map_struct {
#define FILTRULE_CLEAR_LIST (1<<18)/* this item is the "!" token */
#define FILTRULE_PERISHABLE (1<<19)/* perishable if parent dir goes away */
#define FILTRULE_XATTR (1<<20)/* rule only applies to xattr names */
typedef struct filter_struct {
struct filter_struct *next;
-@@ -1002,6 +1017,11 @@ typedef struct filter_struct {
+@@ -1015,6 +1030,11 @@ typedef struct filter_struct {
int slash_cnt;
struct filter_list_struct *mergelist;
} u;
} filter_rule;
typedef struct filter_list_struct {
-diff --git a/util.c b/util.c
---- a/util.c
-+++ b/util.c
+diff --git a/util1.c b/util1.c
+--- a/util1.c
++++ b/util1.c
@@ -884,6 +884,25 @@ size_t stringjoin(char *dest, size_t destsize, ...)
return ret;
}
./configure (optional if already run)
make
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
{"stop-after", 0, POPT_ARG_STRING, 0, OPT_STOP_AFTER, 0, 0 },
{"time-limit", 0, POPT_ARG_STRING, 0, OPT_STOP_AFTER, 0, 0 }, /* earlier stop-after name */
{"stop-at", 0, POPT_ARG_STRING, 0, OPT_STOP_AT, 0, 0 },
-@@ -2845,6 +2847,9 @@ void server_options(char **args, int *argc_p)
+@@ -2806,6 +2808,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = tmpdir;
}
int inplace = 0;
int modify_window = 0;
int preallocate_files = 0;
-diff --git a/util.c b/util.c
---- a/util.c
-+++ b/util.c
+diff --git a/util1.c b/util1.c
+--- a/util1.c
++++ b/util1.c
@@ -27,6 +27,7 @@
extern int dry_run;
- Make this code handle multibyte character encodings, and honor the
--iconv setting when converting case.
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
{"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},
-@@ -2795,6 +2798,9 @@ void server_options(char **args, int *argc_p)
+@@ -2756,6 +2759,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
-@@ -2195,6 +2196,12 @@ your home directory (remove the '=' for that).
+@@ -2207,6 +2208,12 @@ your home directory (remove the '=' for that).
> sudo rsync -aive lsh -M--copy-as=joe src/ lh:dest/
./configure
make
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
@@ -44,7 +44,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
- util.o util2.o main.o checksum.o match.o syscall.o log.o backup.o delete.o
+ util1.o util2.o main.o checksum.o match.o syscall.o log.o backup.o delete.o
OBJS2=options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o \
usage.o fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
-OBJS3=progress.o pipe.o @ASM@
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -950,6 +950,31 @@ if test x"$enable_iconv" != x"no"; then
+@@ -1009,6 +1009,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
-@@ -1572,7 +1572,7 @@ static int start_client(int argc, char *argv[])
+@@ -1575,7 +1575,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;
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -520,6 +520,15 @@ enum delret {
+@@ -533,6 +533,15 @@ enum delret {
#define iconv_t int
#endif
./configure
make
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
@@ -44,7 +44,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
- util.o util2.o main.o checksum.o match.o syscall.o log.o backup.o delete.o
+ util1.o util2.o main.o checksum.o match.o syscall.o log.o backup.o delete.o
OBJS2=options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o \
usage.o fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
-OBJS3=progress.o pipe.o @ASM@
}
if (daemon_filter_list.head && !am_sender) {
filter_rule_list *elp = &daemon_filter_list;
-@@ -2870,6 +2892,12 @@ void server_options(char **args, int *argc_p)
+@@ -2831,6 +2853,12 @@ void server_options(char **args, int *argc_p)
} else if (inplace)
args[ac++] = "--inplace";
--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)
-@@ -2331,6 +2332,50 @@ your home directory (remove the '=' for that).
+@@ -2343,6 +2344,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/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -1428,7 +1428,8 @@ extern short info_levels[], debug_levels[];
+@@ -1441,7 +1441,8 @@ extern short info_levels[], debug_levels[];
#define DEBUG_FUZZY (DEBUG_FLIST+1)
#define DEBUG_GENR (DEBUG_FUZZY+1)
#define DEBUG_HASH (DEBUG_GENR+1)
fast fallback for the case where xxHash libraries are not available at
build time.
-based-on: 9f9240b661c5f381831b62d72b6ea928a91ff43a
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
-@@ -729,10 +729,12 @@ static int generate_and_send_sums(int fd, OFF_T len, int f_out, int f_copy)
+@@ -773,10 +773,12 @@ static int generate_and_send_sums(int fd, OFF_T len, int f_out, int f_copy)
if (append_mode > 0 && f_copy < 0)
return 0;
for (i = 0; i < sum.count; i++) {
int32 n1 = (int32)MIN(len, (OFF_T)sum.blength);
-@@ -750,7 +752,7 @@ static int generate_and_send_sums(int fd, OFF_T len, int f_out, int f_copy)
+@@ -794,7 +796,7 @@ static int generate_and_send_sums(int fd, OFF_T len, int f_out, int f_copy)
}
sum1 = get_checksum1(map, n1);
if (DEBUG_GTE(DELTASUM, 3)) {
rprintf(FINFO,
-@@ -762,8 +764,10 @@ static int generate_and_send_sums(int fd, OFF_T len, int f_out, int f_copy)
+@@ -806,8 +808,10 @@ static int generate_and_send_sums(int fd, OFF_T len, int f_out, int f_copy)
write_buf(f_out, sum2, sum.s2length);
}
#ifdef HAVE_SIMD
#include <immintrin.h>
-@@ -480,9 +500,235 @@ uint32 get_checksum1(char *buf1, int32 len)
+@@ -473,9 +493,235 @@ uint32 get_checksum1(char *buf1, int32 len)
return get_checksum1_cpp(buf1, len);
}
#pragma clang optimize off
#pragma GCC push_options
#pragma GCC optimize ("O0")
-@@ -493,7 +739,9 @@ uint32 get_checksum1(char *buf1, int32 len)
+@@ -486,7 +732,9 @@ uint32 get_checksum1(char *buf1, int32 len)
#ifndef CLOCK_MONOTONIC_RAW
#define CLOCK_MONOTONIC_RAW CLOCK_MONOTONIC
#endif
static void benchmark(const char* desc, int32 (*func)(schar* buf, int32 len, int32 i, uint32* ps1, uint32* ps2), schar* buf, int32 len) {
struct timespec start, end;
uint64_t us;
-@@ -509,7 +757,7 @@ static void benchmark(const char* desc, int32 (*func)(schar* buf, int32 len, int
+@@ -502,7 +750,7 @@ static void benchmark(const char* desc, int32 (*func)(schar* buf, int32 len, int
clock_gettime(CLOCK_MONOTONIC_RAW, &end);
us = next == 0 ? 0 : (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_nsec - start.tv_nsec) / 1000;
cs = next == 0 ? 0 : (s1 & 0xffff) + (s2 << 16);
}
static int32 get_checksum1_auto(schar* buf, int32 len, int32 i, uint32* ps1, uint32* ps2) {
-@@ -533,10 +781,108 @@ int main() {
+@@ -526,10 +774,108 @@ int main() {
free(buf);
return 0;
}
./configure (optional if already run)
make
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int delete_mode;
extern int delete_before;
extern int delete_during;
-@@ -507,6 +508,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
+@@ -504,6 +505,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
const char *xname)
{
if (statret >= 0) { /* A from-dest-dir statret can == 1! */
int keep_time = !preserve_times ? 0
: S_ISDIR(file->mode) ? preserve_times & PRESERVE_DIR_TIMES
: S_ISLNK(file->mode) ? preserve_times & PRESERVE_LINK_TIMES
-@@ -544,9 +546,9 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
+@@ -541,9 +543,9 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
} else if (preserve_executability
&& ((sxp->st.st_mode & 0111 ? 1 : 0) ^ (file->mode & 0111 ? 1 : 0)))
iflags |= ITEM_REPORT_PERMS;
iflags |= ITEM_REPORT_GROUP;
#ifdef SUPPORT_ACLS
if (preserve_acls && !S_ISLNK(file->mode)) {
-@@ -1439,7 +1441,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1447,7 +1449,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
real_ret = statret;
if (file->flags & FLAG_DIR_CREATED)
statret = -1;
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
--sparse, -S turn sequences of nulls into sparse blocks
-@@ -1405,6 +1406,11 @@ your home directory (remove the '=' for that).
+@@ -1411,6 +1412,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: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
TODO: the configure changes should abort if the user requests --enable-slp
and we can't honor that request.
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
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
-@@ -1018,6 +1018,29 @@ if test $rsync_cv_can_hardlink_special = yes; then
+@@ -1077,6 +1077,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
+
AC_CACHE_CHECK([for working socketpair],rsync_cv_HAVE_SOCKETPAIR,[
AC_RUN_IFELSE([AC_LANG_SOURCE([[
- #include <sys/types.h>
+ #ifdef HAVE_SYS_TYPES_H
diff --git a/daemon-parm.txt b/daemon-parm.txt
--- a/daemon-parm.txt
+++ b/daemon-parm.txt
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
-@@ -1405,6 +1405,22 @@ static int start_client(int argc, char *argv[])
+@@ -1408,6 +1408,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);
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -224,6 +224,10 @@
+@@ -234,6 +234,10 @@
#define SIGNIFICANT_ITEM_FLAGS (~(\
ITEM_BASIS_TYPE_FOLLOWS | ITEM_XNAME_FOLLOWS | ITEM_LOCAL_CHANGE))
diff --git a/usage.c b/usage.c
--- a/usage.c
+++ b/usage.c
-@@ -131,6 +131,11 @@ static void print_info_flags(enum logcode f)
+@@ -137,6 +137,11 @@ static void print_info_flags(enum logcode f)
#endif
"crtimes",
./configure (optional if already run)
make
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
-- Matt McCutchen <hashproduct@gmail.com>
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
{"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 },
-@@ -2768,6 +2770,8 @@ void server_options(char **args, int *argc_p)
+@@ -2729,6 +2731,8 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before xfer, not during
-@@ -1620,6 +1621,16 @@ your home directory (remove the '=' for that).
+@@ -1632,6 +1633,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: d2a97a7ab492e0d0548708251309e077e6aa8c8b
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int size_only;
extern OFF_T max_size;
extern OFF_T min_size;
-@@ -615,7 +616,7 @@ int quick_check_ok(enum filetype ftype, const char *fn, struct file_struct *file
+@@ -616,7 +617,7 @@ int quick_check_ok(enum filetype ftype, const char *fn, struct file_struct *file
{
switch (ftype) {
case FT_REG:
--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)
-@@ -3292,6 +3295,36 @@ your home directory (remove the '=' for that).
+@@ -3289,6 +3292,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: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/fileio.c b/fileio.c
--- a/fileio.c
+++ b/fileio.c
{"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 },
-@@ -2684,6 +2686,12 @@ void server_options(char **args, int *argc_p)
+@@ -2645,6 +2647,12 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
--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
-@@ -1477,6 +1478,18 @@ your home directory (remove the '=' for that).
+@@ -1483,6 +1484,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: 58f464f4daa1b1ee00c6afd898a19ca5cd81bf58
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/NEWS.md b/NEWS.md
--- a/NEWS.md
+++ b/NEWS.md
./configure (optional if already run)
make
-based-on: e94bad1c156fc3910f24e2b3b71a81b0b0bdeb70
+based-on: 603cf476ef5a1155203037d2127341cdbb8646d7
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
am_starting_up = 0;
return 1;
-@@ -2887,6 +2907,12 @@ void server_options(char **args, int *argc_p)
+@@ -2848,6 +2868,12 @@ void server_options(char **args, int *argc_p)
if (relative_paths && !implied_dirs && (!am_sender || protocol_version >= 30))
args[ac++] = "--no-implied-dirs";
--checksum-seed=NUM set block/file checksum seed (advanced)
--ipv4, -4 prefer IPv4
--ipv6, -6 prefer IPv6
-@@ -3319,6 +3320,25 @@ your home directory (remove the '=' for that).
+@@ -3331,6 +3332,25 @@ your home directory (remove the '=' for that).
free to specify just the local charset for a daemon transfer (e.g.
`--iconv=utf8`).