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

Re: Probable bug with svn copy

From: Hyrum K. Wright <hyrum_wright_at_mail.utexas.edu>
Date: Mon, 25 Jan 2010 07:13:30 -0600

On Jan 25, 2010, at 1:17 AM, Noorul Islam K M wrote:

>
>> On Thu, 2009-12-17, Alan Spencer wrote:
>>> I've been asked to analyse a problem we have had with subversion and
>>> come to the conclusion there is a bug in at least the client.
>>>
>>>
>>> The scenario was someone committed a new directory that made a build
>>> fail and in order to free up the build this commit was reverse merges
>>> (merge -c -RRRR)
>>>
>>> The individual in question wanted their changes back and the opportunity
>>> to fix the problem. This was done by reverse merging the reverse merge.
>>>
>>> They then fixed the problems, which included renaming a file.
>>>
>>> They then committed these changes and updated and all looked OK.
>>>
>>> Updating on other working copy showed that both the original and renamed
>>> file existed, but the working copy used did not show this.
>>>
>>>
>>>
>>> I wanted to find out if this is user error or a bug and if it has been
>>> logged already.
>>
>> This certainly looks like a bug. It sounds familiar, but I can't find it
>> in the issue tracker.
>>
>>> And is there a way to achieve this without hitting this problem.
>>
>> I'm not sure.
>>
>>
>>> Here is a log of my reproducing this:
>> [...]
>>> C:\dev\projects\build\build\svn-experiments\experiment-1>svn commit -m
>>> "Revert revert and renaming svn merge -c -16666 . svn move
>>> systemtest\audit\FirstName.txt systemtest\audit\SecondName.txt" .
>>> Adding experiment-1\systemtest\audit
>>> Adding experiment-1\systemtest\audit\SecondName.txt
>>> Committed revision 16667.
>>
>> With a release candidate for 1.6.8, using the attached script, I get the
>> same result as you.
>>
>> With a trunk build (r898816), using the attached script, I get a
>> different problem here: the commit sort of fails:
>>
>> + svn commit -m 'Revert revert and renaming svn merge -c -16666 . svn
>> move systemtest/audit/FirstName.txt systemtest/audit/SecondName.txt' .
>> Adding experiment-1/systemtest/audit
>> Deleting experiment-1/systemtest/audit/FirstName.txt
>> Adding experiment-1/systemtest/audit/SecondName.txt
>> svn: Commit succeeded, but other errors follow:
>> svn: Error bumping revisions post-commit (details follow):
>> svn: The node 'FirstName.txt' was not found.
>>
>> This is interesting, and it would be good to turn this script into a
>> test in the test suite so that we remember to fix the bug. Any
>> volunteers?
>>
>
> Julian,
>
> Please find attached test case patch for this scenario in trunk.
>
> [[[
> Log:
>
> New XFail test case for reverse merge move scenario. Rename fails after
> reverting a commit using reverse merge. This issue need to be fixed for
> the test case to pass.
>
> * subversion/tests/cmdline/copy_tests.py
> (reverse_merge_move): New function.
> (test_list): Added test.
>
> Found by: alan.spencer
> Suggested by: julianfoad
> Patch by: Noorul Islam K M <noorul_at_collab.net>
> ]]]
>
>
> Thanks and Regards
> Noorul
> Index: copy_tests.py
> ===================================================================
> --- copy_tests.py (revision 902715)
> +++ copy_tests.py (working copy)
> @@ -4266,6 +4266,44 @@
> None, sbox.wc_dir)
>
>
> +def reverse_merge_move(sbox):
> + """reverse merge move"""
> +
> + # Alias for svntest.actions.run_and_verify_svn
> + rav_svn = svntest.actions.run_and_verify_svn
> +
> + wc_dir = sbox.wc_dir
> + a_dir = os.path.join(wc_dir, 'A')
> + a_repo_url = sbox.repo_url+ '/A'
> + sbox.build()
> +
> + # Update working directory and ensure that we are at revision 1.
> + rav_svn(None, ["At revision 1.\n"], [], 'up', wc_dir)
> +
> + # Add new folder and file, later commit
> + new_path = os.path.join(a_dir, 'New')
> + os.mkdir(new_path)
> + first_path = os.path.join(new_path, 'first')
> + svntest.main.file_append(first_path, 'appended first text')
> + svntest.main.run_svn(None, "add", new_path)
> + rav_svn(None, None, [], 'ci', wc_dir, '-m', 'Add new folder %s' % new_path)
> + rav_svn(None, ["At revision 2.\n"], [], 'up', wc_dir)
> +
> + # Reverse merge to revert previous changes and commit
> + rav_svn(None, None, [], 'merge', '-c', '-2', a_repo_url, a_dir)
> + rav_svn(None, None, [], 'ci', '-m', 'Reverting svn merge -c -2.', a_dir)
> + rav_svn(None, ["At revision 3.\n"], [], 'up', wc_dir)
> +
> + # Reverse merge again to undo last revert.
> + rav_svn(None, None, [], 'merge', '-c', '-3', a_repo_url, a_dir)
> +
> + # Move new added file to another one and commit.
> + second_path = os.path.join(new_path, 'second')
> + rav_svn(None, None, [], 'move', first_path, second_path)
> + rav_svn(None, None, ["Committed revision 4.\n"], 'ci', '-m',
> + 'Revert svn merge. svn mv %s %s.' % (first_path, second_path), a_dir)
> +
> +
> ########################################################################
> # Run the tests
>
> @@ -4352,7 +4390,8 @@
> path_copy_in_repo_2475,
> commit_copy_depth_empty,
> copy_below_copy,
> - XFail(move_below_move)
> + XFail(move_below_move),
> + XFail(reverse_merge_move)

Haven't reviewed the patch, but there should be a comma at the end of this line (there wasn't one on the previous terminal item, but Python allows it, and we try to use it to avoid churn).

> ]
>
> if __name__ == '__main__':

-Hyrum
Received on 2010-01-25 14:14:11 CET

This is an archived mail posted to the Subversion Dev mailing list.