extern int link_dest;
extern int whole_file;
extern int list_only;
+extern int new_root_dir;
extern int read_batch;
extern int safe_symlinks;
extern long block_size; /* "long" because popt can't set an int32. */
char *cmpbuf, STRUCT_STAT *stp, int itemizing,
int maybe_ATTRS_REPORT, enum logcode code)
{
- int save_ignore_times = ignore_times;
int best_match = -1;
int match_level = 0;
int j = 0;
- /* We can't let ignore_times affect the unchanged_file() test in
- * an alternate-dest dir or we will never find any matches. */
- ignore_times = 0;
-
do {
pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname);
if (link_stat(cmpbuf, stp, 0) < 0 || !S_ISREG(stp->st_mode))
break;
} while (basis_dir[++j] != NULL);
- ignore_times = save_ignore_times;
-
if (!match_level)
return -1;
itemizing && verbose > 1,
code) < 0)
goto try_a_copy;
- if (preserve_hard_links && file->link_u.links)
+ if (preserve_hard_links && file->link_u.links) {
+ if (dry_run)
+ file->link_u.links->link_dest_used = j + 1;
hard_link_cluster(file, ndx, itemizing, code);
+ }
} else
#endif
if (itemizing)
char *dn = file->dirname ? file->dirname : ".";
if (parent_dirname != dn && strcmp(parent_dirname, dn) != 0) {
if (relative_paths && !implied_dirs
- && safe_stat(dn, &st) < 0
+ && do_stat(dn, &st) < 0
&& create_directory_path(fname) < 0) {
rsyserr(FERROR, errno,
"recv_generator: mkdir %s failed",
dry_run++;
}
if (itemizing && f_out != -1) {
- itemize(file, ndx, statret, &st,
- statret ? ITEM_LOCAL_CHANGE : 0, 0, NULL);
+ int sr = statret;
+ if (new_root_dir) {
+ if (*fname == '.' && fname[1] == '\0')
+ sr = -1;
+ new_root_dir = 0;
+ }
+ itemize(file, ndx, sr, &st,
+ sr ? ITEM_LOCAL_CHANGE : 0, 0, NULL);
}
if (statret != 0 && do_mkdir(fname,file->mode) < 0 && errno != EEXIST) {
if (!relative_paths || errno != ENOENT
goto return_with_success;
return;
}
- if (j != -1) {
+ if (j >= 0) {
fnamecmp = fnamecmpbuf;
fnamecmp_type = j;
statret = 0;