> 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__':