extern int verbose;
extern int dry_run;
extern int preserve_times;
+extern int omit_dir_times;
extern int am_root;
+extern int am_server;
extern int am_sender;
extern int am_generator;
extern int preserve_uid;
return -1;
}
- zap_dir = flags & DEL_RECURSE || (force_delete && recurse);
+ zap_dir = (flags & DEL_FORCE_RECURSE || (force_delete && recurse))
+ && !(flags & DEL_NO_RECURSE);
if (dry_run && zap_dir)
errno = ENOTEMPTY;
else if (do_rmdir(fname) == 0) {
}
if (!preserve_times || S_ISLNK(st->st_mode)
- || (make_backups && !backup_dir && S_ISDIR(st->st_mode)))
+ || (S_ISDIR(st->st_mode)
+ && (omit_dir_times || (make_backups && !backup_dir))))
flags |= PERMS_SKIP_MTIME;
if (!(flags & PERMS_SKIP_MTIME)
&& cmp_modtime(st->st_mtime, file->modtime) != 0) {
- /* don't complain about not setting times on directories
- * because some filesystems can't do it */
- if (set_modtime(fname,file->modtime) != 0 &&
- !S_ISDIR(st->st_mode)) {
+ if (set_modtime(fname,file->modtime) != 0) {
rsyserr(FERROR, errno, "failed to set times on %s",
full_fname(fname));
return 0;
updated = 1;
}
-#ifdef HAVE_CHMOD
+#if HAVE_CHMOD
if (!S_ISLNK(st->st_mode)) {
if ((st->st_mode & CHMOD_BITS) != (file->mode & CHMOD_BITS)) {
updated = 1;
const char *who_am_i(void)
{
+ if (am_sender < 0)
+ return am_server ? "server" : "client";
return am_sender ? "sender" : am_generator ? "generator" : "receiver";
}