[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Compare revisions can use the wrong peg revision

From: Dave Lawrence <dlawrence_at_ad-holdings.co.uk>
Date: Tue, 26 Aug 2008 07:46:17 +0100

Stefan Küng wrote:
> Dave Lawrence wrote:
>> Dave Lawrence wrote:
>>> I've attached a script (as a .txt) to create a simple repos with 4 revs
>>> to demonstrate this problem. It creates test.txt, modifies it in revs 2
>>> and 3, and renames it to test_newname.txt in rev 4.
>>>
>>> To put things in context, it then does a command line svn diff on rev 1
>>> and 2 using peg revisions in different ways.
>>>
>>> After running the script, do a show log on test_wc, and click compare
>>> revisions on rev 1 and 2. It shows test.txt modified. So far so good.
>>> Now double lick on test.txt, and the error occurs:
>>> "File not found: revision 4, path '/test.txt'
>>>
>>> It (I presume) is trying to diff revs 1 and 2 of test.txt_at_4, but
>>> test.txt no longer exists at rev 4. I think that it should either use
>>> test.txt_at_2 or text_newname.txt_at_4 (not sure if there is a preference here).
>>>
>>> It could be worse, because if a trunk has been replaced by a branch,
>>> this behavior could actually bring up a diff on completely the wrong file.
>> I retract that statement. For some reason, if a file of the same name
>> existed in the previous trunk, and you invoke the diff from show log of
>> the current trunk, then the diff correctly shows the differences between
>> the two revs of the correct file (even though it lived in the branch
>> back in the revs that are being diffed). But for files that live in the
>> current trunk, came from the old branch and didn't have an equivalent in
>> the old trunk, the failure is the same. If that description is unclear
>> (I suspect it is) then I can do another script to demonstrate.
>
> Yes, please do. It's very difficult from such descriptions to find the
> exact steps to reproduce something.
>
> Stefan
>
I think I probably confused things with that second posting. Anyway,
attached is a script which demonstrates what happens where a directory
has been replaced - I think this demo may be more helpful.

Do a show log on "bar" after running the script a compare revisions 2
and 3. This shows file1.txt and file2.txt modified. Clicking file2.txt
will give an error. Clicking file1.txt will do the equivlalent of
svn diff %REPO%/bar/file1.txt_at_2 %REPO%/foo/file1.txt_at_3

Whereas I think it should do
svn diff %REPO%/foo/file1.txt_at_2 %REPO%/foo/file1.txt_at_3

Which is equivalent to
svn diff bar/file1.txt -r2:3
which is the operation I think the user would expect from the GUI in
this case.

REM My CWD is C:\SVN\tests
set REPO=file:///c:/SVN/tests/test_repo

svnadmin create test_repo
svn co %REPO% test_wc
cd test_wc
mkdir foo
mkdir bar
svn add foo bar
svn ci . -m"Add dirs"
echo Text in foo/file1 > foo\file1.txt
echo Text in foo/file2 > foo\file2.txt
echo Text in bar/file1 > bar\file1.txt
svn add foo/*
svn add bar/*
svn ci . -m"Add files"
echo More text >> foo\file1.txt
echo More text >> foo\file2.txt
svn ci . -m"Modify files in foo"
echo More text >> bar\file1.txt
svn ci . -m"Modify files in bar"
svn rm %REPO%/bar -m"Delete bar"
svn mv %REPO%/foo %REPO%/bar -m"Move foo to bar"
svn up

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe_at_tortoisesvn.tigris.org
For additional commands, e-mail: users-help_at_tortoisesvn.tigris.org
Received on 2008-08-26 08:46:41 CEST

This is an archived mail posted to the TortoiseSVN Users mailing list.