Mention the latest time-comparing fixes.
[rsync/rsync.git] / generator.c
index ec5a4d5..964b403 100644 (file)
@@ -150,7 +150,7 @@ static int delete_item(char *fname, int mode, int flags)
                deletion_count--;
                return 0;
        }
-       if (!zap_dir || (errno != ENOTEMPTY && errno != EEXIST)) {
+       if (!zap_dir) {
                rsyserr(FERROR, errno, "delete_file: rmdir %s failed",
                        full_fname(fname));
                return -1;
@@ -169,10 +169,7 @@ static int delete_item(char *fname, int mode, int flags)
                        continue;
 
                f_name_to(fp, buf);
-               if (delete_item(buf, fp->mode, flags & ~DEL_TERSE) != 0) {
-                       flist_free(dirlist);
-                       return -1;
-               }
+               delete_item(buf, fp->mode, flags & ~DEL_TERSE);
        }
        flist_free(dirlist);
 
@@ -265,8 +262,7 @@ static void delete_in_dir(struct file_list *flist, char *fbuf,
                if (flist_find(flist, fp) < 0) {
                        int mode = fp->mode;
                        f_name_to(fp, delbuf);
-                       if (delete_item(delbuf, mode, DEL_FORCE_RECURSE) < 0)
-                               break;
+                       delete_item(delbuf, mode, DEL_FORCE_RECURSE);
                }
        }
 
@@ -327,8 +323,9 @@ void itemize(struct file_struct *file, int ndx, int statret, STRUCT_STAT *st,
                            : S_ISDIR(file->mode) ? !omit_dir_times
                            : !S_ISLNK(file->mode);
 
-                       if ((iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !keep_time)
-                           || (keep_time && file->modtime != st->st_mtime))
+                       if ((iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !keep_time
+                            && (!(iflags & ITEM_XNAME_FOLLOWS) || *xname))
+                           || (keep_time && cmp_modtime(file->modtime, st->st_mtime) != 0))
                                iflags |= ITEM_REPORT_TIME;
                        if (preserve_perms && file->mode != st->st_mode)
                                iflags |= ITEM_REPORT_PERMS;
@@ -532,7 +529,7 @@ static int find_fuzzy(struct file_struct *file, struct file_list *dirlist)
                name = fp->basename;
 
                if (fp->length == file->length
-                   && fp->modtime == file->modtime) {
+                   && cmp_modtime(fp->modtime, file->modtime) == 0) {
                        if (verbose > 4) {
                                rprintf(FINFO,
                                        "fuzzy size/modtime match for %s\n",