> 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 <[email protected]>
]]]
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)
]
if __name__ == '__main__':