Commit df337831 authored by Wayne Davison's avatar Wayne Davison

When --dry-run is set, note when a directory is missing and avoid

trying to stat() any items inside that dir's hierarchy.  This fixes
a bug where a symlink to a dir getting replaced by a dir with
identical contents to the dir at the other end of the symlink would
not report the updated files in the new hierarchy. (See bug #1673)
parent bb558f67
......@@ -240,6 +240,7 @@ static void recv_generator(char *fname, struct file_list *flist,
struct file_struct *file, int ndx,
int f_out, int f_out_name)
{
static int missing_below = -1;
int fd = -1, f_copy = -1;
STRUCT_STAT st, partial_st;
struct file_struct *back_file = NULL;
......@@ -266,6 +267,10 @@ static void recv_generator(char *fname, struct file_list *flist,
return;
}
if (dry_run && missing_below >= 0 && file->dir.depth <= missing_below) {
dry_run--;
missing_below = -1;
}
if (dry_run > 1) {
statret = -1;
stat_errno = ENOENT;
......@@ -303,6 +308,10 @@ static void recv_generator(char *fname, struct file_list *flist,
delete_file(fname, DEL_TERSE);
statret = -1;
}
if (dry_run && statret != 0 && missing_below < 0) {
missing_below = file->dir.depth;
dry_run++;
}
if (statret != 0 && do_mkdir(fname,file->mode) != 0 && errno != EEXIST) {
if (!relative_paths || errno != ENOENT
|| create_directory_path(fname, orig_umask) < 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment