preserve ctimes of *unchanged* directories on receiver

Wayne Davison wayned at samba.org
Wed Mar 5 06:23:38 GMT 2008


On Tue, Mar 04, 2008 at 12:21:01PM +0100, Lasse Kliemann wrote:
> 'rsync -a' updates the ctime on a directory even if no file in that directory 
> has changed.

Earlier rsyncs always did an extra stat() prior to setting the time, so
I've restored that behavior.  The attached patch fixes this.

..wayne..
-------------- next part --------------
--- a/generator.c
+++ b/generator.c
@@ -1949,8 +1949,12 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
 		fname = f_name(file, NULL);
 		if (!(file->mode & S_IWUSR))
 			do_chmod(fname, file->mode);
-		if (need_retouch_dir_times)
-			set_modtime(fname, file->modtime, file->mode);
+		if (need_retouch_dir_times) {
+			STRUCT_STAT st;
+			if (link_stat(fname, &st, 0) == 0
+			 && cmp_time(st.st_mtime, file->modtime) != 0)
+				set_modtime(fname, file->modtime, file->mode);
+		}
 		if (allowed_lull && !(counter % lull_mod))
 			maybe_send_keepalive();
 		else if (!(counter & 0xFF))


More information about the rsync mailing list