./configure (optional if already run)
make
-based-on: 0b2d5fe4940211ba25a89f18a9889b9ab55d38ef
+based-on: db5bfe67a5d022f9ad25340db6bc2cca2cbbdb65
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
-@@ -65,6 +65,7 @@ extern int append_mode;
+@@ -67,6 +67,7 @@ extern int append_mode;
extern int make_backups;
extern int csum_length;
extern int ignore_times;
extern int size_only;
extern OFF_T max_size;
extern OFF_T min_size;
-@@ -582,6 +583,9 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
- /* Perform our quick-check heuristic for determining if a file is unchanged. */
- int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st)
- {
-+ if (date_only)
-+ return !mtime_differs(st, file);
-+
- if (st->st_size != F_LENGTH(file))
- return 0;
+@@ -621,6 +622,9 @@ int quick_check_ok(enum filetype ftype, const char *fn, struct file_struct *file
+ if (st->st_size != F_LENGTH(file))
+ return 0;
++ if (date_only)
++ return !mtime_differs(st, file);
++
+ /* If always_checksum is set then we use the checksum instead
+ * of the file mtime to determine whether to sync. */
+ if (always_checksum > 0) {
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -111,6 +111,7 @@ int safe_symlinks = 0;
+@@ -119,6 +119,7 @@ int safe_symlinks = 0;
int copy_unsafe_links = 0;
int munge_symlinks = 0;
int size_only = 0;
int daemon_bwlimit = 0;
int bwlimit = 0;
int fuzzy_basis = 0;
-@@ -838,6 +839,7 @@ static struct poptOption long_options[] = {
+@@ -688,6 +689,7 @@ static struct poptOption long_options[] = {
{"chmod", 0, POPT_ARG_STRING, 0, OPT_CHMOD, 0, 0 },
{"ignore-times", 'I', POPT_ARG_NONE, &ignore_times, 0, 0, 0 },
{"size-only", 0, POPT_ARG_NONE, &size_only, 0, 0, 0 },
{"one-file-system", 'x', POPT_ARG_NONE, 0, 'x', 0, 0 },
{"no-one-file-system",0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 },
{"no-x", 0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 },
-@@ -2724,6 +2726,9 @@ void server_options(char **args, int *argc_p)
+@@ -2830,6 +2832,9 @@ void server_options(char **args, int *argc_p)
else if (missing_args == 1 && !am_sender)
args[ac++] = "--ignore-missing-args";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -415,6 +415,7 @@ detailed description below for a complete description.
+@@ -468,6 +468,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
-@@ -640,6 +641,14 @@ your home directory (remove the '=' for that).
+@@ -737,6 +738,14 @@ expand it.
after using another mirroring system which may not preserve timestamps
exactly.
+0. `--date-only`
+
+ Normally rsync will skip any files that are already the same size and have
-+ the same modification time-stamp. With the --date-only option, files will
++ the same modification time-stamp. With the `--date-only` option, files will
+ be skipped if they have the same timestamp, regardless of size. This may be
+ useful when the remote files have passed through a size-changing filter,
+ e.g. for encryption.
+
- 0. `--modify-window`, `-@`
+ 0. `--modify-window=NUM`, `-@`
When comparing two timestamps, rsync treats the timestamps as being equal