[Bug 2395] New: problems copying from a dir that includes a symlink
in the path
samba-bugs at samba.org
samba-bugs at samba.org
Sun Feb 27 22:25:10 GMT 2005
https://bugzilla.samba.org/show_bug.cgi?id=2395
Summary: problems copying from a dir that includes a symlink in
the path
Product: rsync
Version: 2.6.4
Platform: All
OS/Version: All
Status: NEW
Severity: major
Priority: P3
Component: core
AssignedTo: wayned at samba.org
ReportedBy: Dave at Yost.com
QAContact: rsync-qa at samba.org
CC: Dave at Yost.com
I've put together a nightly backup script using rsync, which you can have if you
want. It basically rsyncs a dir to a dir on the remote machine, where the
remote dir's name is an ISO 8601 timestamp.
Today I tried to enhance this system to get a file from the repository, and
since I use symlinks in the pathnames in the repository, I hit what I consider
to be bugs in rsync. The attached script demonstrates what I mean.
Basically, if you try to
rsync a/b .
were a is a symlink, it doesn't work as expected given various combinations of
-R, -l, and -L options.
#!/bin/zsh
# rsync problems with copying from a dir that includes a symlink in the path
# 2005-02-27 Dave at Yost.com
setupSource() {
rm -rf source/dir source/symlink
mkdir -p source/dir
ln -s dir source/s
ln -s referent source/dir/s
echo nothing > source/dir/file
}
setupCorrectOutput() {
rm -rf correct-output
mkdir correct-output
cd correct-output
for x in ${opts[@]}
do
mkdir dest${x}
case $x in
*R*) mkdir -p dest${x}/s
case $x in
*L*) cp -p ../source/dir/file dest${x}/s/file
cp -p ../source/dir/file dest${x}/s/symlink
;;
*l*) cp -p ../source/dir/file dest${x}/s/file
ln -s referent dest${x}/s/symlink
;;
*) cp -p ../source/dir/file dest${x}/s/file
;;
esac
;;
*) case $x in
*L*) cp -p ../source/dir/file dest${x}/file
cp -p ../source/dir/file dest${x}/symlink
;;
*l*) cp -p ../source/dir/file dest${x}/file
ln -s referent dest${x}/symlink
;;
*) cp -p ../source/dir/file dest${x}/file
;;
esac
;;
esac
done
cd ..
}
test() {
opts=$1
file=$2
dest=output/dest${opts}
rm -rf $dest
mkdir -p $dest
cd source
echo '###' rsync $opts s/$file ../$dest
rsync $opts s/$file ../$dest
cd ..
ls -ld $(find $dest) \
| sed 's,..........................................., ,'
}
opts=(
-r
-rl
-rLL # hack for for case-insensitive file systems
-rR
-rRl
-rRLL
)
testGroup() {
for x in ${opts[@]}
test $x $1
}
setupSource
setupCorrectOutput
rm -rf output
mkdir output
testGroup file
testGroup symlink
dodiff() {
find correct-output -type $1 | sed 's,correct-output/,,' | sed "s,$, $1," >> $c
find output -type $1 | sed 's,output/,,' | sed "s,$, $1," >> $a
}
c=/tmp/dyRsyncBug$$-$1-correct
a=/tmp/dyRsyncBug$$-$1
dodiff f
dodiff l
sort $c > $c-sorted
sort $a > $a-sorted
echo '###' This diff should produce only lines starting with '='
echo '###' diff $1 correct vs actual
/usr/bin/diff --old-line-format='< %l
' --unchanged-line-format='= %l
' --new-line-format='> %l
' $c-sorted $a-sorted
--
Configure bugmail: https://bugzilla.samba.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug, or are watching the QA contact.
More information about the rsync
mailing list