copy: link rather than copy symlinks, when --link used
authorPádraig Brady <P@draigBrady.com>
Thu, 31 Mar 2011 10:28:58 +0000 (11:28 +0100)
committerPádraig Brady <P@draigBrady.com>
Fri, 1 Apr 2011 13:17:27 +0000 (14:17 +0100)
commit594292a1d89332dd006cd7fe3116cf46ebe9acf6
tree75db5403a519f0e3c501129f1302af352e0827e5
parent0ec711b5c4c5094fa206115a666e5878f463a07f
copy: link rather than copy symlinks, when --link used

This bug was introduced in commit ca9e212c, 2009-09-24,
"cp, mv: use linkat to guarantee semantics", which
inadvertently disabled the creation of hardlinks to symlinks.
However rather than implementing the intention of that commit
and relying on gnulib linkat emulation, we'll revert to the
previous emulation as that maintains ownership and timestamps.

* src/copy.c (copy_internal): Use our existing hardlink to
symlink emulation when link() might dereference the symlink.
Also ensure that we copy the timestamps of the original symlink
when we use the emulation.
* tests/cp/link-symlink: Add a test to ensure timestamps copied.
* tests/Makefile.am: Reference the new test.
* NEWS: Mention the fix.
Reported by Ruediger Meier
NEWS
src/copy.c
tests/Makefile.am
tests/cp/link-symlink [new file with mode: 0755]