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: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]
         QAContact: [EMAIL PROTECTED]
                CC: [EMAIL PROTECTED]


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 [EMAIL PROTECTED]

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 [EMAIL PROTECTED]
        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 [EMAIL PROTECTED]
                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.
-- 
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