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 <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)

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

Reply via email to