The code can now omit requesting that the sender supply an abbreviated
[rsync/rsync-patches.git] / atimes.diff
index c1d04c0..491d4dd 100644 (file)
@@ -19,7 +19,7 @@ To use this patch, run these commands for a successful build:
  
 --- old/flist.c
 +++ new/flist.c
-@@ -48,6 +48,7 @@ extern int preserve_devices;
+@@ -49,6 +49,7 @@ extern int preserve_devices;
  extern int preserve_specials;
  extern int preserve_uid;
  extern int preserve_gid;
@@ -27,7 +27,7 @@ To use this patch, run these commands for a successful build:
  extern int relative_paths;
  extern int implied_dirs;
  extern int file_extra_cnt;
-@@ -143,6 +144,7 @@ void show_flist_stats(void)
+@@ -144,6 +145,7 @@ void show_flist_stats(void)
  static void list_file_entry(struct file_struct *f)
  {
        char permbuf[PERMSTRING_SIZE];
@@ -35,7 +35,7 @@ To use this patch, run these commands for a successful build:
        double len;
  
        if (!F_IS_ACTIVE(f)) {
-@@ -157,14 +159,16 @@ static void list_file_entry(struct file_
+@@ -158,14 +160,16 @@ static void list_file_entry(struct file_
  
  #ifdef SUPPORT_LINKS
        if (preserve_links && S_ISLNK(f->mode)) {
@@ -54,7 +54,7 @@ To use this patch, run these commands for a successful build:
                        f_name(f, NULL));
        }
  }
-@@ -348,6 +352,7 @@ int push_flist_dir(const char *dir, int 
+@@ -349,6 +353,7 @@ int push_flist_dir(const char *dir, int 
  static void send_file_entry(int f, struct file_struct *file, int ndx)
  {
        static time_t modtime;
@@ -62,7 +62,7 @@ To use this patch, run these commands for a successful build:
        static mode_t mode;
        static int64 dev;
        static dev_t rdev;
-@@ -415,6 +420,13 @@ static void send_file_entry(int f, struc
+@@ -416,6 +421,13 @@ static void send_file_entry(int f, struc
                flags |= XMIT_SAME_TIME;
        else
                modtime = file->modtime;
@@ -76,16 +76,16 @@ To use this patch, run these commands for a successful build:
  
  #ifdef SUPPORT_HARD_LINKS
        if (tmp_dev != 0) {
-@@ -482,6 +494,8 @@ static void send_file_entry(int f, struc
+@@ -483,6 +495,8 @@ static void send_file_entry(int f, struc
                write_int(f, modtime);
        if (!(flags & XMIT_SAME_MODE))
                write_int(f, to_wire_mode(mode));
 +      if (preserve_atimes && !S_ISDIR(mode) && !(flags & XMIT_SAME_ATIME))
 +              write_int(f, atime);
        if (preserve_uid && !(flags & XMIT_SAME_UID)) {
-               write_abbrevint30(f, uid);
-               if (flags & XMIT_USER_NAME_FOLLOWS) {
-@@ -558,7 +572,7 @@ static void send_file_entry(int f, struc
+               if (protocol_version < 30)
+                       write_int(f, uid);
+@@ -569,7 +583,7 @@ static void send_file_entry(int f, struc
  static struct file_struct *recv_file_entry(struct file_list *flist,
                                           int flags, int f)
  {
@@ -94,7 +94,7 @@ To use this patch, run these commands for a successful build:
        static mode_t mode;
        static int64 dev;
        static dev_t rdev;
-@@ -655,6 +669,8 @@ static struct file_struct *recv_file_ent
+@@ -667,6 +681,8 @@ static struct file_struct *recv_file_ent
                modtime = (time_t)read_int(f);
        if (!(flags & XMIT_SAME_MODE))
                mode = from_wire_mode(read_int(f));
@@ -103,7 +103,7 @@ To use this patch, run these commands for a successful build:
  
        if (chmod_modes && !S_ISLNK(mode))
                mode = tweak_mode(mode, chmod_modes);
-@@ -769,6 +785,8 @@ static struct file_struct *recv_file_ent
+@@ -791,6 +807,8 @@ static struct file_struct *recv_file_ent
                F_OWNER(file) = uid;
        if (preserve_gid)
                F_GROUP(file) = gid;
@@ -112,7 +112,7 @@ To use this patch, run these commands for a successful build:
  
        if (basename != thisname) {
                file->dirname = lastdir;
-@@ -1074,6 +1092,8 @@ struct file_struct *make_file(const char
+@@ -1096,6 +1114,8 @@ struct file_struct *make_file(const char
                F_OWNER(file) = st.st_uid;
        if (preserve_gid)
                F_GROUP(file) = st.st_gid;
@@ -136,7 +136,7 @@ To use this patch, run these commands for a successful build:
                 || (keep_time && cmp_time(file->modtime, sxp->st.st_mtime) != 0))
                        iflags |= ITEM_REPORT_TIME;
 +              if (preserve_atimes && !S_ISDIR(file->mode) && !S_ISLNK(file->mode)
-+               && cmp_time(F_ATIME(file), st->st_atime) != 0)
++               && cmp_time(F_ATIME(file), sxp->st.st_atime) != 0)
 +                      iflags |= ITEM_REPORT_ATIME;
                if (!BITS_EQUAL(sxp->st.st_mode, file->mode, CHMOD_BITS))
                        iflags |= ITEM_REPORT_PERMS;
@@ -146,10 +146,19 @@ To use this patch, run these commands for a successful build:
                        if (!hard_link_one(file, fname, cmpbuf, 1))
                                goto try_a_copy;
 +                      if (preserve_atimes)
-+                              set_file_attrs(fname, file, stp, 0);
++                              set_file_attrs(fname, file, sxp, 0);
                        if (preserve_hard_links && F_IS_HLINKED(file))
                                finish_hard_link(file, fname, &sxp->st, itemizing, code, j);
                        if (itemizing && (verbose > 1 || stdout_format_has_i > 1)) {
+@@ -1700,7 +1706,7 @@ static void touch_up_dirs(struct file_li
+               if (!(file->mode & S_IWUSR))
+                       do_chmod(fname, file->mode);
+               if (need_retouch_dir_times)
+-                      set_modtime(fname, file->modtime, file->mode);
++                      set_times(fname, file->modtime, file->modtime, file->mode);
+               if (allowed_lull && !(++j % lull_mod))
+                       maybe_send_keepalive();
+               else if (!(j % 200))
 --- old/log.c
 +++ new/log.c
 @@ -36,6 +36,7 @@ extern int msg_fd_out;
@@ -272,10 +281,10 @@ To use this patch, run these commands for a successful build:
 --- old/rsync.h
 +++ new/rsync.h
 @@ -56,6 +56,7 @@
- #define XMIT_RDEV_MINOR_IS_SMALL (1<<11)
- #define XMIT_USER_NAME_FOLLOWS (1<<12)        /* protocols >= 30 */
- #define XMIT_GROUP_NAME_FOLLOWS (1<<13) /* protocols >= 30 */
-+#define XMIT_SAME_ATIME (1<<14)               /* protocols >= 30 */
+ #define XMIT_RDEV_MINOR_8_pre30 (1<<11)       /* protocols 28 - 29  */
+ #define XMIT_GROUP_NAME_FOLLOWS (1<<11) /* protocols 30 - NOW */
+ #define XMIT_HLINK_FIRST (1<<12)      /* protocols 30 - NOW */
++#define XMIT_SAME_ATIME (1<<13)               /* protocols ?? - NOW */
  
  /* These flags are used in the live flist data. */