Author: julianfoad
Date: Wed Nov 16 17:25:02 2011
New Revision: 1202794

URL: http://svn.apache.org/viewvc?rev=1202794&view=rev
Log:
In some merge tests, generate more of the expected output centrally, through
expected_merge_output().

* subversion/tests/cmdline/merge_tests.py
  (expected_merge_output): Add optional parameters to specify a target and
    an expected summary of conflicts.
  (svn_merge): Pass the target and conflicts parameters on to
    expected_merge_output().
  (foreign_repos_prop_conflict): Let expected_merge_output() handle the
    summary of conflicts.

* subversion/tests/cmdline/merge_tree_conflict_tests.py
  (merge_replace_causes_tree_conflict,
   merge_replace_causes_tree_conflict2,
   merge_replace_on_del_fails): Use expected_merge_output().

* subversion/tests/cmdline/svntest/main.py
  (mergeinfo_notify_line, merge_notify_line): Accept an optional 'target'
    parameter.

Modified:
    subversion/trunk/subversion/tests/cmdline/merge_tests.py
    subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py
    subversion/trunk/subversion/tests/cmdline/svntest/main.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=1202794&r1=1202793&r2=1202794&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/merge_tests.py Wed Nov 16 
17:25:02 2011
@@ -49,7 +49,8 @@ from svntest.actions import make_conflic
 from svntest.actions import inject_conflict_into_expected_state
 
 def expected_merge_output(rev_ranges, additional_lines=None, foreign=False,
-                          elides=False, two_url=False):
+                          elides=False, two_url=False, target=None,
+                          text_conflicts=0, prop_conflicts=0, 
tree_conflicts=0):
   """Generate an (inefficient) regex representing the expected merge
   output and mergeinfo notifications from REV_RANGES and ADDITIONAL_LINES.
 
@@ -65,7 +66,13 @@ def expected_merge_output(rev_ranges, ad
 
   If ELIDES is true, add to the regex an expression representing elision
   notification.  If TWO_URL is true, tweak the regex to expect the
-  appropriate mergeinfo notification for a 3-way merge."""
+  appropriate mergeinfo notification for a 3-way merge.
+
+  TARGET is the local path to the target, as it should appear in
+  notifications; if None, it is not checked.
+
+  TEXT_CONFLICTS, PROP_CONFLICTS and TREE_CONFLICTS specify the number of
+  each kind of conflict to expect."""
 
   if rev_ranges is None:
     lines = [svntest.main.merge_notify_line(None, None, False, foreign)]
@@ -78,8 +85,8 @@ def expected_merge_output(rev_ranges, ad
       else:
         end_rev = None
       lines += [svntest.main.merge_notify_line(start_rev, end_rev,
-                                               True, foreign)]
-      lines += [svntest.main.mergeinfo_notify_line(start_rev, end_rev)]
+                                               True, foreign, target)]
+      lines += [svntest.main.mergeinfo_notify_line(start_rev, end_rev, target)]
 
   if (elides):
     lines += ["--- Eliding mergeinfo from .*\n"]
@@ -103,6 +110,16 @@ def expected_merge_output(rev_ranges, ad
     if sys.platform == 'win32' and additional_lines != None:
       additional_lines = additional_lines.replace("\\", "\\\\")
     lines.append(str(additional_lines))
+
+  if text_conflicts or prop_conflicts or tree_conflicts:
+    lines.append("Summary of conflicts:\n")
+    if text_conflicts:
+      lines.append("  Text conflicts: %d\n" % text_conflicts)
+    if prop_conflicts:
+      lines.append("  Property conflicts: %d\n" % prop_conflicts)
+    if tree_conflicts:
+      lines.append("  Tree conflicts: %d\n" % tree_conflicts)
+
   return "|".join(lines)
 
 def check_mergeinfo_recursively(root_path, subpaths_mergeinfo):
@@ -12544,15 +12561,10 @@ def svn_merge(rev_range, source, target,
     rev_arg = '-r' + str(rev_range[0] - 1) + ':' + str(rev_range[1])
   if lines is None:
     lines = ["(A |D |[UG] | [UG]|[UG][UG])   " + target + ".*\n"]
-  if text_conflicts or prop_conflicts or tree_conflicts:
-    lines.append("Summary of conflicts:\n")
-    if text_conflicts:
-      lines.append("  Text conflicts: %d\n" % text_conflicts)
-    if prop_conflicts:
-      lines.append("  Property conflicts: %d\n" % prop_conflicts)
-    if tree_conflicts:
-      lines.append("  Tree conflicts: %d\n" % tree_conflicts)
-  exp_out = expected_merge_output([mi_rev_range], lines)
+  exp_out = expected_merge_output([mi_rev_range], lines, target=target,
+                                  text_conflicts=text_conflicts,
+                                  prop_conflicts=prop_conflicts,
+                                  tree_conflicts=tree_conflicts)
   svntest.actions.run_and_verify_svn(None, exp_out, [],
                                      'merge', rev_arg, source, target, *args)
 
@@ -16694,11 +16706,9 @@ def foreign_repos_prop_conflict(sbox):
 
   # Now, merge the propchange to the *second* working copy.
   expected_output = [' C   %s\n' % (os.path.join(other_wc_dir,
-                                                 "A", "D", "G")),
-                     'Summary of conflicts:\n',
-                     '  Property conflicts: 1\n',
-                     ]
-  expected_output = expected_merge_output([[3]], expected_output, True)
+                                                 "A", "D", "G"))]
+  expected_output = expected_merge_output([[3]], expected_output, True,
+                                          prop_conflicts=1)
   svntest.actions.run_and_verify_svn(None,
                                      expected_output,
                                      [], 'merge', '-c3',

Modified: subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py?rev=1202794&r1=1202793&r2=1202794&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py 
(original)
+++ subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py Wed 
Nov 16 17:25:02 2011
@@ -46,6 +46,7 @@ from svntest.main import server_has_merg
 from merge_tests import set_up_branch
 from merge_tests import svn_copy
 from merge_tests import svn_merge
+from merge_tests import expected_merge_output
 
 #----------------------------------------------------------------------
 @SkipUnless(server_has_mergeinfo)
@@ -1726,18 +1727,15 @@ def merge_replace_causes_tree_conflict(s
     'propname', 'propval', A_D_H)
 
   # svn merge $URL/A $URL/branch A
-  expected_stdout = verify.UnorderedOutput([
-    "--- Merging differences between repository URLs into '" + A + "':\n",
+  expected_stdout = expected_merge_output(None, [
+    # merge
     '   C ' + A_B_E + '\n',
     '   C ' + A_mu + '\n',
     '   C ' + A_D_G_pi + '\n',
     '   C ' + A_D_H + '\n',
-    "--- Recording mergeinfo for merge between repository URLs into '" \
-    + A + "':\n",
+    # mergeinfo
     ' U   ' + A + '\n',
-    'Summary of conflicts:\n',
-    '  Tree conflicts: 4\n',
-  ])
+  ], target=A, two_url=True, tree_conflicts=4)
 
   actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'merge',
     url_A, url_branch, A)
@@ -1817,15 +1815,10 @@ def merge_replace_causes_tree_conflict2(
 
   ### A file-with-file replacement onto a deleted file.
   # svn merge $URL/A/mu $URL/branch/mu A/mu
-  expected_stdout = verify.UnorderedOutput([
-    "--- Merging differences between repository URLs into '" + A + "':\n",
-    '   C ' + A_mu + '\n',
-    "--- Recording mergeinfo for merge between repository URLs into '" +
-      A + "':\n",
-    " U   " + A + "\n",
-    'Summary of conflicts:\n',
-    '  Tree conflicts: 1\n',
-  ])
+  expected_stdout = expected_merge_output(None, [
+    '   C ' + A_mu + '\n',  # merge
+    " U   " + A + "\n",     # mergeinfo
+  ], target=A, two_url=True, tree_conflicts=1)
 
   actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'merge',
     url_A, url_branch, A, '--depth=files')
@@ -1841,15 +1834,10 @@ def merge_replace_causes_tree_conflict2(
 
   ### A dir-with-dir replacement onto a deleted directory.
   # svn merge $URL/A/B $URL/branch/B A/B
-  expected_stdout = verify.UnorderedOutput([
-    "--- Merging differences between repository URLs into '" + A_B + "':\n",
-    '   C ' + A_B_E + '\n',
-    "--- Recording mergeinfo for merge between repository URLs into '" +
-      A_B + "':\n",
-    " U   " + A_B + "\n",
-    'Summary of conflicts:\n',
-    '  Tree conflicts: 1\n',
-  ])
+  expected_stdout = expected_merge_output(None, [
+    '   C ' + A_B_E + '\n',   # merge
+    " U   " + A_B + "\n",     # mergeinfo
+  ], target=A_B, two_url=True, tree_conflicts=1)
 
   actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'merge',
     url_A_B, url_branch_B, A_B)
@@ -1865,16 +1853,11 @@ def merge_replace_causes_tree_conflict2(
 
   ### A dir-with-file replacement onto a deleted directory.
   # svn merge --depth=immediates $URL/A/D $URL/branch/D A/D
-  expected_stdout = verify.UnorderedOutput([
-    "--- Merging differences between repository URLs into '" + A_D + "':\n",
-    '   C ' + A_D_H + '\n',
-    "--- Recording mergeinfo for merge between repository URLs into '" +
-      A_D + "':\n",
-    " U   " + A_D + "\n",
+  expected_stdout = expected_merge_output(None, [
+    '   C ' + A_D_H + '\n',   # merge
+    " U   " + A_D + "\n",     # mergeinfo
     " U   " + A_D_G + "\n",
-    'Summary of conflicts:\n',
-    '  Tree conflicts: 1\n',
-  ])
+  ], target=A_D, two_url=True, tree_conflicts=1)
 
   actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'merge',
     '--depth=immediates', url_A_D, url_branch_D, A_D)
@@ -1890,20 +1873,9 @@ def merge_replace_causes_tree_conflict2(
 
   ### A file-with-dir replacement onto a deleted file.
   # svn merge $URL/A/D/G $URL/branch/D/G A/D/G
-  expected_stdout = verify.UnorderedOutput([
-    "--- Merging differences between repository URLs into '" + A_D_G +
-    "':\n",
-    '   C ' + A_D_G_pi + '\n',
-    "--- Recording mergeinfo for merge between repository URLs into '" +
-      A_D_G + "':\n",
-    "--- Eliding mergeinfo from '" + A_D_G_pi + "':\n",
-    " U   " + A_D_G_pi + "\n",
-    "--- Eliding mergeinfo from '" + A_D_G_pi + "':\n",
-    " U   " + A_D_G_pi + "\n",
-    " G   " + A_D_G + "\n",
-    'Summary of conflicts:\n',
-    '  Tree conflicts: 1\n',
-  ])
+  expected_stdout = expected_merge_output(None, [
+    '   C ' + A_D_G_pi + '\n',  # merge
+  ], target=A_D_G, elides=[A_D_G_pi, A_D_G], two_url=True, tree_conflicts=1)
 
   actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'merge',
     url_A_D_G, url_branch_D_G, A_D_G)
@@ -1963,15 +1935,10 @@ def merge_replace_on_del_fails(sbox):
 
   # Sync merge ^/A to branch
   svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
-  expected_stdout = verify.UnorderedOutput([
-    "--- Merging r2 through r4 into '" + branch_path + "':\n",
-    '   C ' + C_branch_path + '\n',
-    "--- Recording mergeinfo for merge of r2 through r4 into '" \
-    + branch_path + "':\n",
-    ' U   ' + branch_path + '\n',
-    'Summary of conflicts:\n',
-    '  Tree conflicts: 1\n',
-    ])
+  expected_stdout = expected_merge_output([[2,4]], [
+    '   C ' + C_branch_path + '\n',  # merge
+    ' U   ' + branch_path + '\n',    # mergeinfo
+  ], target=branch_path, tree_conflicts=1)
   # This currently fails with:
   #
   #   >svn merge ^/A branch

Modified: subversion/trunk/subversion/tests/cmdline/svntest/main.py
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/main.py?rev=1202794&r1=1202793&r2=1202794&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svntest/main.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svntest/main.py Wed Nov 16 
17:25:02 2011
@@ -998,51 +998,60 @@ def use_editor(func):
   os.environ['SVNTEST_EDITOR_FUNC'] = func
   os.environ['SVN_TEST_PYTHON'] = sys.executable
 
-def mergeinfo_notify_line(revstart, revend):
+def mergeinfo_notify_line(revstart, revend, target=None):
   """Return an expected output line that describes the beginning of a
   mergeinfo recording notification on revisions REVSTART through REVEND."""
+  if target:
+    target_re = re.escape(target)
+  else:
+    target_re = ".+"
   if (revend is None):
     if (revstart < 0):
       revstart = abs(revstart)
-      return "--- Recording mergeinfo for reverse merge of r%ld .*:\n" \
-             % (revstart)
+      return "--- Recording mergeinfo for reverse merge of r%ld into '%s':\n" \
+             % (revstart, target_re)
     else:
-      return "--- Recording mergeinfo for merge of r%ld .*:\n" % (revstart)
+      return "--- Recording mergeinfo for merge of r%ld into '%s':\n" \
+             % (revstart, target_re)
   elif (revstart < revend):
-    return "--- Recording mergeinfo for merge of r%ld through r%ld .*:\n" \
-           % (revstart, revend)
+    return "--- Recording mergeinfo for merge of r%ld through r%ld into 
'%s':\n" \
+           % (revstart, revend, target_re)
   else:
     return "--- Recording mergeinfo for reverse merge of r%ld through " \
-           "r%ld .*:\n" % (revstart, revend)
+           "r%ld into '%s':\n" % (revstart, revend, target_re)
 
 def merge_notify_line(revstart=None, revend=None, same_URL=True,
-                      foreign=False):
+                      foreign=False, target=None):
   """Return an expected output line that describes the beginning of a
   merge operation on revisions REVSTART through REVEND.  Omit both
   REVSTART and REVEND for the case where the left and right sides of
   the merge are from different URLs."""
   from_foreign_phrase = foreign and "\(from foreign repository\) " or ""
+  if target:
+    target_re = re.escape(target)
+  else:
+    target_re = ".+"
   if not same_URL:
-    return "--- Merging differences between %srepository URLs into '.+':\n" \
-           % (foreign and "foreign " or "")
+    return "--- Merging differences between %srepository URLs into '%s':\n" \
+           % (foreign and "foreign " or "", target_re)
   if revend is None:
     if revstart is None:
       # The left and right sides of the merge are from different URLs.
-      return "--- Merging differences between %srepository URLs into '.+':\n" \
-             % (foreign and "foreign " or "")
+      return "--- Merging differences between %srepository URLs into '%s':\n" \
+             % (foreign and "foreign " or "", target_re)
     elif revstart < 0:
-      return "--- Reverse-merging %sr%ld into '.+':\n" \
-             % (from_foreign_phrase, abs(revstart))
+      return "--- Reverse-merging %sr%ld into '%s':\n" \
+             % (from_foreign_phrase, abs(revstart), target_re)
     else:
-      return "--- Merging %sr%ld into '.+':\n" \
-             % (from_foreign_phrase, revstart)
+      return "--- Merging %sr%ld into '%s':\n" \
+             % (from_foreign_phrase, revstart, target_re)
   else:
     if revstart > revend:
-      return "--- Reverse-merging %sr%ld through r%ld into '.+':\n" \
-             % (from_foreign_phrase, revstart, revend)
+      return "--- Reverse-merging %sr%ld through r%ld into '%s':\n" \
+             % (from_foreign_phrase, revstart, revend, target_re)
     else:
-      return "--- Merging %sr%ld through r%ld into '.+':\n" \
-             % (from_foreign_phrase, revstart, revend)
+      return "--- Merging %sr%ld through r%ld into '%s':\n" \
+             % (from_foreign_phrase, revstart, revend, target_re)
 
 
 def make_log_msg():


Reply via email to