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