You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2011/02/07 20:18:33 UTC

svn commit: r1068059 [6/7] - in /subversion/branches/ignore-mergeinfo-log: ./ build/ notes/ notes/commit-access-templates/ subversion/include/ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_delta/ subversion/libsvn_diff/ subver...

Modified: subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/merge_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/merge_tests.py?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/merge_tests.py Mon Feb  7 19:18:29 2011
@@ -34,10 +34,12 @@ from svntest import main, wc, verify, ac
 
 # (abbreviation)
 Item = wc.StateItem
-XFail = svntest.testcase.XFail
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
-Wimp = svntest.testcase.Wimp
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 exp_noop_up_out = svntest.actions.expected_noop_update_output
 
 from svntest.main import SVN_PROP_MERGEINFO
@@ -110,6 +112,7 @@ def check_mergeinfo_recursively(root_pat
 #   Each test must return on success or raise on failure.
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def textual_merges_galore(sbox):
   "performing a merge, with mixed results"
 
@@ -404,6 +407,7 @@ def textual_merges_galore(sbox):
 
 #----------------------------------------------------------------------
 # Merge should copy-with-history when adding files or directories
+@SkipUnless(server_has_mergeinfo)
 def add_with_history(sbox):
   "merge and add new files/dirs with history"
 
@@ -530,6 +534,8 @@ def add_with_history(sbox):
 
 #----------------------------------------------------------------------
 # Issue 953
+@SkipUnless(server_has_mergeinfo)
+@Issue(953)
 def simple_property_merges(sbox):
   "some simple property merges"
 
@@ -746,6 +752,7 @@ def simple_property_merges(sbox):
 
 #----------------------------------------------------------------------
 # This is a regression for issue #1176.
+@Issue(1176)
 def merge_similar_unrelated_trees(sbox):
   "merging similar trees ancestrally unrelated"
 
@@ -935,21 +942,27 @@ def merge_one_file_helper(sbox, arg_flav
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
+@Issue(1150)
 def merge_one_file_using_r(sbox):
-  "merge one file (issue #1150) using the -r option"
+  "merge one file using the -r option"
   merge_one_file_helper(sbox, 'r')
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
+@Issue(1150)
 def merge_one_file_using_c(sbox):
-  "merge one file (issue #1150) using the -c option"
+  "merge one file using the -c option"
   merge_one_file_helper(sbox, 'c')
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def merge_one_file_using_implicit_revs(sbox):
   "merge one file without explicit revisions"
   merge_one_file_helper(sbox, '*')
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def merge_record_only(sbox):
   "mark a revision range as merged"
   merge_one_file_helper(sbox, 'r', 1)
@@ -1072,16 +1085,19 @@ def merge_with_implicit_target_helper(sb
                           (svntest.tree.get_text('mu'), orig_mu_text))
 
 #----------------------------------------------------------------------
+@Issue(785)
 def merge_with_implicit_target_using_r(sbox):
   "merging a file w/no explicit target path using -r"
   merge_with_implicit_target_helper(sbox, 'r')
 
 #----------------------------------------------------------------------
+@Issue(785)
 def merge_with_implicit_target_using_c(sbox):
   "merging a file w/no explicit target path using -c"
   merge_with_implicit_target_helper(sbox, 'c')
 
 #----------------------------------------------------------------------
+@Issue(785)
 def merge_with_implicit_target_and_revs(sbox):
   "merging a file w/no explicit target path or revs"
   merge_with_implicit_target_helper(sbox, '*')
@@ -1186,6 +1202,8 @@ def merge_with_prev(sbox):
 # Regression test for issue #1319: 'svn merge' should *not* 'C' when
 # merging a change into a binary file, unless it has local mods, or has
 # different contents from the left side of the merge.
+@SkipUnless(server_has_mergeinfo)
+@Issue(1319)
 def merge_binary_file(sbox):
   "merge change into unchanged binary file"
 
@@ -1269,6 +1287,8 @@ def merge_binary_file(sbox):
 # Regression test for Issue #1297:
 # A merge that creates a new file followed by an immediate diff
 # The diff should succeed.
+@SkipUnless(server_has_mergeinfo)
+@Issue(1297)
 def merge_in_new_file_and_diff(sbox):
   "diff after merge that creates a new file"
 
@@ -1355,6 +1375,8 @@ def merge_in_new_file_and_diff(sbox):
 # Issue #1425:  'svn merge' should skip over any unversioned obstructions.
 # This test involves tree conflicts. - but attempting to test for
 # pre-tree-conflict behaviour
+@SkipUnless(server_has_mergeinfo)
+@Issue([1425, 2898])
 def merge_skips_obstructions(sbox):
   "merge should skip over unversioned obstructions"
 
@@ -1657,6 +1679,7 @@ def merge_skips_obstructions(sbox):
 # copy locked and broken.
 
 # This test involves tree conflicts.
+@SkipUnless(server_has_mergeinfo)
 def merge_into_missing(sbox):
   "merge into missing must not break working copy"
 
@@ -1824,6 +1847,8 @@ def merge_into_missing(sbox):
 
 #----------------------------------------------------------------------
 # A test for issue 1738
+@Issue(1738)
+@SkipUnless(server_has_mergeinfo)
 def dry_run_adds_file_with_prop(sbox):
   "merge --dry-run adding a new file with props"
 
@@ -1883,6 +1908,7 @@ def dry_run_adds_file_with_prop(sbox):
 #----------------------------------------------------------------------
 # Regression test for issue #1673
 # Merge a binary file from two URL with a common ancestry
+@Issue(1673)
 def merge_binary_with_common_ancestry(sbox):
   "merge binary files with common ancestry"
 
@@ -2029,8 +2055,10 @@ def merge_binary_with_common_ancestry(sb
 
 #----------------------------------------------------------------------
 # A test for issue 1905
+@Issue(1905)
+@SkipUnless(server_has_mergeinfo)
 def merge_funny_chars_on_path(sbox):
-  "merge with funny characters (issue #1905)"
+  "merge with funny characters"
 
   sbox.build()
   wc_dir = sbox.wc_dir
@@ -2167,6 +2195,7 @@ def merge_funny_chars_on_path(sbox):
 
 #-----------------------------------------------------------------------
 # Regression test for issue #2064
+@Issue(2064)
 def merge_keyword_expansions(sbox):
   "merge changes to keyword expansion property"
 
@@ -2243,6 +2272,7 @@ def merge_keyword_expansions(sbox):
                                        expected_skip)
 
 #----------------------------------------------------------------------
+@Issue(2132)
 def merge_prop_change_to_deleted_target(sbox):
   "merge prop change into deleted target"
   # For issue #2132.
@@ -2404,6 +2434,8 @@ def set_up_dir_replace(sbox):
 #----------------------------------------------------------------------
 # A merge that replaces a directory
 # Tests for Issue #2144 and Issue #2607
+@SkipUnless(server_has_mergeinfo)
+@Issue(2144)
 def merge_dir_replace(sbox):
   "merge a replacement of a directory"
 
@@ -2517,6 +2549,7 @@ def merge_dir_replace(sbox):
 #----------------------------------------------------------------------
 # A merge that replaces a directory and one of its children
 # Tests for Issue #2690
+@Issue(2690)
 def merge_dir_and_file_replace(sbox):
   "replace both dir and one of its children"
 
@@ -2634,6 +2667,7 @@ def merge_dir_and_file_replace(sbox):
                                      new_file_3_url)
 
 #----------------------------------------------------------------------
+@Issue(2144)
 def merge_file_with_space_in_its_name(sbox):
   "merge a file whose name contains a space"
   # For issue #2144
@@ -2666,8 +2700,9 @@ def merge_file_with_space_in_its_name(sb
 # A merge between two branches using no revision number with the dir being
 # created already existing as an unversioned directory.
 # Tests for Issue #2222
+@Issue(2222)
 def merge_dir_branches(sbox):
-  "merge between branches (Issue #2222)"
+  "merge between branches"
 
   sbox.build()
   wc_dir = sbox.wc_dir
@@ -2850,6 +2885,8 @@ def safe_property_merge(sbox):
 #----------------------------------------------------------------------
 # Test for issue 2035, whereby 'svn merge' wouldn't always mark
 # property conflicts when it should.
+@Issue(2035)
+@SkipUnless(server_has_mergeinfo)
 def property_merge_from_branch(sbox):
   "property merge conflict even without local mods"
 
@@ -2978,6 +3015,7 @@ def property_merge_from_branch(sbox):
 #----------------------------------------------------------------------
 # Another test for issue 2035, whereby sometimes 'svn merge' marked
 # property conflicts when it shouldn't!
+@Issue(2035)
 def property_merge_undo_redo(sbox):
   "undo, then redo a property merge"
 
@@ -3068,6 +3106,7 @@ def property_merge_undo_redo(sbox):
 
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def cherry_pick_text_conflict(sbox):
   "cherry-pick a dependent change, get conflict"
 
@@ -3176,6 +3215,7 @@ def cherry_pick_text_conflict(sbox):
 
 #----------------------------------------------------------------------
 # Test for issue 2135
+@Issue(2135)
 def merge_file_replace(sbox):
   "merge a replacement of a file"
 
@@ -3267,6 +3307,7 @@ def merge_file_replace(sbox):
 #----------------------------------------------------------------------
 # Test for issue 2522
 # Same as merge_file_replace, but without update before merge.
+@Issue(2522)
 def merge_file_replace_to_mixed_rev_wc(sbox):
   "merge a replacement of a file to mixed rev wc"
 
@@ -3382,6 +3423,7 @@ def merge_file_replace_to_mixed_rev_wc(s
 
 #----------------------------------------------------------------------
 # use -x -w option for ignoring whitespace during merge
+@SkipUnless(server_has_mergeinfo)
 def merge_ignore_whitespace(sbox):
   "ignore whitespace when merging"
 
@@ -3454,6 +3496,7 @@ def merge_ignore_whitespace(sbox):
 
 #----------------------------------------------------------------------
 # use -x --ignore-eol-style option for ignoring eolstyle during merge
+@SkipUnless(server_has_mergeinfo)
 def merge_ignore_eolstyle(sbox):
   "ignore eolstyle when merging"
 
@@ -3541,6 +3584,7 @@ def merge_ignore_eolstyle(sbox):
 #
 # This test for 'svn update' can be found in update_tests.py as
 # conflict_markers_matching_eol.
+@SkipUnless(server_has_mergeinfo)
 def merge_conflict_markers_matching_eol(sbox):
   "conflict markers should match the file's eol style"
 
@@ -3680,6 +3724,7 @@ def merge_conflict_markers_matching_eol(
 #
 # This test for 'svn update' can be found in update_tests.py as
 # update_eolstyle_handling.
+@SkipUnless(server_has_mergeinfo)
 def merge_eolstyle_handling(sbox):
   "handle eol-style propchange during merge"
 
@@ -3893,6 +3938,7 @@ def create_deep_trees(wc_dir):
   return expected_status
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def avoid_repeated_merge_using_inherited_merge_info(sbox):
   "use inherited mergeinfo to avoid repeated merge"
 
@@ -4006,6 +4052,8 @@ def avoid_repeated_merge_using_inherited
                                         expected_status)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
+@Issue(2821)
 def avoid_repeated_merge_on_subtree_with_merge_info(sbox):
   "use subtree's mergeinfo to avoid repeated merge"
   # Create deep trees A/B/F/E and A/B/F/E1 and copy A/B to A/copy-of-B
@@ -4264,6 +4312,7 @@ def tweak_src_then_merge_to_dest(sbox, s
   return new_rev
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def obey_reporter_api_semantics_while_doing_subtree_merges(sbox):
   "drive reporter api in depth first order"
 
@@ -4540,6 +4589,8 @@ def set_up_branch(sbox, branch_only = Fa
   return expected_disk, expected_status
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
+@Issue([2733,2734])
 def mergeinfo_inheritance(sbox):
   "target inherits mergeinfo from nearest ancestor"
 
@@ -4886,6 +4937,7 @@ def mergeinfo_inheritance(sbox):
                                        None, 1)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def mergeinfo_elision(sbox):
   "mergeinfo elides to ancestor with identical info"
 
@@ -5137,6 +5189,7 @@ def mergeinfo_elision(sbox):
                                      beta_COPY_path)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def mergeinfo_inheritance_and_discontinuous_ranges(sbox):
   "discontinuous merges produce correct mergeinfo"
 
@@ -5232,7 +5285,7 @@ def mergeinfo_inheritance_and_discontinu
 
   # Wipe the memory of a portion of the previous merge...
   ### It'd be nice to use 'merge --record-only' here, but we can't (yet)
-  ### wipe all ranges for a file due to the bug pointed out in r24645.
+  ### wipe all ranges for a file due to the bug pointed out in r864719.
   mu_copy_path = os.path.join(A_COPY_path, 'mu')
   svntest.actions.run_and_verify_svn(None,
                                      ["property '" + SVN_PROP_MERGEINFO
@@ -5254,6 +5307,8 @@ def mergeinfo_inheritance_and_discontinu
                                      SVN_PROP_MERGEINFO, mu_copy_path)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
+@Issue(2754)
 def merge_to_target_with_copied_children(sbox):
   "merge works when target has copied children"
 
@@ -5336,6 +5391,8 @@ def merge_to_target_with_copied_children
                                        None, 1)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
+@Issue(3188)
 def merge_to_switched_path(sbox):
   "merge to switched path does not inherit or elide"
 
@@ -5510,6 +5567,8 @@ def merge_to_switched_path(sbox):
 #
 #   3188: Mergeinfo on switched targets/subtrees should
 #         elide to repos
+@SkipUnless(server_has_mergeinfo)
+@Issue([2823,2839,3187,3188])
 def merge_to_path_with_switched_children(sbox):
   "merge to path with switched children"
 
@@ -6034,6 +6093,7 @@ def merge_to_path_with_switched_children
 #----------------------------------------------------------------------
 # Test for issue 2047: Merge from parent dir fails while it succeeds from
 # the direct dir
+@Issue(2047)
 def merge_with_implicit_target_file(sbox):
   "merge a change to a file, using relative path"
 
@@ -6069,6 +6129,8 @@ def merge_with_implicit_target_file(sbox
 #----------------------------------------------------------------------
 # Test practical application of issue #2769 fix, empty rev range elision,
 # and elision to the repos.
+@Issue(2769)
+@SkipUnless(server_has_mergeinfo)
 def empty_mergeinfo(sbox):
   "mergeinfo can explicitly be empty"
 
@@ -6219,6 +6281,8 @@ def empty_mergeinfo(sbox):
                                      A_COPY_path)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
+@Issue(2781)
 def prop_add_to_child_with_mergeinfo(sbox):
   "merge adding prop to child of merge target works"
 
@@ -6301,6 +6365,7 @@ def prop_add_to_child_with_mergeinfo(sbo
                                        None, 1)
 
 #----------------------------------------------------------------------
+@Issue([2788,3383])
 def foreign_repos_does_not_update_mergeinfo(sbox):
   "set no mergeinfo when merging from foreign repos"
 
@@ -6410,6 +6475,8 @@ def foreign_repos_does_not_update_mergei
 
 #----------------------------------------------------------------------
 # This test involves tree conflicts.
+@XFail()
+@Issue(2897)
 def avoid_reflected_revs(sbox):
   "avoid repeated merges for cyclic merging"
 
@@ -6662,6 +6729,7 @@ def avoid_reflected_revs(sbox):
                                        None, None, None, None, None, 1)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def update_loses_mergeinfo(sbox):
   "update does not merge mergeinfo"
 
@@ -6780,6 +6848,8 @@ def update_loses_mergeinfo(sbox):
 
 #----------------------------------------------------------------------
 # Tests part of issue# 2829.
+@Issue(2829)
+@SkipUnless(server_has_mergeinfo)
 def merge_loses_mergeinfo(sbox):
   "merge should merge mergeinfo"
 
@@ -6895,6 +6965,7 @@ def merge_loses_mergeinfo(sbox):
                                        check_props=1)
 
 #----------------------------------------------------------------------
+@Issue(2853)
 def single_file_replace_style_merge_capability(sbox):
   "replace-style merge capability for a single file"
 
@@ -6935,6 +7006,8 @@ def single_file_replace_style_merge_capa
 
 #----------------------------------------------------------------------
 # Test for issue 2786 fix.
+@Issue(2786)
+@SkipUnless(server_has_mergeinfo)
 def merge_to_out_of_date_target(sbox):
   "merge to ood path can lead to inaccurate mergeinfo"
 
@@ -7049,6 +7122,7 @@ def merge_to_out_of_date_target(sbox):
                                         check_props=1)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def merge_with_depth_files(sbox):
   "merge test for --depth files"
 
@@ -7175,6 +7249,8 @@ def merge_with_depth_files(sbox):
 # non-inheritable mergeinfo.
 #
 # Test issue #3407 'Shallow merges incorrectly set mergeinfo on children'.
+@SkipUnless(server_has_mergeinfo)
+@Issues([2976,3392,3407])
 def merge_away_subtrees_noninheritable_ranges(sbox):
   "subtrees can lose non-inheritable ranges"
 
@@ -7605,6 +7681,8 @@ def merge_away_subtrees_noninheritable_r
 #----------------------------------------------------------------------
 # Test for issue #2827
 # Handle merge info for sparsely-populated directories
+@Issue(2827)
+@SkipUnless(server_has_mergeinfo)
 def merge_to_sparse_directories(sbox):
   "merge to sparse directories"
 
@@ -7896,6 +7974,7 @@ def merge_to_sparse_directories(sbox):
                                        None, 1)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def merge_old_and_new_revs_from_renamed_dir(sbox):
   "merge -rold(before rename):head renamed dir"
 
@@ -8051,6 +8130,7 @@ def merge_old_and_new_revs_from_renamed_
                                        True, False)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def merge_with_child_having_different_rev_ranges_to_merge(sbox):
   "child having different rev ranges to merge"
   #Modify A/mu to 30 lines with a content 'line1'...'line30' commit it at r2.
@@ -8309,6 +8389,7 @@ def merge_with_child_having_different_re
                                        None, None, None, None, None, 1)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def merge_old_and_new_revs_from_renamed_file(sbox):
   "merge -rold(before rename):head renamed file"
 
@@ -8377,6 +8458,7 @@ def merge_old_and_new_revs_from_renamed_
                                      mu_COPY_path)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def merge_with_auto_rev_range_detection(sbox):
   "merge with auto detection of revision ranges"
 
@@ -8505,6 +8587,8 @@ def merge_with_auto_rev_range_detection(
 #----------------------------------------------------------------------
 # Test for issue 2818: Provide a 'merge' API which allows for merging of
 # arbitrary revision ranges (e.g. '-c 3,5,7')
+@Issue(2818)
+@SkipUnless(server_has_mergeinfo)
 def cherry_picking(sbox):
   "command line supports cherry picked merge ranges"
 
@@ -8686,6 +8770,8 @@ def cherry_picking(sbox):
                                      D_COPY_path)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
+@Issue(2969)
 def propchange_of_subdir_raises_conflict(sbox):
   "merge of propchange on subdir raises conflict"
 
@@ -8802,6 +8888,8 @@ def propchange_of_subdir_raises_conflict
 #----------------------------------------------------------------------
 # Test for issue #2971: Reverse merge of prop add segfaults if
 # merging to parent of first merge
+@Issue(2971)
+@SkipUnless(server_has_mergeinfo)
 def reverse_merge_prop_add_on_child(sbox):
   "reverse merge of prop add on child"
 
@@ -8908,6 +8996,8 @@ def reverse_merge_prop_add_on_child(sbox
                                        None, 1)
 
 #----------------------------------------------------------------------
+@XFail()
+@Issue([2970,3642])
 def merge_target_with_non_inheritable_mergeinfo(sbox):
   "merge target with non inheritable mergeinfo"
 
@@ -9024,6 +9114,7 @@ def merge_target_with_non_inheritable_me
                                        1, 1)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def self_reverse_merge(sbox):
   "revert a commit on a target"
 
@@ -9100,6 +9191,7 @@ def self_reverse_merge(sbox):
                                        None, None, None, None, None, 1, 1)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def ignore_ancestry_and_mergeinfo(sbox):
   "--ignore-ancestry also ignores mergeinfo"
 
@@ -9206,6 +9298,7 @@ def ignore_ancestry_and_mergeinfo(sbox):
                                        '--ignore-ancestry', A_COPY_B_path)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def merge_from_renamed_branch_fails_while_avoiding_repeat_merge(sbox):
   "merge from renamed branch"
   #Copy A/C to A/COPY_C results in r2.
@@ -9309,6 +9402,8 @@ def merge_from_renamed_branch_fails_whil
 #----------------------------------------------------------------------
 # Test for part of issue #2877: 'do subtree merge only if subtree has
 # explicit mergeinfo set and exists in the merge source'
+@SkipUnless(server_has_mergeinfo)
+@Issue(2877)
 def merge_source_normalization_and_subtree_merges(sbox):
   "normalized mergeinfo is recorded on subtrees"
 
@@ -9461,6 +9556,8 @@ def merge_source_normalization_and_subtr
 #----------------------------------------------------------------------
 # Tests for issue #3067: 'subtrees with intersecting mergeinfo, that don't
 # exist at the start of a merge range shouldn't break the merge'
+@SkipUnless(server_has_mergeinfo)
+@Issue(3067)
 def new_subtrees_should_not_break_merge(sbox):
   "subtrees added after start of merge range are ok"
 
@@ -9892,6 +9989,7 @@ def new_subtrees_should_not_break_merge(
                                        None, 1)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def dont_add_mergeinfo_from_own_history(sbox):
   "cyclic merges don't add mergeinfo from own history"
 
@@ -10371,8 +10469,9 @@ def dont_add_mergeinfo_from_own_history(
                                        None, 1)
 
 #----------------------------------------------------------------------
+@Issue(3094)
 def merge_range_predates_history(sbox):
-  "merge range predates history (issue #3094)"
+  "merge range predates history"
 
   sbox.build()
   wc_dir = sbox.wc_dir
@@ -10413,6 +10512,7 @@ def merge_range_predates_history(sbox):
                                      trunk_url, branch_path)
 
 #----------------------------------------------------------------------
+@Issue(3623)
 def foreign_repos(sbox):
   "merge from a foreign repository"
 
@@ -10698,6 +10798,8 @@ def foreign_repos_2_url(sbox):
   svntest.actions.verify_disk(wc_dir2, expected_disk, True)
 
 #----------------------------------------------------------------------
+@XFail()
+@Issue(1962)
 def merge_added_subtree(sbox):
   "merge added subtree"
 
@@ -10797,6 +10899,8 @@ def merge_added_subtree(sbox):
 
 #----------------------------------------------------------------------
 # Issue #3138
+@SkipUnless(server_has_mergeinfo)
+@Issue(3138)
 def merge_unknown_url(sbox):
   "merging an unknown url should return error"
 
@@ -10816,6 +10920,7 @@ def merge_unknown_url(sbox):
                                      "merge", url, wc_dir)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def reverse_merge_away_all_mergeinfo(sbox):
   "merges that remove all mergeinfo work"
 
@@ -10913,6 +11018,8 @@ def reverse_merge_away_all_mergeinfo(sbo
 # that don't exist at the start of a merge range shouldn't break the
 # merge'.  Specifically see
 # http://subversion.tigris.org/issues/show_bug.cgi?id=3067#desc5
+@SkipUnless(server_has_mergeinfo)
+@Issue([3138,3067])
 def dont_merge_revs_into_subtree_that_predate_it(sbox):
   "dont merge revs into a subtree that predate it"
 
@@ -11151,6 +11258,8 @@ def set_up_renamed_subtree(sbox):
 #----------------------------------------------------------------------
 # Test for issue #3174: 'Merge algorithm chokes on subtrees needing
 # special attention that have been renamed'
+@SkipUnless(server_has_mergeinfo)
+@Issue(3174)
 def merge_chokes_on_renamed_subtrees(sbox):
   "merge fails with renamed subtrees with mergeinfo"
 
@@ -11182,6 +11291,8 @@ def merge_chokes_on_renamed_subtrees(sbo
 
 #----------------------------------------------------------------------
 # Issue #3157
+@SkipUnless(server_has_mergeinfo)
+@Issue(3157)
 def dont_explicitly_record_implicit_mergeinfo(sbox):
   "don't explicitly record implicit mergeinfo"
 
@@ -11549,6 +11660,7 @@ def dont_explicitly_record_implicit_merg
 
 #----------------------------------------------------------------------
 # Test for issue where merging a change to a broken link fails
+@SkipUnless(svntest.main.is_posix_os)
 def merge_broken_link(sbox):
   "merge with broken symlinks in target"
 
@@ -11578,6 +11690,8 @@ def merge_broken_link(sbox):
 #----------------------------------------------------------------------
 # Test for issue #3199 'Subtree merges broken when required ranges
 # don't intersect with merge target'
+@SkipUnless(server_has_mergeinfo)
+@Issue(3199)
 def subtree_merges_dont_intersect_with_targets(sbox):
   "subtree ranges might not intersect with target"
 
@@ -11892,6 +12006,8 @@ def subtree_merges_dont_intersect_with_t
 #----------------------------------------------------------------------
 # Some more tests for issue #3067 'subtrees that don't exist at the start
 # or end of a merge range shouldn't break the merge'
+@Issue(3067)
+@SkipUnless(server_has_mergeinfo)
 def subtree_source_missing_in_requested_range(sbox):
   "subtree merge source might not exist"
 
@@ -12227,6 +12343,8 @@ def subtree_source_missing_in_requested_
 # or end of a merge range shouldn't break the merge'
 #
 # See http://subversion.tigris.org/issues/show_bug.cgi?id=3067#desc34
+@Issue(3067)
+@SkipUnless(server_has_mergeinfo)
 def subtrees_with_empty_mergeinfo(sbox):
   "mergeinfo not set on subtree with empty mergeinfo"
 
@@ -12278,6 +12396,7 @@ def subtrees_with_empty_mergeinfo(sbox):
 #----------------------------------------------------------------------
 # Test for issue #3240 'commits to subtrees added by merge
 # corrupt working copy and repos'.
+@Issue(3240)
 def commit_to_subtree_added_by_merge(sbox):
   "commits to subtrees added by merge wreak havoc"
 
@@ -12519,6 +12638,7 @@ def del_sched_add_hist_file(sbox):
   os.chdir(saved_cwd)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def subtree_merges_dont_cause_spurious_conflicts(sbox):
   "subtree merges dont cause spurious conflicts"
 
@@ -12745,6 +12865,8 @@ def subtree_merges_dont_cause_spurious_c
 
 #----------------------------------------------------------------------
 # Test for yet another variant of issue #3067.
+@Issue(3067)
+@SkipUnless(server_has_mergeinfo)
 def merge_target_and_subtrees_need_nonintersecting_ranges(sbox):
   "target and subtrees need nonintersecting revs"
 
@@ -12912,6 +13034,7 @@ def merge_target_and_subtrees_need_nonin
                                        None, 1)
 
 #----------------------------------------------------------------------
+@Issue(3250)
 def merge_two_edits_to_same_prop(sbox):
   "merge two successive edits to the same property"
 
@@ -13050,6 +13173,7 @@ def merge_an_eol_unification_and_set_svn
   # nor even raise a conflict.
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def merge_adds_mergeinfo_correctly(sbox):
   "merge adds mergeinfo to subtrees correctly"
 
@@ -13314,6 +13438,7 @@ def merge_adds_mergeinfo_correctly(sbox)
                                        None, 1)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def natural_history_filtering(sbox):
   "natural history filtering permits valid mergeinfo"
 
@@ -13598,6 +13723,8 @@ def natural_history_filtering(sbox):
                                        None, 1)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
+@Issue(3067)
 def subtree_gets_changes_even_if_ultimately_deleted(sbox):
   "subtree gets changes even if ultimately deleted"
 
@@ -13730,6 +13857,7 @@ def subtree_gets_changes_even_if_ultimat
                                        None, None, None, None, None, 1, 0)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def no_self_referential_filtering_on_added_path(sbox):
   "no self referential filtering on added path"
 
@@ -13878,6 +14006,8 @@ def no_self_referential_filtering_on_add
 #----------------------------------------------------------------------
 # Test for issue #3324
 # http://subversion.tigris.org/issues/show_bug.cgi?id=3324
+@Issue(3324)
+@SkipUnless(server_has_mergeinfo)
 def merge_range_prior_to_rename_source_existence(sbox):
   "merge prior to rename src existence still dels src"
 
@@ -14291,6 +14421,7 @@ def set_up_natural_history_gap(sbox):
   return wc_disk, wc_status
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def dont_merge_gaps_in_history(sbox):
   "mergeinfo aware merges ignore natural history gaps"
 
@@ -14383,6 +14514,8 @@ def dont_merge_gaps_in_history(sbox):
 #----------------------------------------------------------------------
 # Test for issue #3432 'Merge can record mergeinfo from natural history
 # gaps'.  See http://subversion.tigris.org/issues/show_bug.cgi?id=3432
+@Issue(3432)
+@SkipUnless(server_has_mergeinfo)
 def handle_gaps_in_implicit_mergeinfo(sbox):
   "correctly consider natural history gaps"
 
@@ -14519,6 +14652,8 @@ def handle_gaps_in_implicit_mergeinfo(sb
 
 #----------------------------------------------------------------------
 # Test for issue #3323 'Mergeinfo deleted by a merge should disappear'
+@Issue(3323)
+@SkipUnless(server_has_mergeinfo)
 def mergeinfo_deleted_by_a_merge_should_disappear(sbox):
   "mergeinfo deleted by a merge should disappear"
 
@@ -14641,6 +14776,7 @@ def mergeinfo_deleted_by_a_merge_should_
 # File merge optimization caused segfault during noop file merge
 # when multiple ranges are eligible for merge, see
 # http://svn.haxx.se/dev/archive-2009-05/0363.shtml
+@SkipUnless(server_has_mergeinfo)
 def noop_file_merge(sbox):
   "noop file merge does not segfault"
 
@@ -14689,6 +14825,7 @@ def noop_file_merge(sbox):
                                      chi_COPY_path)
 
 #----------------------------------------------------------------------
+@Issue(2690)
 def copy_then_replace_via_merge(sbox):
   "copy then replace via merge"
   # Testing issue #2690 with deleted/added/replaced files and subdirs.
@@ -14788,6 +14925,7 @@ def copy_then_replace_via_merge(sbox):
                                 None, branch_J)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def record_only_merge(sbox):
   "record only merge applies mergeinfo diffs"
 
@@ -14980,6 +15118,7 @@ def record_only_merge(sbox):
 # doesn't work'
 #
 # This test is marked as XFail until issue #3514 is fixed.
+@Issue(3514)
 def merge_automatic_conflict_resolution(sbox):
   "automatic conflict resolutions work with merge"
 
@@ -15167,6 +15306,7 @@ def merge_automatic_conflict_resolution(
 #----------------------------------------------------------------------
 # Test for issue #3440 'Skipped paths get incorrect override mergeinfo
 # during merge'.
+@Issue(3440)
 def skipped_files_get_correct_mergeinfo(sbox):
   "skipped files get correct mergeinfo set"
 
@@ -15282,6 +15422,7 @@ def skipped_files_get_correct_mergeinfo(
 #----------------------------------------------------------------------
 # Test for issue #3115 'Case only renames resulting from merges don't
 # work or break the WC on case-insensitive file systems'.
+@Issue(3115)
 def committed_case_only_move_and_revert(sbox):
   "committed case only move causes revert to fail"
 
@@ -15439,6 +15580,7 @@ def committed_case_only_move_and_revert(
 #----------------------------------------------------------------------
 # This is a test for issue #3221 'Unable to merge into working copy of
 # deleted branch'.
+@Issue(3221)
 def merge_into_wc_for_deleted_branch(sbox):
   "merge into WC of deleted branch should work"
 
@@ -15633,6 +15775,7 @@ def foreign_repos_del_and_props(sbox):
 #----------------------------------------------------------------------
 # Test for issue #3642 'immediate depth merges don't create proper subtree
 # mergeinfo'. See http://subversion.tigris.org/issues/show_bug.cgi?id=3642
+@Issue(3642)
 def immediate_depth_merge_creates_minimal_subtree_mergeinfo(sbox):
   "no spurious mergeinfo from immediate depth merges"
 
@@ -15698,6 +15841,7 @@ def immediate_depth_merge_creates_minima
 #----------------------------------------------------------------------
 # Test for issue #3646 'cyclic --record-only merges create self-referential
 # mergeinfo'
+@Issue(3646)
 def record_only_merge_creates_self_referential_mergeinfo(sbox):
   "merge creates self referential mergeinfo"
 
@@ -15792,6 +15936,7 @@ def record_only_merge_creates_self_refer
 #----------------------------------------------------------------------
 # Test for issue #3657 'dav update report handler in skelta mode can cause
 # spurious conflicts'.
+@Issue(3657)
 def dav_skelta_mode_causes_spurious_conflicts(sbox):
   "dav skelta mode can cause spurious conflicts"
 
@@ -16047,6 +16192,7 @@ def merge_into_locally_added_directory(s
 #----------------------------------------------------------------------
 # Test for issue #2915 'Handle mergeinfo for subtrees missing due to removal
 # by non-svn command'
+@Issue(2915)
 def merge_with_os_deleted_subtrees(sbox):
   "merge tracking fails if target missing subtrees"
 
@@ -16129,6 +16275,7 @@ def merge_with_os_deleted_subtrees(sbox)
 # Test for issue #3668 'inheritance can result in self-referential
 # mergeinfo' and issue #3669 'inheritance can result in mergeinfo
 # describing nonexistent sources'
+@Issue(3668)
 def no_self_referential_or_nonexistent_inherited_mergeinfo(sbox):
   "don't inherit bogus mergeinfo"
 
@@ -16255,6 +16402,8 @@ def no_self_referential_or_nonexistent_i
 
 #----------------------------------------------------------------------
 # Test for issue #3756 'subtree merge can inherit invalid working mergeinfo'.
+@XFail()
+@Issue(3756)
 def subtree_merges_inherit_invalid_working_mergeinfo(sbox):
   "don't inherit bogus working mergeinfo"
 
@@ -16320,6 +16469,9 @@ def subtree_merges_inherit_invalid_worki
 #----------------------------------------------------------------------
 # Test for issue #3686 'executable flag not correctly set on merge'
 # See http://subversion.tigris.org/issues/show_bug.cgi?id=3686
+@XFail()
+@Issue(3686)
+@SkipUnless(svntest.main.is_posix_os)
 def merge_change_to_file_with_executable(sbox):
   "executable flag is maintained during binary merge"
 
@@ -16408,178 +16560,108 @@ def merge_change_to_file_with_executable
 
 # list all tests here, starting with None:
 test_list = [ None,
-              SkipUnless(textual_merges_galore,
-                         server_has_mergeinfo),
-              SkipUnless(add_with_history,
-                         server_has_mergeinfo),
-              SkipUnless(simple_property_merges,
-                         server_has_mergeinfo),
+              textual_merges_galore,
+              add_with_history,
+              simple_property_merges,
               merge_with_implicit_target_using_r,
               merge_with_implicit_target_using_c,
               merge_with_implicit_target_and_revs,
               merge_similar_unrelated_trees,
               merge_with_prev,
-              SkipUnless(merge_binary_file,
-                         server_has_mergeinfo),
-              SkipUnless(merge_one_file_using_r,
-                         server_has_mergeinfo),
-              SkipUnless(merge_one_file_using_c,
-                         server_has_mergeinfo),
-              SkipUnless(merge_one_file_using_implicit_revs,
-                         server_has_mergeinfo),
-              SkipUnless(merge_record_only,
-                         server_has_mergeinfo),
-              SkipUnless(merge_in_new_file_and_diff,
-                         server_has_mergeinfo),
-              SkipUnless(merge_skips_obstructions,
-                         server_has_mergeinfo),
-              SkipUnless(merge_into_missing,
-                         server_has_mergeinfo),
-              SkipUnless(dry_run_adds_file_with_prop,
-                         server_has_mergeinfo),
+              merge_binary_file,
+              merge_one_file_using_r,
+              merge_one_file_using_c,
+              merge_one_file_using_implicit_revs,
+              merge_record_only,
+              merge_in_new_file_and_diff,
+              merge_skips_obstructions,
+              merge_into_missing,
+              dry_run_adds_file_with_prop,
               merge_binary_with_common_ancestry,
-              SkipUnless(merge_funny_chars_on_path,
-                         server_has_mergeinfo),
+              merge_funny_chars_on_path,
               merge_keyword_expansions,
               merge_prop_change_to_deleted_target,
               merge_file_with_space_in_its_name,
               merge_dir_branches,
-              SkipUnless(safe_property_merge,
-                         server_has_mergeinfo),
-              SkipUnless(property_merge_from_branch,
-                         server_has_mergeinfo),
+              safe_property_merge,
+              property_merge_from_branch,
               property_merge_undo_redo,
-              SkipUnless(cherry_pick_text_conflict,
-                         server_has_mergeinfo),
+              cherry_pick_text_conflict,
               merge_file_replace,
-              SkipUnless(merge_dir_replace,
-                         server_has_mergeinfo),
+              merge_dir_replace,
               merge_dir_and_file_replace,
               merge_file_replace_to_mixed_rev_wc,
-              SkipUnless(merge_ignore_whitespace,
-                         server_has_mergeinfo),
-              SkipUnless(merge_ignore_eolstyle,
-                         server_has_mergeinfo),
-              SkipUnless(merge_conflict_markers_matching_eol,
-                         server_has_mergeinfo),
-              SkipUnless(merge_eolstyle_handling,
-                         server_has_mergeinfo),
-              SkipUnless(avoid_repeated_merge_using_inherited_merge_info,
-                         server_has_mergeinfo),
-              SkipUnless(avoid_repeated_merge_on_subtree_with_merge_info,
-                         server_has_mergeinfo),
-              SkipUnless(obey_reporter_api_semantics_while_doing_subtree_merges,
-                         server_has_mergeinfo),
-              SkipUnless(mergeinfo_inheritance,
-                         server_has_mergeinfo),
-              SkipUnless(mergeinfo_elision,
-                         server_has_mergeinfo),
-              SkipUnless(mergeinfo_inheritance_and_discontinuous_ranges,
-                         server_has_mergeinfo),
-              SkipUnless(merge_to_target_with_copied_children,
-                         server_has_mergeinfo),
-              SkipUnless(merge_to_switched_path,
-                         server_has_mergeinfo),
-              SkipUnless(merge_to_path_with_switched_children,
-                         server_has_mergeinfo),
+              merge_ignore_whitespace,
+              merge_ignore_eolstyle,
+              merge_conflict_markers_matching_eol,
+              merge_eolstyle_handling,
+              avoid_repeated_merge_using_inherited_merge_info,
+              avoid_repeated_merge_on_subtree_with_merge_info,
+              obey_reporter_api_semantics_while_doing_subtree_merges,
+              mergeinfo_inheritance,
+              mergeinfo_elision,
+              mergeinfo_inheritance_and_discontinuous_ranges,
+              merge_to_target_with_copied_children,
+              merge_to_switched_path,
+              merge_to_path_with_switched_children,
               merge_with_implicit_target_file,
-              SkipUnless(empty_mergeinfo,
-                         server_has_mergeinfo),
-              SkipUnless(prop_add_to_child_with_mergeinfo,
-                         server_has_mergeinfo),
+              empty_mergeinfo,
+              prop_add_to_child_with_mergeinfo,
               foreign_repos_does_not_update_mergeinfo,
-              XFail(avoid_reflected_revs),
-              SkipUnless(update_loses_mergeinfo,
-                         server_has_mergeinfo),
-              SkipUnless(merge_loses_mergeinfo,
-                         server_has_mergeinfo),
+              avoid_reflected_revs,
+              update_loses_mergeinfo,
+              merge_loses_mergeinfo,
               single_file_replace_style_merge_capability,
-              SkipUnless(merge_to_out_of_date_target,
-                         server_has_mergeinfo),
-              SkipUnless(merge_with_depth_files,
-                         server_has_mergeinfo),
-              SkipUnless(merge_away_subtrees_noninheritable_ranges,
-                         server_has_mergeinfo),
-              SkipUnless(merge_to_sparse_directories,
-                         server_has_mergeinfo),
-              SkipUnless(merge_old_and_new_revs_from_renamed_dir,
-                         server_has_mergeinfo),
-              SkipUnless(merge_with_child_having_different_rev_ranges_to_merge,
-                         server_has_mergeinfo),
-              SkipUnless(merge_old_and_new_revs_from_renamed_file,
-                         server_has_mergeinfo),
-              SkipUnless(merge_with_auto_rev_range_detection,
-                         server_has_mergeinfo),
-              SkipUnless(cherry_picking,
-                         server_has_mergeinfo),
-              SkipUnless(propchange_of_subdir_raises_conflict,
-                         server_has_mergeinfo),
-              SkipUnless(reverse_merge_prop_add_on_child,
-                         server_has_mergeinfo),
-              XFail(merge_target_with_non_inheritable_mergeinfo),
-              SkipUnless(self_reverse_merge,
-                         server_has_mergeinfo),
-              SkipUnless(ignore_ancestry_and_mergeinfo,
-                         server_has_mergeinfo),
-              SkipUnless(merge_from_renamed_branch_fails_while_avoiding_repeat_merge,
-                         server_has_mergeinfo),
-              SkipUnless(merge_source_normalization_and_subtree_merges,
-                         server_has_mergeinfo),
-              SkipUnless(new_subtrees_should_not_break_merge,
-                         server_has_mergeinfo),
-              SkipUnless(dont_add_mergeinfo_from_own_history,
-                         server_has_mergeinfo),
+              merge_to_out_of_date_target,
+              merge_with_depth_files,
+              merge_away_subtrees_noninheritable_ranges,
+              merge_to_sparse_directories,
+              merge_old_and_new_revs_from_renamed_dir,
+              merge_with_child_having_different_rev_ranges_to_merge,
+              merge_old_and_new_revs_from_renamed_file,
+              merge_with_auto_rev_range_detection,
+              cherry_picking,
+              propchange_of_subdir_raises_conflict,
+              reverse_merge_prop_add_on_child,
+              merge_target_with_non_inheritable_mergeinfo,
+              self_reverse_merge,
+              ignore_ancestry_and_mergeinfo,
+              merge_from_renamed_branch_fails_while_avoiding_repeat_merge,
+              merge_source_normalization_and_subtree_merges,
+              new_subtrees_should_not_break_merge,
+              dont_add_mergeinfo_from_own_history,
               merge_range_predates_history,
               foreign_repos,
               foreign_repos_uuid,
               foreign_repos_2_url,
-              XFail(merge_added_subtree),
-              SkipUnless(merge_unknown_url,
-                         server_has_mergeinfo),
-              SkipUnless(reverse_merge_away_all_mergeinfo,
-                         server_has_mergeinfo),
-              SkipUnless(dont_merge_revs_into_subtree_that_predate_it,
-                         server_has_mergeinfo),
-              SkipUnless(merge_chokes_on_renamed_subtrees,
-                         server_has_mergeinfo),
-              SkipUnless(dont_explicitly_record_implicit_mergeinfo,
-                         server_has_mergeinfo),
-              SkipUnless(merge_broken_link, svntest.main.is_posix_os),
-              SkipUnless(subtree_merges_dont_intersect_with_targets,
-                         server_has_mergeinfo),
-              SkipUnless(subtree_source_missing_in_requested_range,
-                         server_has_mergeinfo),
-              SkipUnless(subtrees_with_empty_mergeinfo, server_has_mergeinfo),
+              merge_added_subtree,
+              merge_unknown_url,
+              reverse_merge_away_all_mergeinfo,
+              dont_merge_revs_into_subtree_that_predate_it,
+              merge_chokes_on_renamed_subtrees,
+              dont_explicitly_record_implicit_mergeinfo,
+              merge_broken_link,
+              subtree_merges_dont_intersect_with_targets,
+              subtree_source_missing_in_requested_range,
+              subtrees_with_empty_mergeinfo,
               commit_to_subtree_added_by_merge,
               del_identical_file,
               del_sched_add_hist_file,
-              SkipUnless(subtree_merges_dont_cause_spurious_conflicts,
-                         server_has_mergeinfo),
-              SkipUnless(merge_target_and_subtrees_need_nonintersecting_ranges,
-                         server_has_mergeinfo),
+              subtree_merges_dont_cause_spurious_conflicts,
+              merge_target_and_subtrees_need_nonintersecting_ranges,
               merge_two_edits_to_same_prop,
               merge_an_eol_unification_and_set_svn_eol_style,
-              SkipUnless(merge_adds_mergeinfo_correctly,
-                         server_has_mergeinfo),
-              SkipUnless(natural_history_filtering,
-                         server_has_mergeinfo),
-              SkipUnless(subtree_gets_changes_even_if_ultimately_deleted,
-                         server_has_mergeinfo),
-              SkipUnless(no_self_referential_filtering_on_added_path,
-                         server_has_mergeinfo),
-              SkipUnless(merge_range_prior_to_rename_source_existence,
-                         server_has_mergeinfo),
-              SkipUnless(dont_merge_gaps_in_history,
-                         server_has_mergeinfo),
-              SkipUnless(mergeinfo_deleted_by_a_merge_should_disappear,
-                         server_has_mergeinfo),
-              SkipUnless(noop_file_merge,
-                         server_has_mergeinfo),
-              SkipUnless(handle_gaps_in_implicit_mergeinfo,
-                         server_has_mergeinfo),
+              merge_adds_mergeinfo_correctly,
+              natural_history_filtering,
+              subtree_gets_changes_even_if_ultimately_deleted,
+              no_self_referential_filtering_on_added_path,
+              merge_range_prior_to_rename_source_existence,
+              dont_merge_gaps_in_history,
+              mergeinfo_deleted_by_a_merge_should_disappear,
+              noop_file_merge,
+              handle_gaps_in_implicit_mergeinfo,
               copy_then_replace_via_merge,
-              SkipUnless(record_only_merge,
-                         server_has_mergeinfo),
+              record_only_merge,
               merge_automatic_conflict_resolution,
               skipped_files_get_correct_mergeinfo,
               committed_case_only_move_and_revert,
@@ -16592,9 +16674,8 @@ test_list = [ None,
               merge_into_locally_added_directory,
               merge_with_os_deleted_subtrees,
               no_self_referential_or_nonexistent_inherited_mergeinfo,
-              XFail(subtree_merges_inherit_invalid_working_mergeinfo),
-              XFail(SkipUnless(merge_change_to_file_with_executable,
-              	               svntest.main.is_posix_os)),
+              subtree_merges_inherit_invalid_working_mergeinfo,
+              merge_change_to_file_with_executable,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/merge_tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/merge_tree_conflict_tests.py?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/merge_tree_conflict_tests.py (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/merge_tree_conflict_tests.py Mon Feb  7 19:18:29 2011
@@ -34,10 +34,12 @@ from svntest import main, wc, verify, ac
 
 # (abbreviation)
 Item = wc.StateItem
-XFail = svntest.testcase.XFail
-Wimp = svntest.testcase.Wimp
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 
 from svntest.main import SVN_PROP_MERGEINFO
 from svntest.main import server_has_mergeinfo
@@ -48,6 +50,7 @@ from merge_tests import svn_copy
 from merge_tests import svn_merge
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def delete_file_and_dir(sbox):
   "merge that deletes items"
 
@@ -160,6 +163,8 @@ def delete_file_and_dir(sbox):
 
 #----------------------------------------------------------------------
 # This is a regression for issue #1176.
+@Issue(1176)
+@SkipUnless(server_has_mergeinfo)
 def merge_catches_nonexistent_target(sbox):
   "merge should not die if a target file is absent"
 
@@ -262,6 +267,7 @@ def merge_catches_nonexistent_target(sbo
   svntest.actions.run_and_verify_unquiet_status('', expected_status)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def merge_tree_deleted_in_target(sbox):
   "merge on deleted directory in target"
 
@@ -338,6 +344,8 @@ def merge_tree_deleted_in_target(sbox):
 #----------------------------------------------------------------------
 # Regression test for issue #2403: Incorrect 3-way merge of "added"
 # binary file which already exists (unmodified) in the WC
+@SkipUnless(server_has_mergeinfo)
+@Issue(2403)
 def three_way_merge_add_of_existing_binary_file(sbox):
   "3-way merge of 'file add' into existing binary"
 
@@ -421,6 +429,7 @@ def three_way_merge_add_of_existing_bina
 
 #----------------------------------------------------------------------
 # Issue #2515
+@Issue(2515)
 def merge_added_dir_to_deleted_in_target(sbox):
   "merge an added dir on a deleted dir in target"
 
@@ -480,6 +489,8 @@ def merge_added_dir_to_deleted_in_target
 
 #----------------------------------------------------------------------
 # Issue 2584
+@Issue(2584)
+@SkipUnless(server_has_mergeinfo)
 def merge_add_over_versioned_file_conflicts(sbox):
   "conflict from merge of add over versioned file"
 
@@ -537,6 +548,8 @@ def merge_add_over_versioned_file_confli
                                        expected_skip)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
+@Issue(2829)
 def mergeinfo_recording_in_skipped_merge(sbox):
   "mergeinfo recording in skipped merge"
 
@@ -722,6 +735,7 @@ def del_differing_file(sbox):
 
 #----------------------------------------------------------------------
 # This test used to involve tree conflicts, hence its name.
+@Issue(3146)
 def tree_conflicts_and_obstructions(sbox):
   "tree conflicts and obstructions"
 
@@ -895,6 +909,8 @@ def tree_conflicts_on_merge_local_ci_4_2
                         expected_skip) ], True)
 
 #----------------------------------------------------------------------
+@XFail()
+@Issue(2282)
 def tree_conflicts_on_merge_local_ci_5_1(sbox):
   "tree conflicts 5.1: leaf edit, tree del"
 
@@ -946,6 +962,8 @@ def tree_conflicts_on_merge_local_ci_5_1
                         expected_skip) ], True)
 
 #----------------------------------------------------------------------
+@XFail()
+@Issue(2282)
 def tree_conflicts_on_merge_local_ci_5_2(sbox):
   "tree conflicts 5.2: leaf del, tree del"
 
@@ -1173,6 +1191,8 @@ def tree_conflicts_on_merge_no_local_ci_
              ) ], False)
 
 #----------------------------------------------------------------------
+@XFail()
+@Issue(2282)
 def tree_conflicts_on_merge_no_local_ci_5_2(sbox):
   "tree conflicts 5.2: leaf del (no ci), tree del"
 
@@ -1653,6 +1673,8 @@ def merge_replace_setup(sbox):
   return expected_disk, expected_status
 
 #----------------------------------------------------------------------
+# ra_serf causes duplicate notifications with this test:
+@XFail(svntest.main.is_ra_type_dav_serf)
 def merge_replace_causes_tree_conflict(sbox):
   "replace vs. edit tree-conflicts"
 
@@ -1727,6 +1749,7 @@ def merge_replace_causes_tree_conflict(s
   actions.run_and_verify_status(wc_dir, expected_status)
 
 #----------------------------------------------------------------------
+@XFail()
 def merge_replace_causes_tree_conflict2(sbox):
   "replace vs. delete tree-conflicts"
 
@@ -1876,37 +1899,29 @@ def merge_replace_causes_tree_conflict2(
 
 # list all tests here, starting with None:
 test_list = [ None,
-              SkipUnless(delete_file_and_dir,
-                         server_has_mergeinfo),
-              SkipUnless(merge_catches_nonexistent_target,
-                         server_has_mergeinfo),
-              SkipUnless(merge_tree_deleted_in_target,
-                         server_has_mergeinfo),
-              SkipUnless(three_way_merge_add_of_existing_binary_file,
-                         server_has_mergeinfo),
+              delete_file_and_dir,
+              merge_catches_nonexistent_target,
+              merge_tree_deleted_in_target,
+              three_way_merge_add_of_existing_binary_file,
               merge_added_dir_to_deleted_in_target,
-              SkipUnless(merge_add_over_versioned_file_conflicts,
-                         server_has_mergeinfo),
-              SkipUnless(mergeinfo_recording_in_skipped_merge,
-                         server_has_mergeinfo),
+              merge_add_over_versioned_file_conflicts,
+              mergeinfo_recording_in_skipped_merge,
               del_differing_file,
               tree_conflicts_and_obstructions,
               tree_conflicts_on_merge_local_ci_4_1,
               tree_conflicts_on_merge_local_ci_4_2,
-              XFail(tree_conflicts_on_merge_local_ci_5_1),
-              XFail(tree_conflicts_on_merge_local_ci_5_2),
+              tree_conflicts_on_merge_local_ci_5_1,
+              tree_conflicts_on_merge_local_ci_5_2,
               tree_conflicts_on_merge_local_ci_6,
               tree_conflicts_on_merge_no_local_ci_4_1,
               tree_conflicts_on_merge_no_local_ci_4_2,
               tree_conflicts_on_merge_no_local_ci_5_1,
-              XFail(tree_conflicts_on_merge_no_local_ci_5_2),
+              tree_conflicts_on_merge_no_local_ci_5_2,
               tree_conflicts_on_merge_no_local_ci_6,
               tree_conflicts_merge_edit_onto_missing,
               tree_conflicts_merge_del_onto_missing,
-              # ra_serf causes duplicate notifications with this test:
-              XFail(merge_replace_causes_tree_conflict,
-                    svntest.main.is_ra_type_dav_serf),
-              XFail(merge_replace_causes_tree_conflict2),
+              merge_replace_causes_tree_conflict,
+              merge_replace_causes_tree_conflict2,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/mergeinfo_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/mergeinfo_tests.py?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/mergeinfo_tests.py (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/mergeinfo_tests.py Mon Feb  7 19:18:29 2011
@@ -33,9 +33,12 @@ from svntest import wc
 
 # (abbreviation)
 Item = wc.StateItem
-XFail = svntest.testcase.XFail
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 exp_noop_up_out = svntest.actions.expected_noop_update_output
 
 from svntest.main import SVN_PROP_MERGEINFO
@@ -80,6 +83,7 @@ def mergeinfo(sbox):
   svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
                                            ['1'], sbox.repo_url, wc_dir)
 
+@SkipUnless(server_has_mergeinfo)
 def explicit_mergeinfo_source(sbox):
   "'mergeinfo' with source selection"
 
@@ -109,6 +113,7 @@ def explicit_mergeinfo_source(sbox):
   svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
                                            ['1'], G_path, H_path)
 
+@SkipUnless(server_has_mergeinfo)
 def mergeinfo_non_source(sbox):
   "'mergeinfo' with uninteresting source selection"
 
@@ -130,10 +135,11 @@ def mergeinfo_non_source(sbox):
 
   # Check on a source we haven't "merged" from.
   svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
-                                           ['2'], H2_url, H_path)
+                                           [], H2_url, H_path)
 
 #----------------------------------------------------------------------
 # Issue #3138
+@Issue(3138)
 def mergeinfo_on_unknown_url(sbox):
   "mergeinfo of an unknown url should return error"
 
@@ -156,6 +162,7 @@ def mergeinfo_on_unknown_url(sbox):
 # Test for issue #3126 'svn mergeinfo shows too few or too many
 # eligible revisions'.  Specifically
 # http://subversion.tigris.org/issues/show_bug.cgi?id=3126#desc5.
+@Issue(3126)
 def non_inheritable_mergeinfo(sbox):
   "non-inheritable mergeinfo shows as merged"
 
@@ -226,6 +233,8 @@ def non_inheritable_mergeinfo(sbox):
 #
 # Test for issue #3242 'Subversion demands unnecessary access to parent
 # directories of operations'
+@Issue(3242)
+@SkipUnless(server_has_mergeinfo)
 def recursive_mergeinfo(sbox):
   "test svn mergeinfo -R"
 
@@ -378,6 +387,7 @@ def recursive_mergeinfo(sbox):
     '--show-revs', 'merged')
 
 # Test for issue #3180 'svn mergeinfo ignores peg rev for WC target'.
+@SkipUnless(server_has_mergeinfo)
 def mergeinfo_on_pegged_wc_path(sbox):
   "svn mergeinfo on pegged working copy target"
 
@@ -487,13 +497,12 @@ def mergeinfo_on_pegged_wc_path(sbox):
 test_list = [ None,
               no_mergeinfo,
               mergeinfo,
-              SkipUnless(explicit_mergeinfo_source, server_has_mergeinfo),
-              XFail(mergeinfo_non_source, server_has_mergeinfo),
+              explicit_mergeinfo_source,
+              mergeinfo_non_source,
               mergeinfo_on_unknown_url,
               non_inheritable_mergeinfo,
-              SkipUnless(recursive_mergeinfo, server_has_mergeinfo),
-              SkipUnless(mergeinfo_on_pegged_wc_path,
-                         server_has_mergeinfo),
+              recursive_mergeinfo,
+              mergeinfo_on_pegged_wc_path,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/obliterate_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/obliterate_tests.py?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/obliterate_tests.py (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/obliterate_tests.py Mon Feb  7 19:18:29 2011
@@ -33,15 +33,26 @@ from svntest import main, actions, wc, o
 
 # (abbreviation)
 Item = wc.StateItem
-XFail = svntest.testcase.XFail
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 
 
 ######################################################################
 # Test utilities
 #
 
+def supports_obliterate():
+  if svntest.main.is_ra_type_file() and not svntest.main.is_fs_type_fsfs():
+    code, output, error = svntest.main.run_svn(None, "help")
+    for line in output:
+      if line.find("obliterate") != -1:
+        return True
+  return False
+
 #obliteration_dirs = ['f-mod', 'f-add', 'f-del', 'f-rpl', 'f-mov']
 obliteration_dirs = ['f-mod']
 
@@ -118,6 +129,7 @@ def hook_enable(repo):
 
 #----------------------------------------------------------------------
 
+@SkipUnless(supports_obliterate)
 def obliterate_1(sbox):
   "test svn obliterate"
 
@@ -155,6 +167,7 @@ def obliterate_1(sbox):
   except:
     pass
 
+@SkipUnless(supports_obliterate)
 def pre_obliterate_hook(sbox):
   "test the pre-obliterate hook"
 
@@ -200,19 +213,11 @@ def pre_obliterate_hook(sbox):
 ########################################################################
 # Run the tests
 
-def supports_obliterate():
-  if svntest.main.is_ra_type_file() and not svntest.main.is_fs_type_fsfs():
-    code, output, error = svntest.main.run_svn(None, "help")
-    for line in output:
-      if line.find("obliterate") != -1:
-        return True
-  return False
-
 
 # list all tests here, starting with None:
 test_list = [ None,
-              SkipUnless(obliterate_1, supports_obliterate),
-              SkipUnless(pre_obliterate_hook, supports_obliterate),
+              obliterate_1,
+              pre_obliterate_hook,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/patch_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/patch_tests.py?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/patch_tests.py (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/patch_tests.py Mon Feb  7 19:18:29 2011
@@ -41,10 +41,13 @@ from svntest import wc
 from svntest.main import SVN_PROP_MERGEINFO, is_os_windows
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
-XFail = svntest.testcase.XFail
 
 def make_patch_path(sbox, name='my.patch'):
   dir = sbox.add_wc_path('patches')
@@ -3424,11 +3427,14 @@ def patch_strip_cwd(sbox):
   "patch --strip propchanges cwd"
   return patch_one_property(sbox, True)
 
+@XFail()
 def patch_set_prop_no_eol(sbox):
   "patch doesn't append newline to properties"
   return patch_one_property(sbox, False)
 
 # Regression test for issue #3697
+@SkipUnless(svntest.main.is_posix_os)
+@Issue(3697)
 def patch_add_symlink(sbox):
   "patch that adds a symlink"
 
@@ -3511,8 +3517,8 @@ test_list = [ None,
               patch_old_target_names,
               patch_reverse_revert,
               patch_strip_cwd,
-              XFail(patch_set_prop_no_eol),
-              SkipUnless(patch_add_symlink, svntest.main.is_posix_os),
+              patch_set_prop_no_eol,
+              patch_add_symlink,
             ]
 
 if __name__ == '__main__':

Modified: subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/prop_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/prop_tests.py?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/prop_tests.py (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/prop_tests.py Mon Feb  7 19:18:29 2011
@@ -33,9 +33,12 @@ import svntest
 from svntest.main import SVN_PROP_MERGEINFO
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
-XFail = svntest.testcase.XFail
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
 
 def is_non_posix_and_non_windows_os():
@@ -373,6 +376,7 @@ def update_conflict_props(sbox):
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
 #----------------------------------------------------------------------
+@Issue(2608)
 def commit_conflict_dirprops(sbox):
   "commit with conflicting dirprops"
 
@@ -406,7 +410,7 @@ def commit_conflict_dirprops(sbox):
 # svn_wc_props_modified_p and svn_wc_transmit_prop_deltas to *ignore*
 # leftover base-props when a file is scheduled for replacement.  (When
 # we svn_wc_add a file, it starts life with no working props.)
-
+@Issue(742)
 def commit_replacement_props(sbox):
   "props work when committing a replacement"
 
@@ -525,7 +529,7 @@ def revert_replacement_props(sbox):
                                         1)
 
 #----------------------------------------------------------------------
-
+@Issues([920,2065])
 def inappropriate_props(sbox):
   "try to set inappropriate props"
 
@@ -728,7 +732,7 @@ def inappropriate_props(sbox):
 # Issue #976.  When copying a file, do not determine svn:executable
 # and svn:mime-type values as though the file is brand new, instead
 # use the copied file's property values.
-
+@Issue(976)
 def copy_inherits_special_props(sbox):
   "file copies inherit (not re-derive) special props"
 
@@ -790,7 +794,14 @@ def copy_inherits_special_props(sbox):
       raise svntest.verify.SVNUnexpectedOutput
 
 #----------------------------------------------------------------------
-
+# Test for issue #3086 'mod-dav-svn ignores pre-revprop-change failure
+# on revprop delete'
+#
+# If we learn how to write a pre-revprop-change hook for
+# non-Posix platforms, we won't have to skip here:
+@Skip(is_non_posix_and_non_windows_os)
+@Issue(3086)
+@XFail(svntest.main.is_ra_type_dav)
 def revprop_change(sbox):
   "set, get, and delete a revprop change"
 
@@ -1042,6 +1053,7 @@ def verify_output(expected_out, output, 
       raise svntest.Failure
     ln = ln + 1
 
+@Issue(1794)
 def recursive_base_wc_ops(sbox):
   "recursive property operations in BASE and WC"
 
@@ -1280,6 +1292,7 @@ def update_props_on_wc_root(sbox):
                                         None, None, None, None, None, 1)
 
 # test for issue 2743
+@Issue(2743)
 def props_on_replaced_file(sbox):
   """test properties on replaced files"""
 
@@ -1450,8 +1463,10 @@ def invalid_propnames(sbox):
 
   os.chdir(cwd)
 
+@SkipUnless(svntest.main.is_posix_os)
+@Issue(2581)
 def perms_on_symlink(sbox):
-  "issue #2581: propset shouldn't touch symlink perms"
+  "propset shouldn't touch symlink perms"
   sbox.build()
   # We can't just run commands on absolute paths in the usual way
   # (e.g., os.path.join(sbox.wc_dir, 'newdir')), because for some
@@ -1608,6 +1623,10 @@ def props_over_time(sbox):
           svntest.actions.run_and_verify_svn(None, plist_expected, [],
                                              'proplist', '-v', peg_path)
 
+
+# XFail the same reason revprop_change() is.
+@SkipUnless(svntest.main.server_enforces_date_syntax)
+@XFail(svntest.main.is_ra_type_dav)
 def invalid_propvalues(sbox):
   "test handling invalid svn:* property values"
 
@@ -1623,6 +1642,7 @@ def invalid_propvalues(sbox):
                                      'svn:date', 'Sat May 10 12:12:31 2008',
                                      repo_url)
 
+@Issue(3282)
 def same_replacement_props(sbox):
   "commit replacement props when same as old props"
   # issue #3282
@@ -1681,6 +1701,7 @@ def added_moved_file(sbox):
 
 
 # Issue 2220, deleting a non-existent property should error
+@Issue(2220)
 def delete_nonexistent_property(sbox):
   "remove a property which doesn't exist"
 
@@ -1695,6 +1716,7 @@ def delete_nonexistent_property(sbox):
                                      os.path.join(wc_dir, 'A', 'D', 'G'))
 
 #----------------------------------------------------------------------
+@Issue(3553)
 def post_revprop_change_hook(sbox):
   "post-revprop-change hook"
 
@@ -2052,6 +2074,7 @@ def atomic_over_ra(sbox):
 
 # Test for issue #3721 'redirection of svn propget output corrupted with
 # large property values'
+@Issue(3721)
 def propget_redirection(sbox):
   """pg of large text properties redirects properly"""
 
@@ -2351,10 +2374,7 @@ test_list = [ None,
               revert_replacement_props,
               inappropriate_props,
               copy_inherits_special_props,
-              # If we learn how to write a pre-revprop-change hook for
-              # non-Posix platforms, we won't have to skip here:
-              Skip(XFail(revprop_change, svntest.main.is_ra_type_dav),
-                   is_non_posix_and_non_windows_os),
+              revprop_change,
               prop_value_conversions,
               binary_props,
               recursive_base_wc_ops,
@@ -2365,12 +2385,10 @@ test_list = [ None,
               depthy_wc_proplist,
               depthy_url_proplist,
               invalid_propnames,
-              SkipUnless(perms_on_symlink, svntest.main.is_posix_os),
+              perms_on_symlink,
               remove_custom_ns_props,
               props_over_time,
-              # XFail the same reason revprop_change() is.
-              SkipUnless(XFail(invalid_propvalues, svntest.main.is_ra_type_dav),
-                    svntest.main.server_enforces_date_syntax),
+              invalid_propvalues,
               same_replacement_props,
               added_moved_file,
               delete_nonexistent_property,

Modified: subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/redirect_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/redirect_tests.py?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/redirect_tests.py (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/redirect_tests.py Mon Feb  7 19:18:29 2011
@@ -31,10 +31,12 @@ import os, re
 import svntest
 
 # (abbreviations)
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
-XFail = svntest.testcase.XFail
-Wimp = svntest.testcase.Wimp
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 
 # Regular expression which matches the redirection notification
 redirect_regex = re.compile(r"^Redirecting to URL '.*'")
@@ -66,7 +68,7 @@ def verify_url(wc_path, url, wc_path_is_
 #   Each test must return on success or raise on failure.
 
 #----------------------------------------------------------------------
-
+@SkipUnless(svntest.main.is_ra_type_dav)
 def temporary_redirect(sbox):
   "temporary redirect should error out"
 
@@ -88,7 +90,7 @@ def temporary_redirect(sbox):
                                              co_url + '/iota')
 
 #----------------------------------------------------------------------
-
+@SkipUnless(svntest.main.is_ra_type_dav)
 def redirected_checkout(sbox):
   "redirected checkout"
 
@@ -107,7 +109,7 @@ def redirected_checkout(sbox):
   verify_url(wc_dir, sbox.repo_url)
 
 #----------------------------------------------------------------------
-
+@SkipUnless(svntest.main.is_ra_type_dav)
 def redirected_update(sbox):
   "redirected update"
 
@@ -144,12 +146,9 @@ def redirected_update(sbox):
 
 # list all tests here, starting with None:
 test_list = [ None,
-              SkipUnless(temporary_redirect,
-                         svntest.main.is_ra_type_dav),
-              SkipUnless(redirected_checkout,
-                         svntest.main.is_ra_type_dav),
-              SkipUnless(redirected_update,
-                         svntest.main.is_ra_type_dav),
+              temporary_redirect,
+              redirected_checkout,
+              redirected_update,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/resolve_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/resolve_tests.py?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/resolve_tests.py (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/resolve_tests.py Mon Feb  7 19:18:29 2011
@@ -34,9 +34,12 @@ from svntest import wc
 
 # (abbreviation)
 Item = wc.StateItem
-XFail = svntest.testcase.XFail
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 
 from merge_tests import set_up_branch
 
@@ -103,6 +106,8 @@ def automatic_conflict_resolution(sbox):
 #----------------------------------------------------------------------
 # Test for issue #3707 'property conflicts not handled correctly by
 # svn resolve'.
+@Issue(3707)
+@XFail()
 def prop_conflict_resolution(sbox):
   "resolving prop conflicts"
 
@@ -246,7 +251,7 @@ def prop_conflict_resolution(sbox):
 # list all tests here, starting with None:
 test_list = [ None,
               automatic_conflict_resolution,
-              XFail(prop_conflict_resolution),
+              prop_conflict_resolution,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/resolved_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/resolved_tests.py?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/resolved_tests.py (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/resolved_tests.py Mon Feb  7 19:18:29 2011
@@ -32,9 +32,12 @@ import svntest
 from svntest import wc
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
-XFail = svntest.testcase.XFail
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
 
 from svntest.main import SVN_PROP_MERGEINFO, server_has_mergeinfo

Modified: subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/revert_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/revert_tests.py?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/revert_tests.py (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/revert_tests.py Mon Feb  7 19:18:29 2011
@@ -34,9 +34,12 @@ from svntest.actions import run_and_veri
 
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-XFail = svntest.testcase.XFail
-Wimp = svntest.testcase.Wimp
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
 
 
@@ -229,6 +232,7 @@ def revert_from_wc_root(sbox):
   svntest.actions.run_and_verify_status('', expected_output)
 
 
+@Issue(1663)
 def revert_reexpand_keyword(sbox):
   "revert reexpands manually contracted keyword"
 
@@ -289,6 +293,7 @@ def revert_reexpand_keyword(sbox):
 #----------------------------------------------------------------------
 # Regression test for issue #1775:
 # Should be able to revert a file with no properties i.e. no prop-base
+@Issue(1775)
 def revert_replaced_file_without_props(sbox):
   "revert a replaced file with no properties"
 
@@ -340,6 +345,8 @@ def revert_replaced_file_without_props(s
 #----------------------------------------------------------------------
 # Regression test for issue #876:
 # svn revert of an svn move'd file does not revert the file
+@XFail()
+@Issue(876)
 def revert_moved_file(sbox):
     "revert a moved file"
 
@@ -374,7 +381,7 @@ def revert_moved_file(sbox):
 #
 # It is like merge_file_replace (in merge_tests.py), but reverts file
 # instead of commit.
-
+@Issue(2135)
 def revert_file_merge_replace_with_history(sbox):
   "revert a merge replacement of file with history"
 
@@ -537,7 +544,7 @@ def revert_after_second_replace(sbox):
 # Tests for issue #2517.
 #
 # Manual conflict resolution leads to spurious revert report.
-
+@Issue(2517)
 def revert_after_manual_conflict_resolution__text(sbox):
   "revert after manual text-conflict resolution"
 
@@ -728,6 +735,7 @@ def revert_replaced_with_history_file_1(
 
 #----------------------------------------------------------------------
 # Test for issue #2804.
+@Issue(2804)
 def status_of_missing_dir_after_revert(sbox):
   "status after schedule-delete, revert, and local rm"
 
@@ -771,6 +779,7 @@ def status_of_missing_dir_after_revert(s
 
 #----------------------------------------------------------------------
 # Test for issue #2804 with replaced directory
+@Issue(2804)
 def status_of_missing_dir_after_revert_replaced_with_history_dir(sbox):
   "status after replace+, revert, and local rm"
 
@@ -878,6 +887,7 @@ def status_of_missing_dir_after_revert_r
                                      wc_dir)
 
 # Test for issue #2928.
+@Issue(2928)
 def revert_replaced_with_history_file_2(sbox):
   "reverted replace with history restores checksum"
 
@@ -1041,7 +1051,7 @@ test_list = [ None,
               revert_from_wc_root,
               revert_reexpand_keyword,
               revert_replaced_file_without_props,
-              XFail(revert_moved_file),
+              revert_moved_file,
               revert_wc_to_wc_replace_with_props,
               revert_file_merge_replace_with_history,
               revert_repos_to_wc_replace_with_props,

Modified: subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/schedule_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/schedule_tests.py?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/schedule_tests.py (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/tests/cmdline/schedule_tests.py Mon Feb  7 19:18:29 2011
@@ -32,10 +32,12 @@ import os
 import svntest
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
-XFail = svntest.testcase.XFail
-Wimp = svntest.testcase.Wimp
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
 exp_noop_up_out = svntest.actions.expected_noop_update_output
 
@@ -319,7 +321,7 @@ def revert_nested_adds(sbox):
   check_reversion(files, output)
 
 #----------------------------------------------------------------------
-
+@SkipUnless(svntest.main.is_posix_os)
 def revert_add_executable(sbox):
   "revert: add some executable files"
 
@@ -400,7 +402,7 @@ def revert_delete_dirs(sbox):
 # revert' or 'svn rm' will make that happen by removing the entry from
 # .svn/entries file. While 'svn revert' does with no error,
 # 'svn rm' does it with error.
-
+@Issue(863)
 def unschedule_missing_added(sbox):
   "unschedule addition on missing items"
 
@@ -453,7 +455,7 @@ def unschedule_missing_added(sbox):
 #
 # Make sure 'rm foo; svn rm foo' works on files and directories.
 # Also make sure that the deletion is committable.
-
+@Issue(962)
 def delete_missing(sbox):
   "schedule and commit deletion on missing items"
 
@@ -491,7 +493,7 @@ def delete_missing(sbox):
 # Revert . inside an svn added empty directory should generate an error.
 # Not anymore!  wc-ng uses absolute paths for everything, which means we
 # can handle this case without too much trouble.
-
+@Issue(854)
 def revert_inside_newly_added_dir(sbox):
   "revert inside a newly added dir"
 
@@ -508,7 +510,7 @@ def revert_inside_newly_added_dir(sbox):
 #----------------------------------------------------------------------
 # Regression test for issue #1609:
 # 'svn status' should show a schedule-add directory as 'A' not '?'
-
+@Issue(1609)
 def status_add_deleted_directory(sbox):
   "status after add of deleted directory"
 
@@ -552,6 +554,7 @@ def status_add_deleted_directory(sbox):
 #----------------------------------------------------------------------
 # Regression test for issue #939:
 # Recursive 'svn add' should still traverse already-versioned dirs.
+@Issue(939)
 def add_recursive_already_versioned(sbox):
   "'svn add' should traverse already-versioned dirs"
 
@@ -684,7 +687,7 @@ test_list = [ None,
               revert_add_files,
               revert_add_directories,
               revert_nested_adds,
-              SkipUnless(revert_add_executable, svntest.main.is_posix_os),
+              revert_add_executable,
               revert_delete_files,
               revert_delete_dirs,
               unschedule_missing_added,