I have users running rsync 3.0.6 on Mac OS 10.5 and 10.6 with the following 
arguments (for example):

rsync -aNHAXx --fileflags --force-change --no-inc-recursive --delete-during 
--filter="P _Archive*" --filter="P /*" --backup 
--backup-dir="_Archive_2010_March_07_22-27-43" / /Volumes/Backup

I can't seem to figure out how make_bak_dir could be returning this error for a 
handful of them:

rsync: make_bak_dir mkdir 
"/Volumes/Backup/_Archive_2010_March_07_22-27-43/Users/jsmith/Library/Mail/Mailboxes/
   Orchestra" failed: File exists
rsync: keep_backup failed: 
"/Volumes/Backup/Users/jsmith/Library/Mail/Mailboxes/   Orchestra/    * New 
Mexico Concert/Assistant - John Smith.mbox/Messages/269981.emlx" -> 
"_Archive_2010_March_07_22-27-43/Users/jsmith/Library/Mail/Mailboxes/   
Orchestra/    * New Mexico Concert/Assistant - John 
Smith.mbox/Messages/269981.emlx": No such file or directory
rsync: stat 
"/Volumes/Backup/_Archive_2010_March_07_22-27-43/Users/jsmith/Library/Mail/Mailboxes/
   Orchestra/    * New Mexico Concert/Assistant - John 
Smith.mbox/Messages/269981.emlx" failed: No such file or directory

Here's another example from a different user:

rsync: make_bak_dir mkdir "/Volumes/LaCie 
1TB/_Archive_2010_March_04_18-30-22/Users/jdoe/Library/Caches" failed: File 
exists
rsync: keep_backup failed: "/Volumes/LaCie 
1TB/Users/jdoe/Library/Caches/Adobe/Color/ACEConfigCache1" -> 
"_Archive_2010_March_04_18-30-22/Users/jdoe/Library/Caches/Adobe/Color/ACEConfigCache1":
 No such file or directory
rsync: stat "/Volumes/LaCie 
1TB/_Archive_2010_March_04_18-30-22/Users/jdoe/Library/Caches/Adobe/Color/ACEConfigCache1"
 failed: No such file or directory


Because everywhere that make_bak_dir is called, there's a test that the 
previous open() that was called failed with ENOENT.  For example, from 
receiver.c:

if ((f_copy = do_open(backupptr, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0600)) 
< 0) {
        int save_errno = errno ? errno : EINVAL; /* 0 paranoia */
        if (errno == ENOENT && make_bak_dir(backupptr) == 0) {

Does make_bak_dir simply need to trap for that error, like:

/* Try to find an existing dir, starting from the deepest dir. */
while (1) {
        if (--p == fbuf)
                return -1;
        if (*p == '/') {
                *p = '\0';
                if (mkdir_defmode(fbuf) == 0 || errno == EEXIST) // <-- Trap 
for EEXIST?
                        break;
                if (errno != ENOENT) {
                        rsyserr(FERROR, errno,
                                "make_bak_dir mkdir %s failed",
                                full_fname(fbuf));
                        return -1;
                }
        }
}

Thanks,
Mike

-- 
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

Reply via email to