On Monday 14 March 2011 11:40 AM, Arwin Arni wrote:
On Monday 14 March 2011 02:47 AM, Daniel Becroft wrote:
On Mon, Mar 14, 2011 at 7:06 AM, Daniel Becroft <djcbecr...@gmail.com <mailto:djcbecr...@gmail.com>> wrote:

    On Sat, Mar 12, 2011 at 1:50 AM, C. Michael Pilato
<cmpil...@collab.net <mailto:cmpil...@collab.net>> wrote:

        On 03/11/2011 10:03 AM, Arwin Arni wrote:
> 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 long description line triggers the AssertionError about
        the test
        docstring needing to be 50 characters or less.

> +  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)

        As this is a test of a dry-run merge, I find the use of
        run_and_verify_merge() a bit obfuscating.  I think it'd be
        better to
        explicitly run a --dry-run merge so that it's obvious that
        what you're
        testing is exactly that.

        And, as I said elsethread, the patch didn't even apply to
        HEAD.  So that
        needs to be reworked.


    Hi Mike,

    One of the advantages in using run_and_verify_merge() is that if
    dry_run = TRUE, it does it's own check to ensure that the working
    copy is not modified. IMO, this is better than explicitly building
    the tree prior to the merge, and then re-checking the merge.

    However, I'm finding that running an explicit merge works, but
    running run_and_verify_merge() does not (conflict files still get
    created).


Never mind, I just found the problem. Using run_and_verify_merge() with dry_run = True runs both a dry-run and a wet-run update. Since the wet-run update always gets run, the conflict files always get created.

So the test-case is fine right.. I mean.. The dry_run checks are independent of the wet run.. They happen before the wet run happens..

Is there anything else that we need to add to this test?

I've attached an updated patch that should now apply without hiccups..

Regards,
Arwin Arni
I'm sorry I overlooked the docstring length again.. Here's the corrected patch.

Regards,
Arwin Arni
Index: subversion/tests/cmdline/merge_tests.py
===================================================================
--- subversion/tests/cmdline/merge_tests.py     (revision 1081349)
+++ subversion/tests/cmdline/merge_tests.py     (working copy)
@@ -16580,6 +16580,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 shouldn't make conflict resoln 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
 
@@ -16702,6 +16798,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