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
Mention a few more things.
[rsync/rsync.git]
/
rsync.c
diff --git
a/rsync.c
b/rsync.c
index
6b5b500
..
acb260c
100644
(file)
--- a/
rsync.c
+++ b/
rsync.c
@@
-25,6
+25,7
@@
extern int verbose;
extern int dry_run;
extern int preserve_times;
extern int verbose;
extern int dry_run;
extern int preserve_times;
+extern int omit_dir_times;
extern int am_root;
extern int am_sender;
extern int am_generator;
extern int am_root;
extern int am_sender;
extern int am_generator;
@@
-58,6
+59,7
@@
int delete_file(char *fname, int flags)
struct dirent *di;
char buf[MAXPATHLEN];
STRUCT_STAT st;
struct dirent *di;
char buf[MAXPATHLEN];
STRUCT_STAT st;
+ int zap_dir;
if (!(flags & DEL_DIR)) {
if (robust_unlink(fname) == 0) {
if (!(flags & DEL_DIR)) {
if (robust_unlink(fname) == 0) {
@@
-74,7
+76,11
@@
int delete_file(char *fname, int flags)
return -1;
}
return -1;
}
- if (do_rmdir(fname) == 0) {
+ 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 (verbose && !(flags & DEL_TERSE)) {
rprintf(FINFO, "deleting %s/\n",
safe_fname(fname));
if (verbose && !(flags & DEL_TERSE)) {
rprintf(FINFO, "deleting %s/\n",
safe_fname(fname));
@@
-83,8
+89,7
@@
int delete_file(char *fname, int flags)
}
if (errno == ENOENT)
return 0;
}
if (errno == ENOENT)
return 0;
- if ((flags & DEL_NO_RECURSE) || !force_delete || !recurse
- || (errno != ENOTEMPTY && errno != EEXIST)) {
+ if (!zap_dir || (errno != ENOTEMPTY && errno != EEXIST)) {
rsyserr(FERROR, errno, "delete_file: rmdir %s failed",
full_fname(fname));
return -1;
rsyserr(FERROR, errno, "delete_file: rmdir %s failed",
full_fname(fname));
return -1;
@@
-150,10
+155,9
@@
int set_perms(char *fname,struct file_struct *file,STRUCT_STAT *st,
STRUCT_STAT st2;
int change_uid, change_gid;
STRUCT_STAT st2;
int change_uid, change_gid;
- if (dry_run)
- return 0;
-
if (!st) {
if (!st) {
+ if (dry_run)
+ return 1;
if (link_stat(fname, &st2, 0) < 0) {
rsyserr(FERROR, errno, "stat %s failed",
full_fname(fname));
if (link_stat(fname, &st2, 0) < 0) {
rsyserr(FERROR, errno, "stat %s failed",
full_fname(fname));
@@
-163,14
+167,12
@@
int set_perms(char *fname,struct file_struct *file,STRUCT_STAT *st,
}
if (!preserve_times || S_ISLNK(st->st_mode)
}
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) {
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;
rsyserr(FERROR, errno, "failed to set times on %s",
full_fname(fname));
return 0;
@@
-219,7
+221,7
@@
int set_perms(char *fname,struct file_struct *file,STRUCT_STAT *st,
updated = 1;
}
updated = 1;
}
-#if
def
HAVE_CHMOD
+#if HAVE_CHMOD
if (!S_ISLNK(st->st_mode)) {
if ((st->st_mode & CHMOD_BITS) != (file->mode & CHMOD_BITS)) {
updated = 1;
if (!S_ISLNK(st->st_mode)) {
if ((st->st_mode & CHMOD_BITS) != (file->mode & CHMOD_BITS)) {
updated = 1;