A cuple more fixes for --xattrs combined with --backup, this time to
authorWayne Davison <wayned@samba.org>
Thu, 22 May 2008 14:32:11 +0000 (07:32 -0700)
committerWayne Davison <wayned@samba.org>
Thu, 22 May 2008 14:32:11 +0000 (07:32 -0700)
handle when --link-dest is also used.

generator.c
rsync.c

index 27e5b97..858305e 100644 (file)
@@ -922,6 +922,7 @@ static int copy_altdest_file(const char *src, const char *dest, struct file_stru
 {
        char buf[MAXPATHLEN];
        const char *copy_to, *partialptr;
+       int save_preserve_xattrs = preserve_xattrs;
        int ok, fd_w;
 
        if (inplace) {
@@ -946,7 +947,9 @@ static int copy_altdest_file(const char *src, const char *dest, struct file_stru
                return -1;
        }
        partialptr = partial_dir ? partial_dir_fname(dest) : NULL;
+       preserve_xattrs = 0; /* xattrs were copied with file */
        ok = finish_transfer(dest, copy_to, src, partialptr, file, 1, 0);
+       preserve_xattrs = save_preserve_xattrs;
        cleanup_disable();
        return ok ? 0 : -1;
 }
@@ -1948,10 +1951,11 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                if (f_copy >= 0)
                        close(f_copy);
 #ifdef SUPPORT_XATTRS
-               if (preserve_xattrs)
+               if (preserve_xattrs) {
                        copy_xattrs(fname, backupptr);
+                       preserve_xattrs = 0;
+               }
 #endif
-               preserve_xattrs = 0;
                set_file_attrs(backupptr, back_file, NULL, NULL, 0);
                preserve_xattrs = save_preserve_xattrs;
                if (verbose > 1) {
diff --git a/rsync.c b/rsync.c
index 9921da0..85244c8 100644 (file)
--- a/rsync.c
+++ b/rsync.c
@@ -564,7 +564,8 @@ int finish_transfer(const char *fname, const char *fnametmp,
        if (make_backups > 0 && overwriting_basis) {
                if (!make_backup(fname))
                        return 1;
-               fnamecmp = get_backup_name(fname);
+               if (fnamecmp == fname)
+                       fnamecmp = get_backup_name(fname);
        }
 
        /* Change permissions before putting the file into place. */