New logging categories added to allow differentiation between
[rsync/rsync.git] / generator.c
index db0824d..046ad95 100644 (file)
@@ -84,6 +84,7 @@ extern int list_only;
 extern int read_batch;
 extern int safe_symlinks;
 extern long block_size; /* "long" because popt can't set an int32. */
+extern int unsort_ndx;
 extern int max_delete;
 extern int force_delete;
 extern int one_file_system;
@@ -95,9 +96,6 @@ extern char *backup_suffix;
 extern int backup_suffix_len;
 extern struct file_list *cur_flist, *first_flist, *dir_flist;
 extern struct filter_list_struct server_filter_list;
-#ifdef ICONV_OPTION
-extern int ic_ndx;
-#endif
 
 int ignore_perishable = 0;
 int non_perishable_cnt = 0;
@@ -198,7 +196,7 @@ static enum delret delete_item(char *fbuf, int mode, char *replace, int flags)
 
   check_ret:
        if (replace && ret != DR_SUCCESS) {
-               rprintf(FERROR, "could not make way for new %s: %s\n",
+               rprintf(FERROR_XFER, "could not make way for new %s: %s\n",
                        replace, fbuf);
        }
        return ret;
@@ -517,6 +515,14 @@ static void do_delete_pass(void)
 
 int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
 {
+#ifndef HAVE_LUTIMES
+       if (S_ISLNK(file->mode)) {
+               ;
+       } else
+#endif
+       if (preserve_times && cmp_time(sxp->st.st_mtime, file->modtime) != 0)
+               return 0;
+
        if (preserve_perms && !BITS_EQUAL(sxp->st.st_mode, file->mode, CHMOD_BITS))
                return 0;
 
@@ -895,9 +901,6 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx,
                case 2:
                        if (!unchanged_attrs(cmpbuf, file, sxp))
                                continue;
-                       if (always_checksum > 0 && preserve_times
-                        && cmp_time(sxp->st.st_mtime, file->modtime))
-                               continue;
                        best_match = j;
                        match_level = 3;
                        break;
@@ -1079,7 +1082,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx,
 #endif
                 && !S_ISDIR(file->mode)) {
                        if (do_link(cmpbuf, fname) < 0) {
-                               rsyserr(FERROR, errno,
+                               rsyserr(FERROR_XFER, errno,
                                        "failed to hard-link %s with %s",
                                        cmpbuf, fname);
                                return j;
@@ -1236,7 +1239,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                        if (relative_paths && !implied_dirs
                         && do_stat(dn, &sx.st) < 0
                         && create_directory_path(fname) < 0) {
-                               rsyserr(FERROR, errno,
+                               rsyserr(FERROR_XFER, errno,
                                        "recv_generator: mkdir %s failed",
                                        full_fname(dn));
                        }
@@ -1339,7 +1342,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                        if (!relative_paths || errno != ENOENT
                            || create_directory_path(fname) < 0
                            || (do_mkdir(fname, file->mode) < 0 && errno != EEXIST)) {
-                               rsyserr(FERROR, errno,
+                               rsyserr(FERROR_XFER, errno,
                                        "recv_generator: mkdir %s failed",
                                        full_fname(fname));
                          skipping_dir_contents:
@@ -1362,7 +1365,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                if (!am_root && !(file->mode & S_IWUSR) && dir_tweaking) {
                        mode_t mode = file->mode | S_IWUSR;
                        if (do_chmod(fname, mode) < 0) {
-                               rsyserr(FERROR, errno,
+                               rsyserr(FERROR_XFER, errno,
                                        "failed to modify permissions on %s",
                                        full_fname(fname));
                        }
@@ -1424,7 +1427,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                                set_file_attrs(fname, file, &sx, NULL, maybe_ATTRS_REPORT);
                                if (itemizing)
                                        itemize(fname, file, ndx, 0, &sx, 0, 0, NULL);
-#ifdef SUPPORT_HARD_LINKS
+#if defined SUPPORT_HARD_LINKS && defined CAN_HARDLINK_SYMLINK
                                if (preserve_hard_links && F_IS_HLINKED(file))
                                        finish_hard_link(file, fname, ndx, &sx.st, itemizing, code, -1);
 #endif
@@ -1459,7 +1462,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                }
 #endif
                if (do_symlink(sl, fname) != 0) {
-                       rsyserr(FERROR, errno, "symlink %s -> \"%s\" failed",
+                       rsyserr(FERROR_XFER, errno, "symlink %s -> \"%s\" failed",
                                full_fname(fname), sl);
                } else {
                        set_file_attrs(fname, file, NULL, NULL, 0);
@@ -1543,7 +1546,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                                (long)major(rdev), (long)minor(rdev));
                }
                if (do_mknod(fname, file->mode, rdev) < 0) {
-                       rsyserr(FERROR, errno, "mknod %s failed",
+                       rsyserr(FERROR_XFER, errno, "mknod %s failed",
                                full_fname(fname));
                } else {
                        set_file_attrs(fname, file, NULL, NULL, 0);
@@ -1661,7 +1664,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
 #endif
                if (stat_errno == ENOENT)
                        goto notify_others;
-               rsyserr(FERROR, stat_errno, "recv_generator: failed to stat %s",
+               rsyserr(FERROR_XFER, stat_errno, "recv_generator: failed to stat %s",
                        full_fname(fname));
                goto cleanup;
        }
@@ -1751,7 +1754,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                        goto pretend_missing;
                }
                if (robust_unlink(backupptr) && errno != ENOENT) {
-                       rsyserr(FERROR, errno, "unlink %s",
+                       rsyserr(FERROR_XFER, errno, "unlink %s",
                                full_fname(backupptr));
                        unmake_file(back_file);
                        back_file = NULL;
@@ -1761,7 +1764,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                if ((f_copy = do_open(backupptr, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0600)) < 0
                 && (errno != ENOENT || make_bak_dir(backupptr) < 0
                  || (f_copy = do_open(backupptr, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0600)) < 0)) {
-                       rsyserr(FERROR, errno, "open %s",
+                       rsyserr(FERROR_XFER, errno, "open %s",
                                full_fname(backupptr));
                        unmake_file(back_file);
                        back_file = NULL;
@@ -2037,7 +2040,7 @@ void generate_files(int f_out, const char *local_name)
                        f_name(fp, fbuf);
                        ndx = cur_flist->ndx_start - 1;
                        recv_generator(fbuf, fp, ndx, itemizing, code, f_out);
-                       if (delete_during && dry_run < 2) {
+                       if (delete_during && dry_run < 2 && !list_only) {
                                if (BITS_SETnUNSET(fp->flags, FLAG_CONTENT_DIR, FLAG_MISSING_DIR)) {
                                        dev_t dirdev;
                                        if (one_file_system) {
@@ -2055,11 +2058,9 @@ void generate_files(int f_out, const char *local_name)
                        if (!F_IS_ACTIVE(file))
                                continue;
 
-#ifdef ICONV_OPTION
-                       if (ic_ndx)
+                       if (unsort_ndx)
                                ndx = F_NDX(file);
                        else
-#endif
                                ndx = i + cur_flist->ndx_start;
 
                        if (solo_file)