You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pb...@apache.org on 2012/03/19 19:38:03 UTC

svn commit: r1302588 - /subversion/trunk/subversion/tests/cmdline/merge_tests.py

Author: pburba
Date: Mon Mar 19 18:38:02 2012
New Revision: 1302588

URL: http://svn.apache.org/viewvc?rev=1302588&view=rev
Log:
* subversion/tests/cmdline/merge_tests.py: Add a test for issue #4144
  'Reverse merge with replace in source applies diffs in forward order'.

Modified:
    subversion/trunk/subversion/tests/cmdline/merge_tests.py

Modified: subversion/trunk/subversion/tests/cmdline/merge_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/merge_tests.py?rev=1302588&r1=1302587&r2=1302588&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/merge_tests.py Mon Mar 19 18:38:02 2012
@@ -17467,6 +17467,90 @@ def merge_source_with_replacement(sbox):
                                      'merge', sbox.repo_url + '/A',
                                      A_COPY_path)
 
+#----------------------------------------------------------------------
+# Test for issue #4144 'Reverse merge with replace in source applies
+# diffs in forward order'.
+@SkipUnless(server_has_mergeinfo)
+@XFail()
+@Issue(4144)
+def reverse_merge_with_rename(sbox):
+  "reverse merge applies revs in reverse order"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  # Some paths we'll care about.
+  A_path          = os.path.join(sbox.wc_dir, 'A')
+  omega_path      = os.path.join(sbox.wc_dir, 'trunk', 'D', 'H', 'omega')
+  A_COPY_path     = os.path.join(sbox.wc_dir, 'A_COPY')
+  beta_COPY_path  = os.path.join(sbox.wc_dir, 'A_COPY', 'B', 'E', 'beta')
+  psi_COPY_path   = os.path.join(sbox.wc_dir, 'A_COPY', 'D', 'H', 'psi')
+  rho_COPY_path   = os.path.join(sbox.wc_dir, 'A_COPY', 'D', 'G', 'rho')
+  omega_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'D', 'H', 'omega')
+
+  # branch A@1 to A_COPY in r2, then make a few edits under A in r3-6:  
+  wc_disk, wc_status = set_up_branch(sbox)
+
+  # r7 - Rename ^/A to ^/trunk.
+  svntest.actions.run_and_verify_svn(None,
+                                     ['\n', 'Committed revision 7.\n'],
+                                     [], 'move',
+                                     sbox.repo_url + '/A',
+                                     sbox.repo_url + '/trunk',
+                                     '-m', "Rename 'A' to 'trunk'")
+  svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+
+  # r8 - Make and edit to trunk/D/H/omega (which was also edited in r6).
+  svntest.main.file_write(omega_path, "Edit 'omega' on trunk.\n")
+  svntest.main.run_svn(None, 'ci', '-m', 'Another omega edit', wc_dir)
+
+  # r9 - Sync merge ^/trunk to A_COPY.
+  svntest.actions.run_and_verify_svn(None,
+                                     None, # Don't check stdout, we test this
+                                           # type of merge to death elsewhere.
+                                     [], 'merge', sbox.repo_url + '/trunk',
+                                     A_COPY_path)
+  svntest.main.run_svn(None, 'ci', '-m', 'Sync A_COPY with ^/trunk', wc_dir)
+  svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+
+  # Reverse merge -r9:1 from ^/trunk to A_COPY.  This should return
+  # A_COPY to the same state it had prior to the sync merge in r2.
+  #
+  # This currently fails because the Subversion tries to reverse merge
+  # -r6:1 first, then -r8:6, causing a spurious conflict on omega:
+  #
+  #   >svn merge ^/trunk A_COPY -r9:1 --accept=postpone
+  #   --- Reverse-merging r6 through r2 into 'A_COPY':
+  #   U    A_COPY\B\E\beta
+  #   U    A_COPY\D\G\rho
+  #   C    A_COPY\D\H\omega
+  #   U    A_COPY\D\H\psi
+  #   --- Recording mergeinfo for reverse merge of r6 through r2 into 'A_COPY':
+  #    U   A_COPY
+  #   Summary of conflicts:
+  #     Text conflicts: 1
+  #   ..\..\..\subversion\svn\util.c:913: (apr_err=155015)
+  #   ..\..\..\subversion\libsvn_client\merge.c:10848: (apr_err=155015)
+  #   ..\..\..\subversion\libsvn_client\merge.c:10812: (apr_err=155015)
+  #   ..\..\..\subversion\libsvn_client\merge.c:8984: (apr_err=155015)
+  #   ..\..\..\subversion\libsvn_client\merge.c:4728: (apr_err=155015)
+  #   svn: E155015: One or more conflicts were produced while merging r6:1
+  #   into 'C:\SVN\src-trunk-4\Debug\subversion\tests\cmdline\svn-test-work
+  #   \working_copies\merge_tests-127\A_COPY' -- resolve all conflicts and
+  #   rerun the merge to apply the remaining unmerged revisions
+  expected_output = expected_merge_output(
+    [[8,7],[6,2]],
+    ['U    ' + beta_COPY_path  + '\n',
+    'U    ' + rho_COPY_path   + '\n',
+    'U    ' + omega_COPY_path + '\n',
+    'G    ' + omega_COPY_path + '\n',
+    'U    ' + psi_COPY_path   + '\n',
+    ' U   ' + A_COPY_path     + '\n',
+    ' G   ' + A_COPY_path     + '\n',], elides=True)
+  svntest.actions.run_and_verify_svn(None, expected_output, [],
+                                     'merge', sbox.repo_url + '/trunk',
+                                     A_COPY_path, '-r9:1')
+
 ########################################################################
 # Run the tests
 
@@ -17599,6 +17683,7 @@ test_list = [ None,
               unnecessary_noninheritable_mergeinfo_shallow_merge,
               svnmucc_abuse_1,
               merge_source_with_replacement,
+              reverse_merge_with_rename,
              ]
 
 if __name__ == '__main__':