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

svn commit: r1305863 - in /subversion/branches/1.7.x-issue4144: ./ subversion/libsvn_client/merge.c subversion/tests/cmdline/merge_tests.py

Author: stsp
Date: Tue Mar 27 15:06:17 2012
New Revision: 1305863

URL: http://svn.apache.org/viewvc?rev=1305863&view=rev
Log:
On the 1.7.x-issue4144 branch, merge r1302588 and r1305853 from trunk,
resolving conflicts.

Modified:
    subversion/branches/1.7.x-issue4144/   (props changed)
    subversion/branches/1.7.x-issue4144/subversion/libsvn_client/merge.c
    subversion/branches/1.7.x-issue4144/subversion/tests/cmdline/merge_tests.py

Propchange: subversion/branches/1.7.x-issue4144/
------------------------------------------------------------------------------
  Merged /subversion/trunk:r1302588,1305853

Modified: subversion/branches/1.7.x-issue4144/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x-issue4144/subversion/libsvn_client/merge.c?rev=1305863&r1=1305862&r2=1305863&view=diff
==============================================================================
--- subversion/branches/1.7.x-issue4144/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/1.7.x-issue4144/subversion/libsvn_client/merge.c Tue Mar 27 15:06:17 2012
@@ -6082,8 +6082,8 @@ static int
 compare_merge_source_ts(const void *a,
                         const void *b)
 {
-  svn_revnum_t a_rev = ((const merge_source_t *)a)->rev1;
-  svn_revnum_t b_rev = ((const merge_source_t *)b)->rev1;
+  svn_revnum_t a_rev = (*(const merge_source_t *const *)a)->rev1;
+  svn_revnum_t b_rev = (*(const merge_source_t *const *)b)->rev1;
   if (a_rev == b_rev)
     return 0;
   return a_rev < b_rev ? 1 : -1;

Modified: subversion/branches/1.7.x-issue4144/subversion/tests/cmdline/merge_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x-issue4144/subversion/tests/cmdline/merge_tests.py?rev=1305863&r1=1305862&r2=1305863&view=diff
==============================================================================
--- subversion/branches/1.7.x-issue4144/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/branches/1.7.x-issue4144/subversion/tests/cmdline/merge_tests.py Tue Mar 27 15:06:17 2012
@@ -17110,6 +17110,89 @@ def record_only_merge_adds_new_subtree_m
                                        None, None, None, None,
                                        None, 1, False)
 
+#----------------------------------------------------------------------
+# Test for issue #4144 'Reverse merge with replace in source applies
+# diffs in forward order'.
+@SkipUnless(server_has_mergeinfo)
+@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
 
@@ -17238,6 +17321,7 @@ test_list = [ None,
               merged_deletion_causes_tree_conflict,
               merge_adds_subtree_with_mergeinfo,
               record_only_merge_adds_new_subtree_mergeinfo,
+              reverse_merge_with_rename,
              ]
 
 if __name__ == '__main__':