Rsync itemizing "t" (should be "T") when lutimes fails on recreated symlink

Matt McCutchen matt at mattmccutchen.net
Mon Mar 10 04:23:15 GMT 2008


IIUC, the new philosophy of symlink times is that -t preserves them to
the extent that they are settable; when they aren't, it's just as if -t
wasn't given.  But rsync breaks this principle in the following case.

Suppose rsync is configured with HAVE_LUTIMES enabled but the lutimes
call doesn't actually work (I simulated this via the attached patch).
When rsync recreates a destination symlink to update its target path,
rsync will fail to preserve the time, but it nevertheless itemizes "t".
It should itemize "T" because the time is being incidentally changed,
not preserved.

To reproduce:

ln -s ta a
sleep 1
ln -s tb b
rsync-dev -i -lt a b
stat --format='%Y %n' a b

Output:

# Rsync claims to have preserved the time...
cL..t...... a -> ta
# ... but it differs
1205122328 a
1205122329 b

The problem is that, for a recreated symlink (as opposed to a tweaked
one), the generator itemizes ITEM_REPORT_TIME whether it succeeded or
failed in setting the time.  On a push, the sender is doing the logging
and can't check the generator's FLAG_TIME_FAILED, so there is no way for
it to tell these two cases apart; they have to look different in the
itemize flags.

Matt
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fake-lutimes.diff
Type: text/x-patch
Size: 706 bytes
Desc: not available
Url : http://lists.samba.org/archive/rsync/attachments/20080310/c9373066/fake-lutimes.bin


More information about the rsync mailing list