./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/acls.c b/acls.c
--- a/acls.c
+++ b/acls.c
Fix a bug that could lose some bits when stripping some (supposedly)
superfluous ACL info.
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
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: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
}
}
-@@ -2050,7 +2061,7 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
+@@ -2049,8 +2060,11 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
+ if (need_retouch_dir_times) {
STRUCT_STAT st;
if (link_stat(fname, &st, 0) == 0
- && cmp_time(st.st_mtime, file->modtime) != 0)
+- && cmp_time(st.st_mtime, file->modtime) != 0)
- set_modtime(fname, file->modtime, F_MOD_NSEC(file), file->mode);
-+ set_times(fname, file->modtime, F_MOD_NSEC(file), file->modtime, file->mode);
++ && cmp_time(st.st_mtime, file->modtime) != 0) {
++ st.st_mtime = file->modtime;
++ st.ST_MTIME_NSEC = F_MOD_NSEC(file);
++ set_times(fname, &st);
++ }
}
if (counter >= loopchk_limit) {
if (allowed_lull)
diff --git a/rsync.c b/rsync.c
--- a/rsync.c
+++ b/rsync.c
-@@ -458,6 +458,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
- int updated = 0;
- stat_x sx2;
- int change_uid, change_gid;
-+ time_t atime, mtime;
- mode_t new_mode = file->mode;
- int inherit;
-
-@@ -543,22 +544,40 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
+@@ -543,26 +543,42 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
set_xattr(fname, file, fnamecmp, sxp);
#endif
+ if (!atimes_ndx || S_ISDIR(sxp->st.st_mode))
+ flags |= ATTRS_SKIP_ATIME;
if (!(flags & ATTRS_SKIP_MTIME)
- && cmp_time(sxp->st.st_mtime, file->modtime) != 0) {
+ && (sxp->st.st_mtime != file->modtime
+ #ifdef ST_MTIME_NSEC
+ || (NSEC_BUMP(file) && (uint32)sxp->st.ST_MTIME_NSEC != F_MOD_NSEC(file))
+ #endif
+ )) {
- int ret = set_modtime(fname, file->modtime, F_MOD_NSEC(file), sxp->st.st_mode);
-+ mtime = file->modtime;
++ sxp->st.st_mtime = file->modtime;
++ sxp->st.ST_MTIME_NSEC = F_MOD_NSEC(file);
+ updated = 1;
-+ } else
-+ mtime = sxp->st.st_mtime;
++ }
+ if (!(flags & ATTRS_SKIP_ATIME)) {
+ time_t file_atime = f_atime(file);
+ if (cmp_time(sxp->st.st_atime, file_atime) != 0) {
-+ atime = file_atime;
++ sxp->st.st_atime = file_atime;
+ updated = 1;
-+ } else
-+ atime = sxp->st.st_atime;
++ }
+ } else
-+ atime = sxp->st.st_atime;
+ if (updated) {
-+ int ret = set_times(fname, mtime, F_MOD_NSEC(file), atime, sxp->st.st_mode);
++ int ret = set_times(fname, &sxp->st);
if (ret < 0) {
rsyserr(FERROR_XFER, errno, "failed to set times on %s",
full_fname(fname));
}
#ifdef SUPPORT_ACLS
-@@ -662,7 +681,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
+@@ -666,7 +682,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
/* Change permissions before putting the file into place. */
set_file_attrs(fnametmp, file, NULL, fnamecmp,
/* move tmp file over real file */
if (DEBUG_GTE(RECV, 1))
-@@ -687,7 +706,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
+@@ -691,7 +707,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
do_set_file_attrs:
set_file_attrs(fnametmp, file, NULL, fnamecmp,
-O, --omit-dir-times omit directories from --times
-J, --omit-link-times omit symlinks from --times
--super receiver attempts super-user activities
-@@ -1173,6 +1174,12 @@ cause the next transfer to behave as if it used bf(-I), causing all files to be
+@@ -1178,6 +1179,12 @@ cause the next transfer to behave as if it used bf(-I), causing all files to be
updated (though rsync's delta-transfer algorithm will make the update fairly efficient
if the files haven't actually changed, you're much better off using bf(-t)).
dit(bf(-O, --omit-dir-times)) This tells rsync to omit directories when
it is preserving modification times (see bf(--times)). If NFS is sharing
the directories on the receiving side, it is a good idea to use bf(-O).
-@@ -2130,7 +2137,10 @@ quote(itemization(
+@@ -2135,7 +2142,10 @@ quote(itemization(
sender's value (requires bf(--owner) and super-user privileges).
it() A bf(g) means the group is different and is being updated to the
sender's value (requires bf(--group) and the authority to set the group).
/* This returns 0 for success, 1 for a symlink if symlink time-setting
* is not possible, or -1 for any other error. */
-int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode)
-+int set_times(const char *fname, time_t modtime, uint32 mod_nsec, time_t atime, mode_t mode)
++int set_times(const char *fname, STRUCT_STAT *stp)
{
static int switch_step = 0;
if (DEBUG_GTE(TIME, 1)) {
- rprintf(FINFO, "set modtime of %s to (%ld) %s",
+- fname, (long)modtime,
+- asctime(localtime(&modtime)));
+ char mtimebuf[200];
+
-+ strlcpy(mtimebuf, timestring(modtime), sizeof mtimebuf);
++ strlcpy(mtimebuf, timestring(stp->st_mtime), sizeof mtimebuf);
+ rprintf(FINFO,
+ "set modtime, atime of %s to (%ld) %s, (%ld) %s\n",
- fname, (long)modtime,
-- asctime(localtime(&modtime)));
-+ mtimebuf, (long)atime, timestring(atime));
++ fname, (long)stp->st_mtime,
++ mtimebuf, (long)stp->st_atime, timestring(stp->st_atime));
}
switch (switch_step) {
#ifdef HAVE_UTIMENSAT
#include "case_N.h"
- if (do_utimensat(fname, modtime, mod_nsec) == 0)
-+ if (do_utimensat(fname, modtime, mod_nsec, atime, 0) == 0)
++ if (do_utimensat(fname, stp->st_mtime, stp->ST_MTIME_NSEC, stp->st_atime, 0) == 0)
break;
if (errno != ENOSYS)
return -1;
#ifdef HAVE_LUTIMES
#include "case_N.h"
- if (do_lutimes(fname, modtime, mod_nsec) == 0)
-+ if (do_lutimes(fname, modtime, mod_nsec, atime, 0) == 0)
++ if (do_lutimes(fname, stp->st_mtime, stp->ST_MTIME_NSEC, stp->st_atime, 0) == 0)
break;
if (errno != ENOSYS)
return -1;
-@@ -159,10 +163,10 @@ int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode)
+@@ -152,17 +156,17 @@ int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode)
+ switch_step++;
+ if (preserve_times & PRESERVE_LINK_TIMES) {
+ preserve_times &= ~PRESERVE_LINK_TIMES;
+- if (S_ISLNK(mode))
++ if (S_ISLNK(stp->st_mode))
+ return 1;
+ }
+ /* FALLTHROUGH */
#include "case_N.h"
#ifdef HAVE_UTIMES
- if (do_utimes(fname, modtime, mod_nsec) == 0)
-+ if (do_utimes(fname, modtime, mod_nsec, atime, 0) == 0)
++ if (do_utimes(fname, stp->st_mtime, stp->ST_MTIME_NSEC, stp->st_atime, 0) == 0)
break;
#else
- if (do_utime(fname, modtime, mod_nsec) == 0)
-+ if (do_utime(fname, modtime, mod_nsec, atime, 0) == 0)
++ if (do_utime(fname, stp->st_mtime, stp->ST_MTIME_NSEC, stp->st_atime, 0) == 0)
break;
#endif
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.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 },
-@@ -2596,6 +2598,10 @@ void server_options(char **args, int *argc_p)
+@@ -2599,6 +2601,10 @@ void server_options(char **args, int *argc_p)
}
if (am_sender) {
diff --git a/rsync.c b/rsync.c
--- a/rsync.c
+++ b/rsync.c
-@@ -652,7 +652,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
+@@ -656,7 +656,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
goto do_set_file_attrs;
}
if (preserve_times) {
preserve_times = PRESERVE_FILE_TIMES;
-@@ -2588,6 +2650,10 @@ void server_options(char **args, int *argc_p)
+@@ -2591,6 +2653,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) {
-@@ -2596,7 +2662,14 @@ void server_options(char **args, int *argc_p)
+@@ -2599,7 +2665,14 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/errcode.h b/errcode.h
--- a/errcode.h
+++ b/errcode.h
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
if (unsort_ndx)
F_NDX(file) = stats.num_dirs;
-@@ -2566,7 +2830,7 @@ struct file_list *recv_file_list(int f)
+@@ -2584,7 +2848,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 */
-@@ -2789,7 +3053,7 @@ void flist_free(struct file_list *flist)
+@@ -2807,7 +3071,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;
-@@ -2840,7 +3104,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2858,7 +3122,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;
-@@ -2856,8 +3120,8 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2874,8 +3138,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);
-@@ -2879,7 +3143,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2897,7 +3161,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
}
flist->high = prev_i;
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
+++ b/loadparm.c
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
{"specials", 0, POPT_ARG_VAL, &preserve_specials, 1, 0, 0 },
{"no-specials", 0, POPT_ARG_VAL, &preserve_specials, 0, 0, 0 },
{"links", 'l', POPT_ARG_VAL, &preserve_links, 1, 0, 0 },
-@@ -2760,6 +2763,9 @@ void server_options(char **args, int *argc_p)
+@@ -2763,6 +2766,9 @@ void server_options(char **args, int *argc_p)
else if (remove_source_files)
args[ac++] = "--remove-sent-files";
+ if (sxp->st.st_ino == 2 && S_ISDIR(sxp->st.st_mode))
+ flags |= ATTRS_SKIP_CRTIME;
if (!(flags & ATTRS_SKIP_MTIME)
- && cmp_time(sxp->st.st_mtime, file->modtime) != 0) {
- int ret = set_modtime(fname, file->modtime, F_MOD_NSEC(file), sxp->st.st_mode, ST_FLAGS(sxp->st));
-@@ -594,6 +597,14 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
+ && (sxp->st.st_mtime != file->modtime
+ #ifdef ST_MTIME_NSEC
+@@ -598,6 +601,14 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
else
file->flags |= FLAG_TIME_FAILED;
}
#ifdef SUPPORT_ACLS
/* It's OK to call set_acl() now, even for a dir, as the generator
-@@ -710,7 +721,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
+@@ -714,7 +725,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
/* Change permissions before putting the file into place. */
set_file_attrs(fnametmp, file, NULL, fnamecmp,
ATTRS_DELAY_IMMUTABLE
/* move tmp file over real file */
if (DEBUG_GTE(RECV, 1))
-@@ -739,7 +750,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
+@@ -743,7 +754,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
do_set_file_attrs:
set_file_attrs(fnametmp, file, NULL, fnamecmp,
-O, --omit-dir-times omit directories from --times
-J, --omit-link-times omit symlinks from --times
--super receiver attempts super-user activities
-@@ -1201,6 +1202,9 @@ cause the next transfer to behave as if it used bf(-I), causing all files to be
+@@ -1206,6 +1207,9 @@ cause the next transfer to behave as if it used bf(-I), causing all files to be
updated (though rsync's delta-transfer algorithm will make the update fairly efficient
if the files haven't actually changed, you're much better off using bf(-t)).
dit(bf(-O, --omit-dir-times)) This tells rsync to omit directories when
it is preserving modification times (see bf(--times)). If NFS is sharing
the directories on the receiving side, it is a good idea to use bf(-O).
-@@ -2103,7 +2107,7 @@ with older versions of rsync, but that also turns on the output of other
+@@ -2108,7 +2112,7 @@ with older versions of rsync, but that also turns on the output of other
verbose messages).
The "%i" escape has a cryptic output that is 11 letters long. The general
type of update being done, bf(X) is replaced by the file-type, and the
other letters represent attributes that may be output if they are being
modified.
-@@ -2162,6 +2166,8 @@ quote(itemization(
+@@ -2167,6 +2171,8 @@ quote(itemization(
it() The bf(f) means that the fileflags information changed.
it() The bf(a) means that the ACL information changed.
it() The bf(x) means that the extended attribute information changed.
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
{"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 },
-@@ -2647,6 +2650,9 @@ void server_options(char **args, int *argc_p)
+@@ -2650,6 +2653,9 @@ void server_options(char **args, int *argc_p)
else if (missing_args == 1 && !am_sender)
args[ac++] = "--ignore-missing-args";
./configure
make
-based-on: 6fe798392bdbdeb34d01b15de7f0123df3bbe850
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
-@@ -15,6 +15,7 @@ config.status
+@@ -16,6 +16,7 @@ aclocal.m4
/proto.h
/proto.h-tstamp
/rsync.1
/rsyncd.conf.5
/autom4te*.cache
/confdefs.h
-@@ -23,6 +24,7 @@ config.status
+@@ -24,6 +25,7 @@ aclocal.m4
/getgroups
/gmon.out
/rsync
mandir=@mandir@
LIBS=@LIBS@
-@@ -28,7 +29,7 @@ VERSION=@RSYNC_VERSION@
+@@ -29,7 +30,7 @@ VERSION=@RSYNC_VERSION@
.SUFFIXES:
.SUFFIXES: .c .o
--GENFILES=configure.sh config.h.in proto.h proto.h-tstamp rsync.1 rsyncd.conf.5
-+GENFILES=configure.sh config.h.in proto.h proto.h-tstamp rsync.1 rsyncdb.1 rsyncd.conf.5
+-GENFILES=configure.sh aclocal.m4 config.h.in proto.h proto.h-tstamp rsync.1 rsyncd.conf.5
++GENFILES=configure.sh aclocal.m4 config.h.in proto.h proto.h-tstamp rsync.1 rsyncdb.1 rsyncd.conf.5
HEADERS=byteorder.h config.h errcode.h proto.h rsync.h ifuncs.h itypes.h inums.h \
lib/pool_alloc.h
LIBOBJ=lib/wildmatch.o lib/compat.o lib/snprintf.o lib/mdfour.o lib/md5.o \
-@@ -38,7 +39,7 @@ zlib_OBJS=zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o \
+@@ -39,7 +40,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
OBJS2=options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o \
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 \
-@@ -62,14 +63,17 @@ CHECK_OBJS=tls.o testrun.o getgroups.o getfsdev.o t_stub.o t_unsafe.o trimslash.
+@@ -63,14 +64,17 @@ CHECK_OBJS=tls.o testrun.o getgroups.o getfsdev.o t_stub.o t_unsafe.o trimslash.
$(CC) -I. -I$(srcdir) $(CFLAGS) $(CPPFLAGS) -c $< @CC_SHOBJ_FLAG@
@OBJ_RESTORE@
if test -f rsyncd.conf.5; then ${INSTALLMAN} -m 644 rsyncd.conf.5 ${DESTDIR}${mandir}/man5; fi
install-ssl-client: rsync-ssl stunnel-rsync
-@@ -92,6 +96,9 @@ install-strip:
+@@ -93,6 +97,9 @@ install-strip:
rsync$(EXEEXT): $(OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
$(OBJS): $(HEADERS)
$(CHECK_OBJS): $(HEADERS)
-@@ -208,22 +215,27 @@ proto.h: proto.h-tstamp
+@@ -212,22 +219,27 @@ proto.h: proto.h-tstamp
proto.h-tstamp: $(srcdir)/*.c $(srcdir)/lib/compat.c config.h
perl $(srcdir)/mkproto.pl $(srcdir)/*.c $(srcdir)/lib/compat.c
diff --git a/cleanup.c b/cleanup.c
--- a/cleanup.c
+++ b/cleanup.c
-@@ -26,6 +26,7 @@ extern int am_server;
+@@ -27,6 +27,7 @@ extern int am_server;
extern int am_daemon;
extern int am_receiver;
extern int io_error;
extern int keep_partial;
extern int got_xfer_error;
extern int protocol_version;
-@@ -141,6 +142,12 @@ NORETURN void _exit_cleanup(int code, const char *file, int line)
+@@ -142,6 +143,12 @@ NORETURN void _exit_cleanup(int code, const char *file, int line)
#include "case_N.h"
switch_step++;
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -345,6 +345,7 @@ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \
+@@ -351,6 +351,7 @@ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \
unistd.h utime.h grp.h compat.h sys/param.h ctype.h sys/wait.h \
sys/ioctl.h sys/filio.h string.h stdlib.h sys/socket.h sys/mode.h \
sys/un.h sys/attr.h mcheck.h arpa/inet.h arpa/nameser.h locale.h \
netdb.h malloc.h float.h limits.h iconv.h libcharset.h langinfo.h \
sys/acl.h acl/libacl.h attr/xattr.h sys/xattr.h sys/extattr.h \
popt.h popt/popt.h linux/falloc.h netinet/in_systm.h netinet/ip.h \
-@@ -1100,6 +1101,48 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x"
+@@ -1103,6 +1104,48 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x"
fi
fi
extern int am_starting_up;
extern int allow_8bit_chars;
extern int protocol_version;
-@@ -738,6 +739,8 @@ struct file_list *flist_for_ndx(int ndx, const char *fatal_error_loc)
+@@ -742,6 +743,8 @@ struct file_list *flist_for_ndx(int ndx, const char *fatal_error_loc)
const char *who_am_i(void)
{
{"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 },
-@@ -2634,8 +2638,14 @@ void server_options(char **args, int *argc_p)
+@@ -2637,8 +2641,14 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
--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
-@@ -1809,6 +1811,17 @@ the bf(--partial-dir) option, that directory will be used instead. These
+@@ -1814,6 +1816,17 @@ the bf(--partial-dir) option, that directory will be used instead. These
potential alternate-basis files will be removed as the transfer progresses.
This option conflicts with bf(--inplace) and bf(--append).
a file that can't use it, while missing out on giving it to a file
that could use it.
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
static void send_directory(int f, struct file_list *flist,
char *fbuf, int len, int flags);
-@@ -2568,6 +2610,25 @@ struct file_list *recv_file_list(int f)
+@@ -2586,6 +2628,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);
delay_updates ? "delay-updates" : "partial-dir");
return 0;
}
-@@ -2630,6 +2634,8 @@ void server_options(char **args, int *argc_p)
+@@ -2633,6 +2637,8 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
--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
-@@ -1793,6 +1794,21 @@ Note that the use of the bf(--delete) option might get rid of any potential
+@@ -1798,6 +1799,21 @@ Note that the use of the bf(--delete) option might get rid of any potential
fuzzy-match files, so either use bf(--delete-after) or specify some
filename exclusions if you need to prevent this.
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-m, --prune-empty-dirs prune empty directory chains from file-list
--numeric-ids don't map uid/gid values by user/group name
--usermap=STRING custom username mapping
-@@ -2362,6 +2363,14 @@ See also the "atomic-rsync" perl script in the "support" subdir for an
+@@ -2367,6 +2368,14 @@ See also the "atomic-rsync" perl script in the "support" subdir for an
update algorithm that is even more atomic (it uses bf(--link-dest) and a
parallel hierarchy of files).
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
./configure
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
-@@ -45,7 +45,7 @@ popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
+@@ -46,7 +46,7 @@ popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
popt/popthelp.o popt/poptparse.o
OBJS=$(OBJS1) $(OBJS2) $(OBJS3) $(DAEMON_OBJ) $(LIBOBJ) @BUILD_ZLIB@ @BUILD_POPT@
# Programs we must have to run the test cases
CHECK_PROGS = rsync$(EXEEXT) tls$(EXEEXT) getgroups$(EXEEXT) getfsdev$(EXEEXT) \
-@@ -127,7 +127,7 @@ getgroups$(EXEEXT): getgroups.o
+@@ -128,7 +128,7 @@ getgroups$(EXEEXT): getgroups.o
getfsdev$(EXEEXT): getfsdev.o
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ getfsdev.o $(LIBS)
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -597,6 +597,7 @@ AC_FUNC_UTIME_NULL
+@@ -600,6 +600,7 @@ AC_FUNC_UTIME_NULL
AC_FUNC_ALLOCA
AC_CHECK_FUNCS(waitpid wait4 getcwd strdup chown chmod lchmod mknod mkfifo \
fchmod fstat ftruncate strchr readlink link utime utimes lutimes strftime \
{"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 },
-@@ -2537,6 +2563,9 @@ void server_options(char **args, int *argc_p)
+@@ -2540,6 +2566,9 @@ void server_options(char **args, int *argc_p)
if (xfer_dirs && !recurse && delete_mode && am_sender)
args[ac++] = "--no-r";
if (do_compression && def_compress_level != Z_DEFAULT_COMPRESSION) {
if (asprintf(&arg, "--compress-level=%d", def_compress_level) < 0)
goto oom;
-@@ -2624,6 +2653,16 @@ void server_options(char **args, int *argc_p)
+@@ -2627,6 +2656,16 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--delete-excluded";
if (force_delete)
args[ac++] = "--force";
/* We shouldn't have attempted to change uid
* or gid unless have the privilege. */
rsyserr(FERROR_XFER, errno, "%s %s failed",
-@@ -549,7 +583,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
- flags |= ATTRS_SKIP_MTIME;
- if (!(flags & ATTRS_SKIP_MTIME)
- && cmp_time(sxp->st.st_mtime, file->modtime) != 0) {
+@@ -553,7 +587,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
+ || (NSEC_BUMP(file) && (uint32)sxp->st.ST_MTIME_NSEC != F_MOD_NSEC(file))
+ #endif
+ )) {
- int ret = set_modtime(fname, file->modtime, F_MOD_NSEC(file), sxp->st.st_mode);
+ int ret = set_modtime(fname, file->modtime, F_MOD_NSEC(file), sxp->st.st_mode, ST_FLAGS(sxp->st));
if (ret < 0) {
rsyserr(FERROR_XFER, errno, "failed to set times on %s",
full_fname(fname));
-@@ -576,7 +610,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
+@@ -580,7 +614,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
#ifdef HAVE_CHMOD
if (!BITS_EQUAL(sxp->st.st_mode, new_mode, CHMOD_BITS)) {
if (ret < 0) {
rsyserr(FERROR_XFER, errno,
"failed to set permissions on %s",
-@@ -588,6 +622,19 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
+@@ -592,6 +626,19 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
}
#endif
if (INFO_GTE(NAME, 2) && flags & ATTRS_REPORT) {
if (updated)
rprintf(FCLIENT, "%s\n", fname);
-@@ -662,7 +709,8 @@ int finish_transfer(const char *fname, const char *fnametmp,
+@@ -666,7 +713,8 @@ int finish_transfer(const char *fname, const char *fnametmp,
/* Change permissions before putting the file into place. */
set_file_attrs(fnametmp, file, NULL, fnamecmp,
/* move tmp file over real file */
if (DEBUG_GTE(RECV, 1))
-@@ -679,6 +727,10 @@ int finish_transfer(const char *fname, const char *fnametmp,
+@@ -683,6 +731,10 @@ int finish_transfer(const char *fname, const char *fnametmp,
}
if (ret == 0) {
/* The file was moved into place (not copied), so it's done. */
dit(--no-OPTION) You may turn off one or more implied options by prefixing
the option name with "no-". Not all options may be prefixed with a "no-":
-@@ -943,7 +948,7 @@ they would be using bf(--copy-links).
+@@ -948,7 +953,7 @@ they would be using bf(--copy-links).
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 bf(--keep-dirlinks) for an analogous option for the receiving
side.
-@@ -1106,6 +1111,29 @@ Note that this option does not copy rsyncs special xattr values (e.g. those
+@@ -1111,6 +1116,29 @@ Note that this option does not copy rsyncs special xattr values (e.g. those
used by bf(--fake-super)) unless you repeat the option (e.g. -XX). This
"copy all xattrs" mode cannot be used with bf(--fake-super).
dit(bf(--chmod)) This option tells rsync to apply one or more
comma-separated "chmod" modes to the permission of the files in the
transfer. The resulting value is treated as though it were the permissions
-@@ -1435,12 +1463,13 @@ display as a "*missing" entry in the bf(--list-only) output.
+@@ -1440,12 +1468,13 @@ display as a "*missing" entry in the bf(--list-only) output.
dit(bf(--ignore-errors)) Tells bf(--delete) to go ahead and delete files
even when there are I/O errors.
bf(--recursive) option was also enabled.
dit(bf(--max-delete=NUM)) This tells rsync not to delete more than NUM
-@@ -2074,7 +2103,7 @@ with older versions of rsync, but that also turns on the output of other
+@@ -2079,7 +2108,7 @@ with older versions of rsync, but that also turns on the output of other
verbose messages).
The "%i" escape has a cryptic output that is 11 letters long. The general
type of update being done, bf(X) is replaced by the file-type, and the
other letters represent attributes that may be output if they are being
modified.
-@@ -2130,7 +2159,7 @@ quote(itemization(
+@@ -2135,7 +2164,7 @@ quote(itemization(
sender's value (requires bf(--owner) and super-user privileges).
it() A bf(g) means the group is different and is being updated to the
sender's value (requires bf(--group) and the authority to set the group).
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
diff --git a/rsync.yo b/rsync.yo
--- a/rsync.yo
+++ b/rsync.yo
-@@ -1128,6 +1128,8 @@ quote(--chmod=D2775,F664)
+@@ -1133,6 +1133,8 @@ quote(--chmod=D2775,F664)
It is also legal to specify multiple bf(--chmod) options, as each
additional option is just appended to the list of changes to make.
See the bf(--perms) and bf(--executability) options for how the resulting
permission value can be applied to the files in the transfer.
-@@ -2024,6 +2026,10 @@ be omitted, but if USER is empty, a leading colon must be supplied.
+@@ -2029,6 +2031,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.
-@@ -2883,6 +2889,15 @@ itemization(
+@@ -2888,6 +2894,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)
-@@ -2944,6 +2959,12 @@ itemization(
+@@ -2949,6 +2964,12 @@ itemization(
a rule prefix such as bf(hide)).
)
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
{"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 },
-@@ -2709,6 +2712,9 @@ void server_options(char **args, int *argc_p)
+@@ -2712,6 +2715,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = tmpdir;
}
if (block_size > MAX_BLOCK_SIZE) {
snprintf(err_buf, sizeof err_buf,
"--block-size=%lu is too large (max: %u)\n", block_size, MAX_BLOCK_SIZE);
-@@ -2573,6 +2593,11 @@ void server_options(char **args, int *argc_p)
+@@ -2576,6 +2596,11 @@ void server_options(char **args, int *argc_p)
if (preserve_fileflags)
args[ac++] = "--fileflags";
flags |= ATTRS_SKIP_CRTIME;
if (!(flags & ATTRS_SKIP_MTIME)
+#ifdef SUPPORT_HFS_COMPRESSION
-+ && !(sxp->st.st_flags & UF_COMPRESSED) /* setting this alters mtime, so defer to after set_fileflags */
++ && !(sxp->st.st_flags & UF_COMPRESSED) /* setting this alters mtime, so defer to after set_fileflags */
+#endif
- && cmp_time(sxp->st.st_mtime, file->modtime) != 0) {
- int ret = set_modtime(fname, file->modtime, F_MOD_NSEC(file), sxp->st.st_mode, ST_FLAGS(sxp->st));
- if (ret < 0) {
-@@ -643,6 +652,16 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
+ && (sxp->st.st_mtime != file->modtime
+ #ifdef ST_MTIME_NSEC
+ || (NSEC_BUMP(file) && (uint32)sxp->st.ST_MTIME_NSEC != F_MOD_NSEC(file))
+@@ -647,6 +656,16 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
&& !set_fileflags(fname, fileflags))
goto cleanup;
updated = 1;
-o, --owner preserve owner (super-user only)
-g, --group preserve group
--devices preserve device files (super-user only)
-@@ -1135,6 +1137,42 @@ flags on files and directories that are being updated or deleted on the
+@@ -1140,6 +1142,42 @@ flags on files and directories that are being updated or deleted on the
receiving side. It does not try to affect user flags. This option overrides
bf(--force-change) and bf(--force-uchange).
- Make this code handle multibyte character encodings, and honor the
--iconv setting when converting case.
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
extern int ignore_errors;
extern int numeric_ids;
extern int recurse;
-@@ -3030,6 +3031,7 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
+@@ -3048,6 +3049,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;
-@@ -3140,7 +3142,15 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
+@@ -3158,7 +3160,15 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
if (type1 != type2)
return type1 == t_PATH ? 1 : -1;
}
{"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},
-@@ -2659,6 +2663,9 @@ void server_options(char **args, int *argc_p)
+@@ -2662,6 +2666,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
-@@ -1744,6 +1745,10 @@ default (with is overridden by both the environment and the command-line).
+@@ -1749,6 +1750,10 @@ default (with is overridden by both the environment and the command-line).
This option will eventually become a new default setting at some
as-yet-undetermined point in the future.
./configure
make
-based-on: 962f8b90045ab331fc04c9e65f80f1a53e68243b
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
-@@ -39,7 +39,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
+@@ -40,7 +40,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
OBJS2=options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o \
fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -675,6 +675,31 @@ if test x"$enable_iconv" != x"no"; then
+@@ -678,6 +678,31 @@ if test x"$enable_iconv" != x"no"; then
AC_DEFINE(UTF8_CHARSET, "UTF-8", [String to pass to iconv() for the UTF-8 charset.])
fi
./configure
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
-@@ -39,7 +39,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
+@@ -40,7 +40,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
OBJS2=options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o \
fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
}
if (daemon_filter_list.head && !am_sender) {
filter_rule_list *elp = &daemon_filter_list;
-@@ -2738,6 +2762,12 @@ void server_options(char **args, int *argc_p)
+@@ -2741,6 +2765,12 @@ void server_options(char **args, int *argc_p)
} else if (inplace)
args[ac++] = "--inplace";
extern struct file_list *cur_flist, *first_flist, *dir_flist;
extern struct chmod_mode_struct *daemon_chmod_modes;
#ifdef ICONV_OPTION
-@@ -679,6 +680,10 @@ int finish_transfer(const char *fname, const char *fnametmp,
+@@ -683,6 +684,10 @@ int finish_transfer(const char *fname, const char *fnametmp,
}
if (ret == 0) {
/* The file was moved into place (not copied), so it's done. */
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
--skip-compress=LIST skip compressing files with suffix in LIST
-@@ -1874,6 +1875,48 @@ bf(--link-dest) from working properly for a non-super-user when bf(-o) was
+@@ -1879,6 +1880,48 @@ bf(--link-dest) from working properly for a non-super-user when bf(-o) was
specified (or implied by bf(-a)). You can work-around this bug by avoiding
the bf(-o) option when sending to an old rsync.
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/authenticate.c b/authenticate.c
--- a/authenticate.c
+++ b/authenticate.c
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/access.c b/access.c
--- a/access.c
+++ b/access.c
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
-S, --sparse handle sparse files efficiently
-@@ -1192,6 +1193,10 @@ directories.
+@@ -1197,6 +1198,10 @@ directories.
dit(bf(-J, --omit-link-times)) This tells rsync to omit symlinks when
it is preserving modification times (see bf(--times)).
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
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: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
LDFLAGS=@LDFLAGS@
+LIBSLP=@LIBSLP@
+SLPOBJ=@SLPOBJ@
+ LIBOBJDIR=lib/
INSTALLCMD=@INSTALL@
- INSTALLMAN=@INSTALL@
-@@ -40,7 +42,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
+@@ -41,7 +43,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
OBJS2=options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o \
fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
OBJS3=progress.o pipe.o
popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
popt/popthelp.o popt/poptparse.o
OBJS=$(OBJS1) $(OBJS2) $(OBJS3) $(DAEMON_OBJ) $(LIBOBJ) @BUILD_ZLIB@ @BUILD_POPT@
-@@ -90,7 +92,7 @@ install-strip:
+@@ -91,7 +93,7 @@ install-strip:
$(MAKE) INSTALL_STRIP='-s' install
rsync$(EXEEXT): $(OBJS)
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -734,6 +734,29 @@ if test $rsync_cv_can_hardlink_special = yes; then
+@@ -737,6 +737,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
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
-- Matt McCutchen <hashproduct@gmail.com>
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
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 },
-@@ -2638,6 +2641,8 @@ void server_options(char **args, int *argc_p)
+@@ -2641,6 +2644,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
-@@ -1332,6 +1333,14 @@ bf(--exclude='*.new') for the rsync transfer).
+@@ -1337,6 +1338,14 @@ bf(--exclude='*.new') for the rsync transfer).
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: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
if (files_from) {
char *h, *p;
int q;
-@@ -2647,6 +2666,25 @@ void server_options(char **args, int *argc_p)
+@@ -2650,6 +2669,25 @@ void server_options(char **args, int *argc_p)
else if (missing_args == 1 && !am_sender)
args[ac++] = "--ignore-missing-args";
--protocol=NUM force an older protocol version to be used
--iconv=CONVERT_SPEC request charset conversion of filenames
--checksum-seed=NUM set block/file checksum seed (advanced)
-@@ -2543,6 +2546,33 @@ file previously generated by bf(--write-batch).
+@@ -2548,6 +2551,33 @@ file previously generated by bf(--write-batch).
If em(FILE) is bf(-), the batch data will be read from standard input.
See the "BATCH MODE" section for details.
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
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 },
-@@ -2570,6 +2573,12 @@ void server_options(char **args, int *argc_p)
+@@ -2573,6 +2576,12 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
--preallocate allocate dest files before writing
-n, --dry-run perform a trial run with no changes made
-W, --whole-file copy files whole (w/o delta-xfer algorithm)
-@@ -1248,6 +1249,15 @@ filesystem, but with this option rsync will probably copy more slowly. If the
+@@ -1253,6 +1254,15 @@ filesystem, but with this option rsync will probably copy more slowly. If the
destination is not an extent-supporting filesystem (such as ext4, xfs, NTFS,
etc.), this option may have no positive effect at all.
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/io.c b/io.c
--- a/io.c
+++ b/io.c
default:
/* A large opt value means that set_refuse_options()
* turned this option off. */
-@@ -2582,6 +2618,15 @@ void server_options(char **args, int *argc_p)
+@@ -2585,6 +2621,15 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
--write-batch=FILE write a batched update to FILE
--only-write-batch=FILE like --write-batch but w/o updating dest
--read-batch=FILE read a batched update from FILE
-@@ -2517,6 +2519,19 @@ files can show up as being rapidly sent when the data is quickly buffered,
+@@ -2522,6 +2524,19 @@ files can show up as being rapidly sent when the data is quickly buffered,
while other can show up as very slow when the flushing of the output buffer
occurs. This may be fixed in a future version.
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
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);
-@@ -2451,6 +2475,15 @@ struct file_list *recv_file_list(int f)
+@@ -2452,6 +2476,15 @@ struct file_list *recv_file_list(int f, int dir_ndx)
parse_name_map(usermap, True);
if (groupmap)
parse_name_map(groupmap, False);
am_starting_up = 0;
return 1;
-@@ -2755,6 +2776,12 @@ void server_options(char **args, int *argc_p)
+@@ -2758,6 +2779,12 @@ void server_options(char **args, int *argc_p)
if (relative_paths && !implied_dirs && (!am_sender || protocol_version >= 30))
args[ac++] = "--no-implied-dirs";
--checksum-seed=NUM set block/file checksum seed (advanced)
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
-@@ -2581,6 +2582,22 @@ daemon uses the charset specified in its "charset" configuration parameter
+@@ -2586,6 +2587,22 @@ daemon uses the charset specified in its "charset" configuration parameter
regardless of the remote charset you actually pass. Thus, you may feel free to
specify just the local charset for a daemon transfer (e.g. bf(--iconv=utf8)).
./configure (optional if already run)
make
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
This patch has not yet been tested by me (Wayne), but was provided
Darryl Dixon. Thanks!
-based-on: 7cb0de6326c915a72253fd103dae93308031ec3f
+based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
default:
/* A large opt value means that set_refuse_options()
* turned this option off. */
-@@ -2755,6 +2763,9 @@ void server_options(char **args, int *argc_p)
+@@ -2758,6 +2766,9 @@ void server_options(char **args, int *argc_p)
if (relative_paths && !implied_dirs && (!am_sender || protocol_version >= 30))
args[ac++] = "--no-implied-dirs";