Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
John E. Malmberg convinced me to standardize on #ifs for defined
[rsync/rsync.git]
/
generator.c
diff --git
a/generator.c
b/generator.c
index
bbe70fb
..
31ea939
100644
(file)
--- a/
generator.c
+++ b/
generator.c
@@
-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)
{
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;
int fd = -1, f_copy = -1;
STRUCT_STAT st, partial_st;
struct file_struct *back_file = NULL;
@@
-251,8
+252,10
@@
static void recv_generator(char *fname, struct file_list *flist,
if (list_only)
return;
if (list_only)
return;
- if (verbose > 2)
- rprintf(FINFO, "recv_generator(%s,%d)\n", safe_fname(fname), ndx);
+ if (verbose > 2) {
+ rprintf(FINFO, "recv_generator(%s,%d)\n",
+ safe_fname(fname), ndx);
+ }
if (server_filter_list.head
&& check_filter(&server_filter_list, fname,
if (server_filter_list.head
&& check_filter(&server_filter_list, fname,
@@
-264,6
+267,10
@@
static void recv_generator(char *fname, struct file_list *flist,
return;
}
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;
if (dry_run > 1) {
statret = -1;
stat_errno = ENOENT;
@@
-301,6
+308,10
@@
static void recv_generator(char *fname, struct file_list *flist,
delete_file(fname, DEL_TERSE);
statret = -1;
}
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
if (statret != 0 && do_mkdir(fname,file->mode) != 0 && errno != EEXIST) {
if (!relative_paths || errno != ENOENT
|| create_directory_path(fname, orig_umask) < 0
@@
-318,17
+329,21
@@
static void recv_generator(char *fname, struct file_list *flist,
delete_in_dir(flist, fname, file);
return;
} else if (max_size && file->length > max_size) {
delete_in_dir(flist, fname, file);
return;
} else if (max_size && file->length > max_size) {
- if (verbose > 1)
- rprintf(FINFO, "%s is over max-size\n", fname);
+ if (verbose > 1) {
+ rprintf(FINFO, "%s is over max-size\n",
+ safe_fname(fname));
+ }
return;
}
if (preserve_links && S_ISLNK(file->mode)) {
return;
}
if (preserve_links && S_ISLNK(file->mode)) {
-#if SUPPORT_LINKS
+#if
def
SUPPORT_LINKS
if (safe_symlinks && unsafe_symlink(file->u.link, fname)) {
if (verbose) {
if (safe_symlinks && unsafe_symlink(file->u.link, fname)) {
if (verbose) {
- rprintf(FINFO, "ignoring unsafe symlink %s -> \"%s\"\n",
- full_fname(fname), file->u.link);
+ rprintf(FINFO,
+ "ignoring unsafe symlink %s -> \"%s\"\n",
+ full_fname(fname),
+ safe_fname(file->u.link));
}
return;
}
}
return;
}
@@
-440,13
+455,13
@@
static void recv_generator(char *fname, struct file_list *flist,
pathjoin(fnamecmpbuf, sizeof fnamecmpbuf,
basis_dir[i], fname);
}
pathjoin(fnamecmpbuf, sizeof fnamecmpbuf,
basis_dir[i], fname);
}
-#if HAVE_LINK
+#if
def
HAVE_LINK
if (link_dest && match_level == 3 && !dry_run) {
if (do_link(fnamecmpbuf, fname) < 0) {
if (verbose) {
rsyserr(FINFO, errno,
"link %s => %s",
if (link_dest && match_level == 3 && !dry_run) {
if (do_link(fnamecmpbuf, fname) < 0) {
if (verbose) {
rsyserr(FINFO, errno,
"link %s => %s",
- f
namecmpbuf
,
+ f
ull_fname(fnamecmpbuf)
,
safe_fname(fname));
}
fnamecmp = fnamecmpbuf;
safe_fname(fname));
}
fnamecmp = fnamecmpbuf;
@@
-519,12
+534,12
@@
prepare_to_open:
statret = 0;
}
statret = 0;
}
- if (dry_run || whole_file > 0) {
+ if (dry_run || read_batch)
+ goto notify_others;
+ if (whole_file > 0) {
statret = -1;
goto notify_others;
}
statret = -1;
goto notify_others;
}
- if (read_batch)
- goto notify_others;
/* open the file */
fd = do_open(fnamecmp, O_RDONLY, 0);
/* open the file */
fd = do_open(fnamecmp, O_RDONLY, 0);
@@
-593,7
+608,7
@@
notify_others:
set_perms(backupptr, back_file, NULL, 0);
if (verbose > 1) {
rprintf(FINFO, "backed up %s to %s\n",
set_perms(backupptr, back_file, NULL, 0);
if (verbose > 1) {
rprintf(FINFO, "backed up %s to %s\n",
-
fname, backupptr
);
+
safe_fname(fname), safe_fname(backupptr)
);
}
free(back_file);
}
}
free(back_file);
}