Roland Koebler
2009-Oct-03  10:59 UTC
--keep-dirlinks --delete erroneously deletes symlinks to directories
Hi,
the combination of --keep-dirlinks and --delete (--delete-during,
--delete-delay) erroneously deletes symlinks to directories on
the receiver.
With --delete-before and --delete-after it works as expected.
(rsync  version 3.0.3  protocol version, on Debian Lenny)
I don't think that this behaviour is intended.
Details/example:
- Host 1 directory-structure:
    drwx------ ./1
    -rwx------ ./1/file
    drwx------ ./1/dir
    -rwx------ ./1/dir/subfile
- Host 2 directory-structure:
    drwx------ ./2
    -rwx------ ./2/file
    lrwxrwxrwx ./2/dir -> ../foo
    drwx------ ./foo
    -rwx------ ./foo/subfile
- the data on both hosts is the same, so rsync shouldn't do anything
- mirroring Host 1 -> Host 2 correctly does nothing:
    $ rsync -av --keep-dirlinks 1/ 2/
    sending incremental file list
    sent 94 bytes  received 13 bytes  214.00 bytes/sec
    total size is 0  speedup is 0.00
- mirroring Host 2 -> Host 1 correctly does nothing:
    $ rsync -av --copy-dirlinks 2/ 1/
    sending incremental file list
    sent 94 bytes  received 13 bytes  214.00 bytes/sec
    total size is 0  speedup is 0.00
- --delete-after works correctly, and does nothing:
    $ rsync -av --keep-dirlinks --delete-after 1/ 2/
    building file list ... done
    sent 89 bytes  received 12 bytes  202.00 bytes/sec
    total size is 0  speedup is 0.00
- --delete-before works correctly, and does nothing:
    $ rsync -av --keep-dirlinks --delete-before 1/ 2/
    building file list ... done
    sent 89 bytes  received 12 bytes  202.00 bytes/sec
    total size is 0  speedup is 0.00
- but --delete (or --delete-during / --delete-delay) erroneously deltes the
  "dir -> ../foo"-symlink (and copies the data afterwards):
    $ rsync -av --keep-dirlinks --delete 1/ 2/
    sending incremental file list
    deleting dir
    dir/
    dir/subfile
    sent 136 bytes  received 35 bytes  342.00 bytes/sec
    total size is 0  speedup is 0.00
Is this a bug, or did I miss something?
thanks,
Roland
Matt McCutchen
2009-Oct-05  06:27 UTC
--keep-dirlinks --delete erroneously deletes symlinks to directories
On Sat, 2009-10-03 at 12:59 +0200, Roland Koebler wrote:> the combination of --keep-dirlinks and --delete (--delete-during, > --delete-delay) erroneously deletes symlinks to directories on > the receiver. > With --delete-before and --delete-after it works as expected. > > (rsync version 3.0.3 protocol version, on Debian Lenny) > > I don't think that this behaviour is intended. > > > Details/example: > > - Host 1 directory-structure: > drwx------ ./1 > -rwx------ ./1/file > drwx------ ./1/dir > -rwx------ ./1/dir/subfile > > - Host 2 directory-structure: > drwx------ ./2 > -rwx------ ./2/file > lrwxrwxrwx ./2/dir -> ../foo > drwx------ ./foo > -rwx------ ./foo/subfile > > - the data on both hosts is the same, so rsync shouldn't do anything > - mirroring Host 1 -> Host 2 correctly does nothing: > $ rsync -av --keep-dirlinks 1/ 2/ > sending incremental file list > > sent 94 bytes received 13 bytes 214.00 bytes/sec > total size is 0 speedup is 0.00 > > - mirroring Host 2 -> Host 1 correctly does nothing: > $ rsync -av --copy-dirlinks 2/ 1/ > sending incremental file list > > sent 94 bytes received 13 bytes 214.00 bytes/sec > total size is 0 speedup is 0.00 > > - --delete-after works correctly, and does nothing: > $ rsync -av --keep-dirlinks --delete-after 1/ 2/ > building file list ... done > > sent 89 bytes received 12 bytes 202.00 bytes/sec > total size is 0 speedup is 0.00 > > - --delete-before works correctly, and does nothing: > $ rsync -av --keep-dirlinks --delete-before 1/ 2/ > building file list ... done > > sent 89 bytes received 12 bytes 202.00 bytes/sec > total size is 0 speedup is 0.00 > > - but --delete (or --delete-during / --delete-delay) erroneously deltes the > "dir -> ../foo"-symlink (and copies the data afterwards): > $ rsync -av --keep-dirlinks --delete 1/ 2/ > sending incremental file list > deleting dir > dir/ > dir/subfile > > sent 136 bytes received 35 bytes 342.00 bytes/sec > total size is 0 speedup is 0.00 > > Is this a bug, or did I miss something?It looks like a bug. I can reproduce it with rsync 3.0.3 but not with 3.0.6. Please upgrade. -- Matt