extern int blocking_io;
extern int cvs_exclude;
extern int delete_mode;
-extern int delete_excluded;
+extern int delete_before;
extern int delete_after;
+extern int delete_excluded;
extern int daemon_over_rsh;
extern int do_stats;
extern int dry_run;
argv[i] += l+1;
}
- if (argc == 0 && recurse) {
+ if (argc == 0 && (recurse || list_only)) {
argc = 1;
argv--;
argv[0] = ".";
if (preserve_hard_links)
init_hard_links(flist);
- if (!delete_after) {
+ if (delete_before) {
/* I moved this here from recv_files() to prevent a race condition */
- if (recurse && delete_mode && !local_name && flist->count > 0)
+ if (recurse && !local_name && flist->count > 0)
delete_files(flist);
}
io_start_buffering_in();
if (delete_mode && !delete_excluded)
- recv_exclude_list(f_in);
+ recv_filter_list(f_in);
+ if (cvs_exclude)
+ add_cvs_excludes();
if (filesfrom_fd >= 0) {
/* We need to send the files-from names to the sender at the
if (am_sender) {
keep_dirlinks = 0; /* Must be disabled on the sender. */
- recv_exclude_list(f_in);
+ recv_filter_list(f_in);
if (cvs_exclude)
add_cvs_excludes();
do_server_sender(f_in, f_out, argc, argv);
char *local_name = NULL;
cleanup_child_pid = pid;
- if (read_batch) {
- assert(am_sender == 0);
- } else {
+ if (!read_batch) {
set_nonblocking(f_in);
set_nonblocking(f_out);
}
if (cvs_exclude)
add_cvs_excludes();
if (delete_mode && !delete_excluded)
- send_exclude_list(f_out);
+ send_filter_list(f_out);
if (remote_filesfrom_file)
filesfrom_fd = f_in;
}
if (argc == 0)
- list_only = 1;
+ list_only |= 1;
if (!read_batch)
- send_exclude_list(f_out);
+ send_filter_list(f_out);
+ if (cvs_exclude)
+ add_cvs_excludes();
if (filesfrom_fd >= 0) {
io_set_filesfrom_fds(filesfrom_fd, f_out);
}
/* ... or no dest at all */
- if (!am_sender && argc == 0) {
- list_only = 1;
- }
+ if (!am_sender && argc == 0)
+ list_only |= 1;
pid = do_cmd(shell_cmd,shell_machine,shell_user,shell_path,
&f_in,&f_out);