Fixed a bug in the --dry-run output when using --link-dest.
[rsync/rsync.git] / generator.c
index bd8a672..fd4f9d5 100644 (file)
@@ -844,30 +844,31 @@ static void recv_generator(char *fname, struct file_list *flist,
                        break;
                } while (basis_dir[++i] != NULL);
                if (match_level) {
+                       statret = 0;
                        if (i != best_match) {
                                i = best_match;
                                pathjoin(fnamecmpbuf, sizeof fnamecmpbuf,
                                         basis_dir[i], fname);
+                               if (link_stat(fnamecmpbuf, &st, 0) < 0) {
+                                       match_level = 0;
+                                       statret = -1;
+                               }
                        }
 #ifdef HAVE_LINK
-                       if (link_dest && match_level == 3 && !dry_run) {
-                               if (do_link(fnamecmpbuf, fname) < 0) {
-                                       if (verbose) {
-                                               rsyserr(FINFO, errno,
-                                                       "link %s => %s",
-                                                       full_fname(fnamecmpbuf),
-                                                       safe_fname(fname));
-                                       }
-                                       fnamecmp = fnamecmpbuf;
-                                       fnamecmp_type = i;
+                       if (link_dest && match_level == 3
+                           && do_link(fnamecmpbuf, fname) < 0) {
+                               if (verbose) {
+                                       rsyserr(FINFO, errno, "link %s => %s",
+                                               full_fname(fnamecmpbuf),
+                                               safe_fname(fname));
                                }
-                       } else
+                               match_level = 1;
+                       }
 #endif
-                       {
+                       if (match_level && match_level < 3) {
                                fnamecmp = fnamecmpbuf;
                                fnamecmp_type = i;
                        }
-                       statret = 0;
                }
        }