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
Set need_name_pipe if --fuzzy was specified.
[rsync/rsync.git]
/
generator.c
diff --git
a/generator.c
b/generator.c
index
e58f7b0
..
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
@@
-314,23
+325,25
@@
static void recv_generator(char *fname, struct file_list *flist,
&& verbose && f_out != -1)
rprintf(FINFO, "%s/\n", safe_fname(fname));
if (delete_during && f_out != -1 && csum_length != SUM_LENGTH
&& verbose && f_out != -1)
rprintf(FINFO, "%s/\n", safe_fname(fname));
if (delete_during && f_out != -1 && csum_length != SUM_LENGTH
- && (file->flags & FLAG_DEL_START)) {
- delete_in_dir(flist, fname, strlen(fname),
- file->dir.depth);
- }
+ && (file->flags & FLAG_DEL_HERE))
+ delete_in_dir(flist, fname, file);
return;
} else if (max_size && file->length > max_size) {
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;
}
@@
-442,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;
@@
-521,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);
@@
-595,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);
}
@@
-654,7
+667,7
@@
void generate_files(int f_out, struct file_list *flist, char *local_name,
flist, file, i, f_out, f_out_name);
}
if (delete_during)
flist, file, i, f_out, f_out_name);
}
if (delete_during)
- delete_in_dir(NULL, NULL,
0, 0
);
+ delete_in_dir(NULL, NULL,
NULL
);
phase++;
csum_length = SUM_LENGTH;
phase++;
csum_length = SUM_LENGTH;