Dear All, I found a workaround for the corrupted backup app package files though there is probably a more intelligent way.
When the destination is empty or missing (rather than an update) rsync.c calls make_backup and returns 1 when it encounters if (x_lstat(fname, &sx.st, NULL) < 0) return 1; the calling code in rsync.c: if ( make_backups > 0 && overwriting_basis) { int ok = make_backup(fname, False); if (!ok) return 1; if (ok == 1 && fnamecmp == fname) fnamecmp = get_backup_name(fname); } in 3.0.9 get_backup_name just returns the backup_Dir path but in 3.1.1 it proceeds to copy_valid_path which then creates the folder structure for the DIR, which in this case is an APP package or rtfd file which should not be copied at all. I don’t think any dirs should be created if there are no backups to be made so probably the older simple get_backup_name is what is needed here. I don’t know if it is possible to differentiate app packages from regular directories and it doesn’t matter if the app file is really being copied to the backup_Dir. But the backup Dirs are being created in this case though there are no backups to be made. As a workaround I moved if (x_lstat(fname, &sx.st, NULL) < 0) return 1; to the begiining in make_backup and added it also to copy_valid_path so it would return the call from rsync instead of making screwy directories. This is my diff, assuming one runs fileflags, crtimes, and hfs_compression diffs first for OSX and rsync 3.1.1. Rob diff --git a/backup.c b/backup.c --- a/backup.c +++ b/--- a/backup.c @@ -65,6 +65,9 @@ BOOL ret = True; stat_x sx; char *b, *rel = backup_dir_buf + backup_dir_len, *name = rel; + + if (x_lstat(fname, &sx.st, NULL) < 0) + return 1; for (f = fname, b = rel; *f && *f == *b; f++, b++) { if (*b == '/') @@ -215,17 +218,18 @@ stat_x sx; struct file_struct *file; int save_preserve_xattrs; - char *buf = get_backup_name(fname); - int ret = 0; - - if (!buf) - return 0; - - init_stat_x(&sx); + int ret = 0; + + init_stat_x(&sx); /* Return success if no file to keep. */ if (x_lstat(fname, &sx.st, NULL) < 0) return 1; - + + char *buf = get_backup_name(fname); + + if (!buf) + return 0; + /* Try a hard-link or a rename first. Using rename is not atomic, but * is more efficient than forcing a copy for larger files when no hard- * linking is possible. */ On Jan 16, 2015, at 9:41 AM, Robert DuToit <rdut...@comcast.net> wrote: > Dear All, > > I have been seeing some strange behavior using rsync 3.1.1 on OSX with the 3 > standard patches applied when using the --backup and --backup-Dir options. > > This works as expected on 3.0.9, moving any files on dest that are not on > source to the backup folder. If no changes then the backup folder is not even > created. > > -aHAXN --fileflags --force-change --protect-decmpfs —delete --backup > --backup-dir=BL_Archive --stats —progress -vvv > > on 3.1.1 , where dest and source are already in sync, any apps and rtfd > files (both are “packages” of other files) on the dest are replicated in the > backup folder. They aren’t removed from the dest. They have a cross through > them (corrupted) and I noticed that not all the files within these corrupted > apps are present, mostly nib files, frameworks etc.. > > Anyone else experience this? > > I ran with verbose but the only references to the backup folder are setting > uids on that backup folder. It is created early on in the output. > > Created backup_dir BL_Archive/ > set uid of BL_Archive/testfolder from 0 to 501 > set uid of BL_Archive/testfolder/AppKiDo.app from 0 to 501 > set uid of BL_Archive/testfolder/AppKiDo.app/Contents from 0 to 501 > set uid of BL_Archive/testfolder/AppKiDo.app/Contents/MacOS from 0 to 501 > > Thanks, Rob > >
smime.p7s
Description: S/MIME cryptographic signature
-- Please use reply-all for most replies to avoid omitting the mailing list. To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/rsync Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html