On Friday 11 March 2011 08:26 PM, Arwin Arni wrote:
Hi All,

This patch adds a test to make sure that conflict resolution files are not created in the event of a *dry-run* merge that has binary file conflicts.

The relevant discussion on dev@ is here -> http://svn.haxx.se/dev/archive-2011-03/0145.shtml

Regards,
Arwin Arni
Sorry, forgot the attachments..
Index: ../subversion/tests/cmdline/merge_tests.py
===================================================================
--- ../subversion/tests/cmdline/merge_tests.py  (revision 1080126)
+++ ../subversion/tests/cmdline/merge_tests.py  (working copy)
@@ -16586,6 +16586,102 @@
   if not os.access(beta_path, os.X_OK):
     raise svntest.Failure("beta is not marked as executable after commit")
 
+@XFail()
+def dry_run_merge_conflicting_binary(sbox):
+  "dry run merge should not create conflict resolution files"
+
+  # This test-case is to showcase the regression caused by
+  # r1075802. Here is the link to the relevant discussion:
+  # http://svn.haxx.se/dev/archive-2011-03/0145.shtml
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+  # Add a binary file to the project
+  theta_contents = open(os.path.join(sys.path[0], "theta.bin"), 'rb').read()
+  # Write PNG file data into 'A/theta'.
+  theta_path = os.path.join(wc_dir, 'A', 'theta')
+  svntest.main.file_write(theta_path, theta_contents, 'wb')
+
+  svntest.main.run_svn(None, 'add', theta_path)
+
+  # Commit the new binary file, creating revision 2.
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/theta' : Item(verb='Adding  (bin)'),
+    })
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.add({
+    'A/theta' : Item(status='  ', wc_rev=2),
+    })
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status, None,
+                                        wc_dir)
+
+  # Make the "other" working copy
+  other_wc = sbox.add_wc_path('other')
+  svntest.actions.duplicate_dir(wc_dir, other_wc)
+
+  # Change the binary file in first working copy, commit revision 3.
+  svntest.main.file_append(theta_path, "some extra junk")
+  expected_output = wc.State(wc_dir, {
+    'A/theta' : Item(verb='Sending'),
+    })
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.add({
+    'A/theta' : Item(status='  ', wc_rev=3),
+    })
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status, None,
+                                        wc_dir)
+
+  # In second working copy, append different content to the binary
+  # and attempt to 'svn merge -r 2:3'.
+  # We should see a conflict during the merge.
+  other_theta_path = os.path.join(other_wc, 'A', 'theta')
+  svntest.main.file_append(other_theta_path, "some other junk")
+  expected_output = wc.State(other_wc, {
+    'A/theta' : Item(status='C '),
+    })
+  expected_mergeinfo_output = wc.State(other_wc, {
+    '' : Item(status=' U'),
+    })
+  expected_elision_output = wc.State(other_wc, {
+    })
+  expected_disk = svntest.main.greek_state.copy()
+  expected_disk.add({
+    ''        : Item(props={SVN_PROP_MERGEINFO : '/:3'}),
+    'A/theta' : Item(theta_contents + "some other junk",
+                     props={'svn:mime-type' : 'application/octet-stream'}),
+    })
+
+  # verify content of base(left) file
+  expected_disk.add({
+  'A/theta.merge-left.r2' :
+    Item(contents = theta_contents )
+  })
+  # verify content of theirs(right) file
+  expected_disk.add({
+  'A/theta.merge-right.r3' :
+    Item(contents= theta_contents + "some extra junk")
+  })
+
+  expected_status = svntest.actions.get_virginal_state(other_wc, 1)
+  expected_status.add({
+    ''        : Item(status=' M', wc_rev=1),
+    'A/theta' : Item(status='C ', wc_rev=2),
+    })
+  expected_skip = wc.State('', { })
+
+  svntest.actions.run_and_verify_merge(other_wc, '2', '3',
+                                       sbox.repo_url, None,
+                                       expected_output,
+                                       expected_mergeinfo_output,
+                                       expected_elision_output,
+                                       expected_disk,
+                                       expected_status,
+                                       expected_skip,
+                                       None, None, None, None, None,
+                                       True, True, '--allow-mixed-revisions',
+                                       other_wc)
 ########################################################################
 # Run the tests
 
@@ -16708,6 +16804,7 @@
               no_self_referential_or_nonexistent_inherited_mergeinfo,
               subtree_merges_inherit_invalid_working_mergeinfo,
               merge_change_to_file_with_executable,
+              dry_run_merge_conflicting_binary,
              ]
 
 if __name__ == '__main__':
[[[
Adds an XFail test to catch regression created by r1075802

* subversion/tests/cmdline/merge_tests.py
  (dry_run_merge_conflicting_binary): New XFail testcase.

Patch by: Arwin Arni <arwin{_AT_}collab.net>
]]]

Reply via email to