> 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 <noo...@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)
              ]
 
 if __name__ == '__main__':

Reply via email to