[prev in list] [next in list] [prev in thread] [next in thread] 

List:       subversion-issues
Subject:    =?UTF-8?B?W0lzc3VlIDE5NzBdICBIaXN0b3J5LWZvbGxvd2luZyBhbGdvcml0aA==?=
From:       kfogel () tigris ! org
Date:       2005-02-28 23:39:41
Message-ID: 20050228233941.16755.qmail () tigris ! org
[Download RAW message or body]

http://subversion.tigris.org/issues/show_bug.cgi?id=1970






------- Additional comments from kfogel@tigris.org Mon Feb 28 15:39:41 -0800 2005 -------
A simpler recipe, resulting from conversations Mike and I have been having about
this:

#!/bin/sh

# This recipe highlights a bug in the client side use of the location
# searching algorithm.  
#
# The current history-following algorithm determines the paths that a
# line of history would be *expected to be* found in a given revision,
# but doesn't treat copies as gaps in the historical sequence.  If
# some other object fills those gaps at the same expected path, the
# client will find the wrong object.
#
# In the recipe below, we have a thing which gets created in r1.  In
# r2, it is deleted and replaced with an unrelated object at the same
# path.  In r3, the interloper is deleted.  In r4, the original thing
# is resurrected via a copy from r1.
#
# THING
#     ,- - - - - - - - -.
#    o---| o---| o    o----->
#
#    |     |     |    |
#   r1    r2    r3   r4
#
# In a working copy at r4, running
#
#    $ svn cat -r2 thing
#
# should result in an error, but instead cats the r2 interloper!
#
# To reassure yourself that this is wrong, remember that the above
# command is equivalent to
#
#    $ svn cat -r2 thing@4
#
# Now do you see the evil that lies within us?

SVN=${HOME}/src/subversion/subversion/clients/cmdline/svn
SVNADMIN=${HOME}/src/subversion/subversion/svnadmin/svnadmin

# URL=http://localhost/SOMETHING/repos
# URL=svn://localhost/SOMETHING/repos
URL=file://`pwd`/repos

rm -rf repos wc

# Comment this in/out as you please.
# QUIET=-q

# r0
${SVNADMIN} create repos
${SVN} co ${URL} wc ${QUIET}
cd wc

# r1
echo `date` >> thing
${SVN} add thing ${QUIET}
${SVN} ci -m "" ${QUIET}
${SVN} up ${QUIET}

# r2
${SVN} del thing ${QUIET}
echo "YOU SHOULDN'T SEE THIS!" >> thing
${SVN} add thing ${QUIET}
${SVN} ci -m "" ${QUIET}
${SVN} up ${QUIET}

# r3
${SVN} del thing ${QUIET}
${SVN} ci -m "" ${QUIET}
${SVN} up ${QUIET}

# r4
${SVN} copy -r1 ${URL}/thing . ${QUIET}
${SVN} ci -m "" ${QUIET}
${SVN} up ${QUIET}

# Show the badness.
${SVN} cat -r2 thing@4


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@subversion.tigris.org
For additional commands, e-mail: issues-help@subversion.tigris.org

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic