You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pr...@apache.org on 2013/06/05 11:22:51 UTC

svn commit: r1489765 [19/22] - in /subversion/branches/verify-keep-going: ./ build/ build/ac-macros/ build/generator/ build/generator/templates/ contrib/hook-scripts/ contrib/server-side/fsfsfixer/ contrib/server-side/fsfsfixer/fixer/ notes/ subversion...

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/export_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/export_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/export_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/export_tests.py Wed Jun  5 09:22:43 2013
@@ -918,6 +918,52 @@ def export_file_overwrite_with_force(sbo
                                      iota_url, tmpdir)
   svntest.actions.verify_disk(tmpdir, expected_disk)
 
+def export_custom_keywords(sbox):
+  """export with custom keywords"""
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  # 248=SVN_KEYWORD_MAX_LEN-7 where 7 is '$', 'Q', 'q', ':', ' ', ' ', '$'
+  alpha_content = ('[$Qq: %s $ $Pp: %s $]\n'
+                   % (sbox.repo_url[:248],
+                      (sbox.repo_url + '/A/B/E/alpha')[:248]))
+
+  sbox.simple_append('A/B/E/alpha', '[$Qq$ $Pp$]\n', truncate=True)
+  sbox.simple_propset('svn:keywords', 'Qq=%R Pp=%u', 'A/B/E/alpha')
+  sbox.simple_commit()
+  expected_disk = svntest.main.greek_state.copy()
+  expected_disk.tweak('A/B/E/alpha', contents=alpha_content)
+  svntest.actions.verify_disk(sbox.wc_dir, expected_disk)
+
+  # Export a tree
+  export_target = sbox.add_wc_path('export')
+  expected_output = svntest.wc.State(export_target, {
+    ''             : Item(status='A '),
+    'alpha'       : Item(status='A '),
+    'beta'        : Item(status='A '),
+  })
+  expected_disk = svntest.wc.State('', {
+      'alpha': Item(contents=alpha_content),
+      'beta' : Item(contents="This is the file 'beta'.\n"),
+      })
+  svntest.actions.run_and_verify_export(sbox.repo_url + '/A/B/E',
+                                        export_target,
+                                        expected_output,
+                                        expected_disk)
+
+  # Export a file
+  export_file = os.path.join(export_target, 'alpha')
+  os.remove(export_file)
+  expected_output = ['A    %s\n' % export_file, 'Export complete.\n']
+  svntest.actions.run_and_verify_svn(None, expected_output, [],
+                                     'export', '--force',
+                                     sbox.repo_url + '/A/B/E/alpha',
+                                     export_target)
+
+  if open(export_file).read() != ''.join(alpha_content):
+    raise svntest.Failure("wrong keyword expansion")
+
 ########################################################################
 # Run the tests
 
@@ -951,6 +997,7 @@ test_list = [ None,
               export_externals_with_native_eol,
               export_to_current_dir,
               export_file_overwrite_with_force,
+              export_custom_keywords,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/externals_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/externals_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/externals_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/externals_tests.py Wed Jun  5 09:22:43 2013
@@ -2556,7 +2556,7 @@ def commit_include_externals(sbox):
 
 
   # Assume everything r4, except what is pegged
-  expected_status.tweak(wc_rev='4')  
+  expected_status.tweak(wc_rev='4')
   expected_status.tweak('Xpegged/xiota', 'Xpegged/xE', 'Xpegged/xE/alpha',
                         'Xpegged/xE/beta', wc_rev=1)
 
@@ -2781,7 +2781,7 @@ def include_immediate_dir_externals(sbox
   #
   #   >svn st
   #   X       X\XE
-  #   
+  #
   #   Performing status on external item at 'X\XE':
   #    M      C:\SVN\src-trunk\...\externals_tests-37\X\XE
   #   M       C:\SVN\src-trunk\...\externals_tests-37\X\XE\alpha
@@ -3048,15 +3048,15 @@ def duplicate_targets(sbox):
   actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'pg',
     'svn:externals', wc_dir)
 
-@Issue(4225)  
+@Issue(4225)
 def list_include_externals(sbox):
   "list with --include-externals"
-  
+
   externals_test_setup(sbox)
 
   wc_dir         = sbox.wc_dir
   repo_url       = sbox.repo_url
-  
+
   svntest.actions.run_and_verify_svn(None, None, [],
                                      'checkout',
                                      repo_url, wc_dir)
@@ -3073,7 +3073,7 @@ def list_include_externals(sbox):
     return string
 
   expected_stdout = verify.UnorderedOutput([
-    "E/" + "\n", 
+    "E/" + "\n",
     "F/" + "\n",
     "lambda" + "\n",
     list_external_string("gamma", B_url ) + "\n",
@@ -3081,7 +3081,7 @@ def list_include_externals(sbox):
 
   exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
     "OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', B_path)
-  
+
   exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
     "OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', B_url)
 
@@ -3094,10 +3094,10 @@ def list_include_externals(sbox):
     "chi" + "\n",
     "omega" + "\n",
     "psi" + "\n"])
-  
+
   exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
     "OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', C_path)
-  
+
   exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
     "OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', C_url)
 

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/import_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/import_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/import_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/import_tests.py Wed Jun  5 09:22:43 2013
@@ -554,7 +554,7 @@ def import_inherited_ignores(sbox):
   svntest.actions.run_and_verify_svn(None, [], [], 'import',
                                      '--config-dir', config_dir,
                                      os.path.join(import_tree_dir,
-                                                  'DIR6', 'file6.foo'), 
+                                                  'DIR6', 'file6.foo'),
                                      sbox.repo_url + '/A/B/E/file6.foo',
                                      '-m', 'This import should fail!')
 
@@ -563,7 +563,7 @@ def import_inherited_ignores(sbox):
   svntest.actions.run_and_verify_svn(None, None, [], 'import', '--no-ignore',
                                      '--config-dir', config_dir,
                                      os.path.join(import_tree_dir,
-                                                  'DIR6', 'file6.foo'), 
+                                                  'DIR6', 'file6.foo'),
                                      sbox.repo_url + '/A/B/E/file6.foo',
                                      '-m', 'import')
   expected_output = svntest.verify.UnorderedOutput(

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/info_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/info_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/info_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/info_tests.py Wed Jun  5 09:22:43 2013
@@ -544,7 +544,7 @@ def relpath_escaping(sbox):
               'URL' : '.*/path.*with.*space.*',
               'Relative URL' : '.*/path.*with.*space.*',
              }
-             
+
   svntest.actions.run_and_verify_info([expected], sbox.ospath(name))
 
   info = svntest.actions.run_and_parse_info(sbox.ospath(name), sbox.ospath(name2))

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/iprop_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/iprop_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/iprop_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/iprop_tests.py Wed Jun  5 09:22:43 2013
@@ -99,7 +99,7 @@ def iprops_basic_working(sbox):
     D_path, expected_iprops, expected_explicit_props)
 
   ### Propget Directory Targets
-  
+
   # Propget directory target with only explicit props.
   expected_iprops = {}
   expected_explicit_props = {'RootProp2' : 'Root-Prop-Val2'}
@@ -315,7 +315,7 @@ def iprops_switched_subtrees(sbox):
 
   svntest.main.run_svn(None, 'copy', sbox.repo_url + '/A',
                        sbox.repo_url + '/branch2', '-m', 'Make branch2')
-  
+
   # Create a root property and two branch properties
   svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
   sbox.simple_propset('Root-Prop-1', 'Root-Prop-Val1', '.')
@@ -430,7 +430,7 @@ def iprops_pegged_wc_targets(sbox):
   sbox.simple_propset('RootProp1', 'Root-Prop-Val-1-set-in-r2', '.')
   sbox.simple_propset('RootProp2', 'Root-Prop-Val-2-set-in-r2', '.')
   sbox.simple_propset('D-Prop', 'D-Prop-Val-set-in-r2', 'A/D')
-  svntest.main.file_write(alpha_path, "Edit in r2.\n")  
+  svntest.main.file_write(alpha_path, "Edit in r2.\n")
   svntest.main.run_svn(None, 'commit', '-m', 'Add some properties',
                        wc_dir)
 

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/lock_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/lock_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/lock_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/lock_tests.py Wed Jun  5 09:22:43 2013
@@ -1779,14 +1779,14 @@ def locks_stick_over_switch(sbox):
   switched_status.tweak('iota', writelocked='K')
   switched_status.tweak('A', switched='S')
 
-  svntest.actions.run_and_verify_switch(wc_dir, sbox.ospath('A'), 
+  svntest.actions.run_and_verify_switch(wc_dir, sbox.ospath('A'),
                                         repo_url + '/AA',
                                         expected_output, None, switched_status)
 
   # And now switch back to verify that the locks reappear
   expected_output = svntest.wc.State(wc_dir, {
   })
-  svntest.actions.run_and_verify_switch(wc_dir, sbox.ospath('A'), 
+  svntest.actions.run_and_verify_switch(wc_dir, sbox.ospath('A'),
                                         repo_url + '/A',
                                         expected_output, None, expected_status)
 
@@ -1815,6 +1815,31 @@ def lock_unlock_deleted(sbox):
   expected_status.tweak('A/mu', writelocked=None)
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
+@Issue(4369)
+def commit_stolen_lock(sbox):
+  "commit with a stolen lock"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  sbox.simple_append('A/mu', 'zig-zag')
+  sbox.simple_lock('A/mu')
+
+  expected_output = '\'mu\' locked by user \'jrandom\'.'
+  svntest.actions.run_and_verify_svn(None, expected_output, [],
+                                     'lock', '--force',
+                                     sbox.repo_url + '/A/mu')
+
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.tweak('A/mu', status='M ', writelocked='T')
+  err_re = "(.*E160037: Cannot verify lock on path '/A/mu')|" + \
+           "(.*E160038: '/.*/A/mu': no lock token available)"
+  svntest.actions.run_and_verify_commit(wc_dir,
+                                        [],
+                                        expected_status,
+                                        err_re,
+                                        wc_dir)
+
 ########################################################################
 # Run the tests
 
@@ -1866,6 +1891,7 @@ test_list = [ None,
               lock_multi_wc,
               locks_stick_over_switch,
               lock_unlock_deleted,
+              commit_stolen_lock,
             ]
 
 if __name__ == '__main__':

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/log_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/log_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/log_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/log_tests.py Wed Jun  5 09:22:43 2013
@@ -2220,7 +2220,7 @@ def log_diff_moved(sbox):
   sbox.simple_move('A/mu2', 'A/mu3')
   svntest.main.file_append(sbox.ospath('A/mu3'), "now mu3\n")
   sbox.simple_commit()
-  
+
   mu_at_1 = sbox.repo_url + '/A/mu@1'
   mu3_at_3 = sbox.repo_url + '/A/mu3@3'
 
@@ -2296,13 +2296,13 @@ def log_search(sbox):
   log_chain = parse_log_output(output)
   check_log_chain(log_chain, [7, 6, 3])
 
-  # search is case-insensitive
+  # search is case-sensitive
   exit_code, output, err = svntest.actions.run_and_verify_svn(
                              None, None, [], 'log', '--search',
                              'FOR REVISION [367]')
 
   log_chain = parse_log_output(output)
-  check_log_chain(log_chain, [7, 6, 3])
+  check_log_chain(log_chain, [])
 
   # multi-pattern search
   exit_code, output, err = svntest.actions.run_and_verify_svn(
@@ -2365,6 +2365,133 @@ def merge_sensitive_log_with_search(sbox
   }
   check_merge_results(log_chain, expected_merges)
 
+#----------------------------------------------------------------------
+# Test for issue #4355 'svn_client_log5 broken with multiple revisions
+# which span a rename'.
+@Issue(4355)
+@SkipUnless(server_has_mergeinfo)
+def log_multiple_revs_spanning_rename(sbox):
+  "log for multiple revs which span a rename"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+  msg_file=os.path.join(sbox.repo_dir, 'log-msg')
+  msg_file=os.path.abspath(msg_file)
+  mu_path1 = os.path.join(wc_dir, 'A', 'mu')
+  mu_path2 = os.path.join(wc_dir, 'trunk', 'mu')
+  trunk_path = os.path.join(wc_dir, 'trunk')
+
+  # r2 - Change a file.
+  msg=""" Log message for revision 2
+  but with multiple lines
+  to test the code"""
+  svntest.main.file_write(msg_file, msg)
+  svntest.main.file_append(mu_path1, "2")
+  svntest.main.run_svn(None, 'ci', '-F', msg_file, wc_dir)
+
+  # r3 - Rename that file's parent.
+  svntest.main.run_svn(None, 'up', wc_dir)
+  sbox.simple_move('A', 'trunk')
+  svntest.main.run_svn(None, 'ci', '-m', "Log message for revision 3",
+                       wc_dir)
+
+  # r4 - Change the file again.
+  msg=""" Log message for revision 4
+  but with multiple lines
+  to test the code"""
+  svntest.main.file_write(msg_file, msg)
+  svntest.main.file_append(mu_path2, "4")
+  svntest.main.run_svn(None, 'ci', '-F', msg_file, wc_dir)
+  svntest.main.run_svn(None, 'up', wc_dir)
+
+  # Check that log can handle a revision range that spans a rename.
+  exit_code, output, err = svntest.actions.run_and_verify_svn(
+    None, None, [], 'log', '-r2:4', sbox.repo_url + '/trunk/mu')
+  log_chain = parse_log_output(output)
+  check_log_chain(log_chain, [2,3,4])
+
+  # Check that log can handle discrete revisions that don't span a rename.
+  exit_code, output, err = svntest.actions.run_and_verify_svn(
+    None, None, [], 'log', '-c3,4', sbox.repo_url + '/trunk/mu')
+  log_chain = parse_log_output(output)
+  check_log_chain(log_chain, [3,4])
+
+  # Check that log can handle discrete revisions that span a rename.
+  #
+  # Previously this failed with:
+  #
+  #   >svn log ^/trunk -c2,3,1
+  #   ------------------------------------------------------------------------
+  #   r2 | jrandom | 2013-04-18 19:58:47 -0400 (Thu, 18 Apr 2013) | 3 lines
+  #
+  #    Log message for revision 2
+  #     but with multiple lines
+  #     to test the code
+  #   ------------------------------------------------------------------------
+  #   r3 | jrandom | 2013-04-18 19:58:47 -0400 (Thu, 18 Apr 2013) | 1 line
+  #
+  #   Log message for revision 3
+  #   ..\..\..\subversion\svn\log-cmd.c:868,
+  #   ..\..\..\subversion\libsvn_client\log.c:641,
+  #   ..\..\..\subversion\libsvn_repos\log.c:1931,
+  #   ..\..\..\subversion\libsvn_repos\log.c:1358,
+  #   ..\..\..\subversion\libsvn_fs\fs-loader.c:979,
+  #   ..\..\..\subversion\libsvn_fs_fs\tree.c:3205:
+  #     (apr_err=SVN_ERR_FS_NOT_FOUND)
+  #   svn: E160013: File not found: revision 1, path '/trunk'
+  exit_code, output, err = svntest.actions.run_and_verify_svn(
+    None, None, [], 'log', '-c2,3,1', sbox.repo_url + '/trunk/mu')
+  log_chain = parse_log_output(output)
+  check_log_chain(log_chain, [2,3,1])
+
+  # Should work with a WC target too.
+  exit_code, output, err = svntest.actions.run_and_verify_svn(
+    None, None, [], 'log', '-c2,3,1', mu_path2)
+  log_chain = parse_log_output(output)
+  check_log_chain(log_chain, [2,3,1])
+
+  # Discreet revision *ranges* which span a rename should work too.
+  exit_code, output, err = svntest.actions.run_and_verify_svn(
+    None, None, [], 'log', '-r1', '-r4:2', sbox.repo_url + '/trunk')
+  log_chain = parse_log_output(output)
+  check_log_chain(log_chain, [1,4,3,2])
+
+  # As above, but revision ranges from younger to older.  Previously this
+  # failed with:
+  #
+  #  >svn log ^/trunk -r1:1 -r2:4
+  #  ------------------------------------------------------------------------
+  #  r1 | jrandom | 2013-04-18 19:58:46 -0400 (Thu, 18 Apr 2013) | 1 line
+  #
+  #  Log message for revision 1.
+  #  ..\..\..\subversion\svn\log-cmd.c:868,
+  #  ..\..\..\subversion\libsvn_client\log.c:678,
+  #  ..\..\..\subversion\libsvn_repos\log.c:1931,
+  #  ..\..\..\subversion\libsvn_repos\log.c:1358,
+  #  ..\..\..\subversion\libsvn_fs\fs-loader.c:979,
+  #  ..\..\..\subversion\libsvn_fs_fs\tree.c:3205:
+  #    (apr_err=SVN_ERR_FS_NOT_FOUND)
+  #  svn: E160013: File not found: revision 4, path '/A'
+  exit_code, output, err = svntest.actions.run_and_verify_svn(
+    None, None, [], 'log', '-r1', '-r2:4', sbox.repo_url + '/trunk')
+  log_chain = parse_log_output(output)
+  check_log_chain(log_chain, [1,2,3,4])
+
+  # Discrete revs with WC-only opt revs shouldn't cause any problems.
+  exit_code, output, err = svntest.actions.run_and_verify_svn(
+    None, None, [], 'log', '-r1', '-rPREV', trunk_path)
+  log_chain = parse_log_output(output)
+  check_log_chain(log_chain, [1,3])
+
+  exit_code, output, err = svntest.actions.run_and_verify_svn(
+    None, None, [], 'log', '-r1', '-rCOMMITTED', trunk_path)
+  log_chain = parse_log_output(output)
+  check_log_chain(log_chain, [1,4])
+
+  exit_code, output, err = svntest.actions.run_and_verify_svn(
+    None, None, [], 'log', '-r1', '-rBASE', trunk_path)
+  log_chain = parse_log_output(output)
+  check_log_chain(log_chain, [1,4])
 
 ########################################################################
 # Run the tests
@@ -2411,6 +2538,7 @@ test_list = [ None,
               log_diff_moved,
               log_search,
               merge_sensitive_log_with_search,
+              log_multiple_revs_spanning_rename,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_automatic_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_automatic_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_automatic_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_automatic_tests.py Wed Jun  5 09:22:43 2013
@@ -837,9 +837,9 @@ def subtree_to_and_fro(sbox):
                                 "|(  A_COPY\n)"
                                 "|(    Missing ranges: /A:5\n)"
                                 "|(\n)"
-                                "|(.*apr_err.*)", # In case of debug build
+                                "|" + svntest.main.stack_trace_regexp,
                                 None,
-                                True) # Match *all* lines of stdout  
+                                True) # Match *all* lines of stdout
 
 #----------------------------------------------------------------------
 # Automatic merges ignore subtree mergeinfo gaps older than the last rev
@@ -888,7 +888,7 @@ def merge_to_reverse_cherry_subtree_to_m
   # Try an automatic sync merge from ^/A to A_COPY.  Revision 5 should be
   # merged to A_COPY/B as its subtree mergeinfo reveals that rev is missing,
   # like so:
-  # 
+  #
   #   >svn merge ^/A A_COPY
   #   --- Merging r5 into 'A_COPY\B':
   #   U    A_COPY\B\E\beta
@@ -1166,7 +1166,7 @@ def effective_sync_results_in_reintegrat
   # This should work because since the resolution of
   # http://subversion.tigris.org/issues/show_bug.cgi?id=3577
   # if B is *effectively* synced with A, then B can be reintegrated
-  # to A.  
+  # to A.
   sbox.simple_update()
   expected_output = [
     "--- Merging differences between repository URLs into '" +

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_reintegrate_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_reintegrate_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_reintegrate_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_reintegrate_tests.py Wed Jun  5 09:22:43 2013
@@ -63,7 +63,7 @@ def run_reintegrate_expect_error(src_url
      unless stdout and stderr both match and the exit code is non-zero.
      Every line of stderr must match the regex EXPECTED_STDERR.
   """
-  expected_stderr += "|(.*apr_err.*)"  # In case of debug build
+  expected_stderr += "|" + svntest.main.stack_trace_regexp
 
   # The actions.run_and_verify_* methods are happy if one line of the error
   # matches the regex, but we want to check that every line matches.

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tests.py Wed Jun  5 09:22:43 2013
@@ -1834,7 +1834,7 @@ def merge_into_missing(sbox):
   })
   expected_mergeinfo_output = wc.State(F_path, {
     })
-  
+
   svntest.actions.run_and_verify_merge(F_path, '1', '2', F_url, None,
                                        expected_output,
                                        expected_mergeinfo_output,
@@ -4481,8 +4481,9 @@ def obey_reporter_api_semantics_while_do
 #----------------------------------------------------------------------
 def set_up_branch(sbox, branch_only = False, nbr_of_branches = 1):
   '''Starting with standard greek tree, copy 'A' NBR_OF_BRANCHES times
-  to A_COPY, A_COPY_2, A_COPY_3, and so on.  Then make four modifications
-  (setting file contents to "New content") under A:
+  to A_COPY, A_COPY_2, A_COPY_3, and so on.  Then, unless BRANCH_ONLY is
+  true, make four modifications (setting file contents to "New content")
+  under A:
     r(2 + NBR_OF_BRANCHES) - A/D/H/psi
     r(3 + NBR_OF_BRANCHES) - A/D/G/rho
     r(4 + NBR_OF_BRANCHES) - A/B/E/beta
@@ -6505,7 +6506,18 @@ def foreign_repos_does_not_update_mergei
 def avoid_reflected_revs(sbox):
   "avoid repeated merges for cyclic merging"
 
-  ## See http://subversion.tigris.org/issues/show_bug.cgi?id=2897. ##
+  # See <http://subversion.tigris.org/issues/show_bug.cgi?id=2897>.
+  #
+  # This test cherry-picks some changes (all of them, in fact) from the
+  # parent branch 'A' to the child branch 'A_COPY', and then tries to
+  # reintegrate 'A_COPY' to 'A' (explicitly specifying a revision range
+  # on the source branch).  It expects the changes that are unique to the
+  # branch 'A_COPY' to be merged to 'A'.
+  #
+  #   A     --1----[3]---[5]----------?
+  #            \     \_____\___      /
+  #             \           \  \    /
+  #   A_COPY     2-[---4-----6--7--8]-
 
   # Create a WC with a single branch
   sbox.build()
@@ -16268,7 +16280,7 @@ def merge_with_os_deleted_subtrees(sbox)
   err_re = "svn: E195016: Merge tracking not allowed with missing subtrees; " + \
            "try restoring these items first:"                        + \
            "|(\n)"                                                   + \
-           "|(.*apr_err.*\n)" # In case of debug build
+           "|" + svntest.main.stack_trace_regexp
 
   # Case 1: Infinite depth merge into infinite depth WC target.
   # Every missing subtree under the target should be reported as missing.
@@ -17487,8 +17499,8 @@ def merge_source_with_replacement(sbox):
   psi_COPY_path   = sbox.ospath('A_COPY/D/H/psi')
   rho_COPY_path   = sbox.ospath('A_COPY/D/G/rho')
   omega_COPY_path = sbox.ospath('A_COPY/D/H/omega')
-  
-  # branch A@1 to A_COPY in r2, then make a few edits under A in r3-6:  
+
+  # branch A@1 to A_COPY in r2, then make a few edits under A in r3-6:
   wc_disk, wc_status = set_up_branch(sbox)
 
   # r7 Delete A, replace it with A@5, effectively reverting the change
@@ -17590,7 +17602,7 @@ def reverse_merge_with_rename(sbox):
   rho_COPY_path   = sbox.ospath('A_COPY/D/G/rho')
   omega_COPY_path = sbox.ospath('A_COPY/D/H/omega')
 
-  # branch A@1 to A_COPY in r2, then make a few edits under A in r3-6:  
+  # branch A@1 to A_COPY in r2, then make a few edits under A in r3-6:
   wc_disk, wc_status = set_up_branch(sbox)
 
   # r7 - Rename ^/A to ^/trunk.
@@ -17805,7 +17817,7 @@ def merge_with_added_subtrees_with_merge
   #    vvvvvvvvvvvvvvvvvvvv
   #    U   A_COPY_2\C\X\Y\Z
   #    ^^^^^^^^^^^^^^^^^^^^
-  #   
+  #
   #   >svn pl -vR A_COPY_2
   #   Properties on 'A_COPY_2':
   #     svn:mergeinfo
@@ -18182,7 +18194,7 @@ def merge_target_selection(sbox):
   svntest.actions.run_and_verify_svn(None, expected_output, [],
                                      'merge', '^/dir', '-c', '4', 'binary-file')
 
-@Issue(3405)
+@Issue(3405) # seems to be the wrong issue number
 def merge_properties_on_adds(sbox):
   "merged directory properties are added"
 
@@ -18247,7 +18259,7 @@ def merge_properties_on_adds(sbox):
   # For fun, also check the status: 'svn status' suppresses the M from AM.
 
   # G = sbox.ospath('G')
-  # 
+  #
   # expected_status = wc.State('G', {
   #   ''           : Item(status=' M', wc_rev='2'),
   #   'pi'         : Item(status='  ', wc_rev='2'),
@@ -18792,7 +18804,7 @@ def single_editor_drive_merge_notificati
      D_copy_path + "':\n",
      " U   " + D_copy_path + "\n",
      "--- Eliding mergeinfo from '" + D_copy_path + "':\n",
-     " U   " + D_copy_path + "\n"])     
+     " U   " + D_copy_path + "\n"])
   svntest.actions.run_and_verify_svn(None, expected_output, [], 'merge',
                                      '-r9:2', sbox.repo_url + '/A',
                                      A_copy_path)
@@ -18993,6 +19005,156 @@ def conflicted_split_merge_with_resolve(
                                   prop_resolved=1, expect_error=False)
     try_merge(target, 8,  ['-r6:3', '-r10:7'], expect, '7')
 
+#----------------------------------------------------------------------
+# Test for issue 4367 'merge to shallow WC, repeat merge to infinite
+# depth WC is broken'.
+@SkipUnless(server_has_mergeinfo)
+@Issues(4367)
+def merge_to_empty_target_merge_to_infinite_target(sbox):
+  "repeat merge to infinite depth WC conflicts"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+  wc_disk, wc_status = set_up_branch(sbox, branch_only=True)
+  A_COPY_path = sbox.ospath('A_COPY')
+  C_COPY_path = sbox.ospath('A_COPY/C')
+  E_path = sbox.ospath('A/B/E')
+  J_path = sbox.ospath('A/C/J')
+  K_path = sbox.ospath('A/C/J/K')
+  nu1_path = sbox.ospath('A/C/J/nu1')
+  nu2_path = sbox.ospath('A/C/J/K/nu2')
+  L_path = sbox.ospath('A/B/L')
+  nu3_path = sbox.ospath('A/B/L/nu3')
+
+  B1_path = sbox.ospath('A/B/B1')
+  B1a_path = sbox.ospath('A/B/B1/B1a')
+  test1_path = sbox.ospath('A/B/B1/test.txt')
+  test2_path = sbox.ospath('A/B/B1/B1a/test.txt')
+
+  C1_path = sbox.ospath('A/C/C1')
+  test3_path = sbox.ospath('A/C/C1/test.txt')
+  
+  # r3 - Add some subtrees:
+  #   A /A/B/B1
+  #   A /A/B/B1/B1a
+  #   A /A/B/B1/B1a/test.txt
+  #   A /A/B/B1/test.txt
+  svntest.main.run_svn(None, 'mkdir', B1_path)
+  svntest.main.run_svn(None, 'mkdir', B1a_path)
+  svntest.main.file_append(test1_path, "New file.\n")
+  svntest.main.file_append(test2_path, "New file.\n")
+  svntest.main.run_svn(None, 'add', test1_path, test2_path)
+  sbox.simple_commit()
+
+  # r4 - Add some another subtree.
+  #   A /A/C/C1
+  #   A /A/C/C1/test.txt
+  svntest.main.run_svn(None, 'mkdir', C1_path)
+  svntest.main.file_append(test3_path, "New file.\n")
+  svntest.main.run_svn(None, 'add', test3_path)
+  sbox.simple_commit()
+
+  # r5 - Delete part of the subtree added in r3.
+  #  D /A/B/B1/B1a
+  svntest.main.run_svn(None, 'del', B1a_path)
+  sbox.simple_commit()
+
+  # r6 - Set depth of A_COPY to empty, merge all available revs from ^/A.
+  svntest.actions.run_and_verify_svn(None, None, [], 'up',
+                                     '--set-depth=empty', A_COPY_path)
+  svntest.actions.run_and_verify_svn(None, None, [], 'up',
+                                     '--set-depth=infinity', C_COPY_path)
+  svntest.actions.run_and_verify_svn(None, None, [], 'merge', '^/A',
+                                     A_COPY_path)
+  sbox.simple_commit()
+
+  # Update A_COPY back to depth infinity and retry the prior merge.
+  svntest.actions.run_and_verify_svn(None, None, [], 'up',
+                                     '--set-depth=infinity', A_COPY_path)
+
+  expected_output = wc.State(A_COPY_path, {
+    'B/B1'              : Item(status='A '),
+    'B/B1/test.txt'     : Item(status='A '),
+    'B/B1/B1a'          : Item(status='D ', prev_status='A '),
+    'B/B1/B1a/test.txt' : Item(status='A '),
+    })
+  expected_mergeinfo_output = wc.State(A_COPY_path, {
+    ''  : Item(status=' U'),
+    'B' : Item(status=' G'),
+    })
+  expected_elision_output = wc.State(A_COPY_path, {
+    'B' : Item(status=' U'),
+    })
+  expected_status = wc.State(A_COPY_path, {
+    ''                  : Item(status=' M'),
+    'B'                 : Item(status='  '),
+    'mu'                : Item(status='  '),
+    'B/B1'              : Item(status='A ', copied='+'),
+    'B/B1/test.txt'     : Item(status='  ', copied='+'),
+    'B/B1/B1a'          : Item(status='D ', copied='+'),
+    'B/B1/B1a/test.txt' : Item(status='D ', copied='+'),
+    'B/E'               : Item(status='  '),
+    'B/E/alpha'         : Item(status='  '),
+    'B/E/beta'          : Item(status='  '),
+    'B/lambda'          : Item(status='  '),
+    'B/F'               : Item(status='  '),
+    'C'                 : Item(status='  '),
+    'C/C1'              : Item(status='  '),
+    'C/C1/test.txt'     : Item(status='  '),
+    'D'                 : Item(status='  '),
+    'D/G'               : Item(status='  '),
+    'D/G/pi'            : Item(status='  '),
+    'D/G/rho'           : Item(status='  '),
+    'D/G/tau'           : Item(status='  '),
+    'D/gamma'           : Item(status='  '),
+    'D/H'               : Item(status='  '),
+    'D/H/chi'           : Item(status='  '),
+    'D/H/psi'           : Item(status='  '),
+    'D/H/omega'         : Item(status='  '),
+    })
+  expected_status.tweak(wc_rev=6)
+  expected_status.tweak('B/B1', 'B/B1/test.txt', 'B/B1/B1a',
+                        'B/B1/B1a/test.txt', wc_rev='-')
+  expected_disk = wc.State('', {
+    ''              : Item(props={SVN_PROP_MERGEINFO : '/A:2-6'}),
+    'B'             : Item(),
+    'mu'            : Item("This is the file 'mu'.\n"),
+    'B/B1'          : Item(),
+    'B/B1/test.txt' : Item("New file.\n"),
+    'B/E'           : Item(),
+    'B/E/alpha'     : Item("This is the file 'alpha'.\n"),
+    'B/E/beta'      : Item("This is the file 'beta'.\n"),
+    'B/lambda'      : Item("This is the file 'lambda'.\n"),
+    'B/F'           : Item(),
+    'C'             : Item(props={SVN_PROP_MERGEINFO : '/A/C:2-5'}),
+    'C/C1'          : Item(),
+    'C/C1/test.txt' : Item("New file.\n"),
+    'D'             : Item(),
+    'D/G'           : Item(),
+    'D/G/pi'        : Item("This is the file 'pi'.\n"),
+    'D/G/rho'       : Item("This is the file 'rho'.\n"),
+    'D/G/tau'       : Item("This is the file 'tau'.\n"),
+    'D/gamma'       : Item("This is the file 'gamma'.\n"),
+    'D/H'           : Item(),
+    'D/H/chi'       : Item("This is the file 'chi'.\n"),
+    'D/H/psi'       : Item("This is the file 'psi'.\n"),
+    'D/H/omega'     : Item("This is the file 'omega'.\n"),
+    })
+  expected_skip = wc.State(A_COPY_path, { })
+  svntest.actions.run_and_verify_merge(A_COPY_path, None, None,
+                                       sbox.repo_url + '/A', None,
+                                       expected_output,
+                                       expected_mergeinfo_output,
+                                       expected_elision_output,
+                                       expected_disk,
+                                       expected_status,
+                                       expected_skip,
+                                       None, None, None, None,
+                                       None, 1, 0)
+
+  # Commit the merge.
+  #sbox.simple_commit()
+
 ########################################################################
 # Run the tests
 
@@ -19137,6 +19299,7 @@ test_list = [ None,
               multiple_editor_drive_merge_notifications,
               single_editor_drive_merge_notifications,
               conflicted_split_merge_with_resolve,
+              merge_to_empty_target_merge_to_infinite_target,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tree_conflict_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tree_conflict_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tree_conflict_tests.py Wed Jun  5 09:22:43 2013
@@ -1329,7 +1329,7 @@ def tree_conflicts_merge_edit_onto_missi
   })
 
   # Currently this test fails because some parts of the merge
-  # start succeeding. 
+  # start succeeding.
   svntest.deeptrees.deep_trees_run_tests_scheme_for_merge(sbox,
     [ DeepTreesTestCase(
                "local_tree_missing_incoming_leaf_edit",

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/move_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/move_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/move_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/move_tests.py Wed Jun  5 09:22:43 2013
@@ -95,14 +95,14 @@ def build_incoming_changes_file(sbox, so
   sbox.simple_propdel("foo", dest)
   sbox.simple_commit(message="Delete property on destination of moved file")
 
-  # r13 = Remove destination again (not needed for any test just cleanup). 
+  # r13 = Remove destination again (not needed for any test just cleanup).
   sbox.simple_rm(dest)
   sbox.simple_commit(message="Remove destination (cleanup)")
 
   # r14 = Add property on source of moved file.
   sbox.simple_propset("foo", "bar", source)
   sbox.simple_commit(message="Add property on source of moved file")
-  
+
   # r15 = Modify property on source of moved file.
   sbox.simple_propset("foo", "baz", source)
   sbox.simple_commit(message="Modify property on source of moved file")
@@ -141,11 +141,11 @@ def move_file_test(sbox, source, dest, m
   source_path = sbox.ospath(source)
   dest_path = sbox.ospath(dest)
 
-  # Deal with if there's no resolves key, as in we're not going to 
+  # Deal with if there's no resolves key, as in we're not going to
   # do a resolve.
   if not 'resolves' in test or not test['resolves']:
     test['resolves'] = {None: None}
- 
+
   # Do the test for every type of resolve provided.
   for resolve_accept in test['resolves'].keys():
 
@@ -157,7 +157,7 @@ def move_file_test(sbox, source, dest, m
     # execute the move
     move_func(test['start_rev'])
 
-    # update to end_rev, which will create a conflict 
+    # update to end_rev, which will create a conflict
     # TODO: Limit the property checks to only when we're doing something with
     # properties.
     svntest.actions.run_and_verify_update(wc_dir, test['up_output'],
@@ -177,7 +177,7 @@ def move_file_test(sbox, source, dest, m
       if not 'output' in resolve:
         resolve['output'] = None
       if not 'error' in resolve:
-        resolve['error'] = [] 
+        resolve['error'] = []
       if not 'disk' in resolve:
         resolve['disk'] = None
       if 'revert_paths' in resolve:
@@ -197,7 +197,7 @@ def move_file_test(sbox, source, dest, m
       if resolve['disk']:
         svntest.actions.verify_disk(wc_dir, resolve['disk'], True)
 
-    # revert to preprare for the next test 
+    # revert to preprare for the next test
     svntest.actions.run_and_verify_revert(revert_paths, '-R', wc_dir)
 
 # tests is an array of test dictionaries that move_file_test above will take
@@ -240,11 +240,11 @@ def build_simple_file_move_tests(sbox, s
   mc['output'] = svntest.verify.ExpectedOutput(
     "Resolved conflicted state of '%s'\n" % source_path, match_all=False
   )
-  mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   mc['status'].tweak(source, status='D ', moved_to=dest)
   mc['status'].add({dest: Item(status='A ', moved_from=source,
                                copied='+', wc_rev='-')})
-  mc['disk'] = test['up_disk'].copy() 
+  mc['disk'] = test['up_disk'].copy()
   mc['disk'].tweak(dest, contents="This is the file 'lambda'.\nmodified\n")
   # theirs-conflict doesn't work
   tc = {}
@@ -259,10 +259,10 @@ def build_simple_file_move_tests(sbox, s
       "Resolved conflicted state of '%s'\n" % source_path,
     ]
   )
-  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   working['status'].tweak(source, status='D ')
   working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
-  working['disk'] = test['up_disk'] 
+  working['disk'] = test['up_disk']
   test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
                       'working': working}
   test['revert_paths'] = [source_path, dest_path]
@@ -301,7 +301,7 @@ def build_simple_file_move_tests(sbox, s
     "Resolved conflicted state of '%s'\n" % source_path, match_all=False
   )
   # move is broken now
-  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
   working['status'].remove(source)
   working['disk'] = test['up_disk']
@@ -346,7 +346,7 @@ def build_simple_file_move_tests(sbox, s
     "Resolved conflicted state of '%s'\n" % source_path, match_all=False
   )
   # XXX: Not sure this status is really correct here
-  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   working['status'].tweak(source, status='! ')
   working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
   working['disk'] = test['up_disk']
@@ -389,7 +389,7 @@ def build_simple_file_move_tests(sbox, s
     "Resolved conflicted state of '%s'\n" % dest_path, match_all=False
   )
   # working converts the move into a replacement
-  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   working['status'].tweak(source, status='D ', moved_to=dest)
   working['status'].add({dest: Item(status='R ', moved_from=source,
                                     copied='+', wc_rev='-')})
@@ -435,7 +435,7 @@ def build_simple_file_move_tests(sbox, s
     "Resolved conflicted state of '%s'\n" % dest_path, match_all=False
   )
   # working converts the move into a replacement
-  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   working['status'].tweak(source, status='D ', moved_to=dest)
   working['status'].add({dest: Item(status='R ', moved_from=source,
                                     copied='+', wc_rev='-')})
@@ -503,7 +503,7 @@ def build_simple_file_move_tests(sbox, s
     "Resolved conflicted state of '%s'\n" % dest_path, match_all=False
   )
   # working converts the move into a replacement
-  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   working['status'].tweak(source, status='D ', moved_to=dest)
   working['status'].add({dest: Item(status='R ', moved_from=source,
                                     copied='+', wc_rev='-')})
@@ -547,7 +547,7 @@ def build_simple_file_move_tests(sbox, s
     "Resolved conflicted state of '%s'\n" % dest_path, match_all=False
   )
   # working converts the move into a replacement
-  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   working['status'].tweak(source, status='D ', moved_to=dest)
   working['status'].add({dest: Item(status='R ', moved_from=source,
                                     copied='+', wc_rev='-')})
@@ -560,7 +560,7 @@ def build_simple_file_move_tests(sbox, s
   # move and update with incoming property addition to dest (r7-10)
   test = {}
   test['start_rev'] = 7
-  test['end_rev'] = 10 
+  test['end_rev'] = 10
   test['start_output'] = None
   test['start_disk'] = None
   test['start_status'] = None
@@ -591,7 +591,7 @@ def build_simple_file_move_tests(sbox, s
     "Resolved conflicted state of '%s'\n" % dest_path, match_all=False
   )
   # working converts the move into a replacement
-  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   working['status'].tweak(source, status='D ', moved_to=dest)
   working['status'].add({dest: Item(status='R ', moved_from=source,
                                     copied='+', wc_rev='-')})
@@ -604,7 +604,7 @@ def build_simple_file_move_tests(sbox, s
   # move and update with incoming property modification to dest (r7-11)
   test = {}
   test['start_rev'] = 7
-  test['end_rev'] = 11 
+  test['end_rev'] = 11
   test['start_output'] = None
   test['start_disk'] = None
   test['start_status'] = None
@@ -635,7 +635,7 @@ def build_simple_file_move_tests(sbox, s
     "Resolved conflicted state of '%s'\n" % dest_path, match_all=False
   )
   # working converts the move into a replacement
-  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   working['status'].tweak(source, status='D ', moved_to=dest)
   working['status'].add({dest: Item(status='R ', moved_from=source,
                                     copied='+', wc_rev='-')})
@@ -648,7 +648,7 @@ def build_simple_file_move_tests(sbox, s
   # move and update with incoming property deletion to dest (r7-12)
   test = {}
   test['start_rev'] = 7
-  test['end_rev'] = 12 
+  test['end_rev'] = 12
   test['start_output'] = None
   test['start_disk'] = None
   test['start_status'] = None
@@ -679,7 +679,7 @@ def build_simple_file_move_tests(sbox, s
     "Resolved conflicted state of '%s'\n" % dest_path, match_all=False
   )
   # working converts the move into a replacement
-  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   working['status'].tweak(source, status='D ', moved_to=dest)
   working['status'].add({dest: Item(status='R ', moved_from=source,
                                     copied='+', wc_rev='-')})
@@ -692,7 +692,7 @@ def build_simple_file_move_tests(sbox, s
   # move and update with incoming property addition to source (r13-14)
   test = {}
   test['start_rev'] = 13
-  test['end_rev'] = 14 
+  test['end_rev'] = 14
   test['start_output'] = None
   test['start_disk'] = None
   test['start_status'] = None
@@ -714,7 +714,7 @@ def build_simple_file_move_tests(sbox, s
   mc['output'] = svntest.verify.ExpectedOutput(
     "Resolved conflicted state of '%s'\n" % source_path, match_all=False
   )
-  mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   mc['status'].tweak(source, status='D ', moved_to=dest)
   mc['status'].add({dest: Item(status='A ', moved_from=source,
                                copied='+', wc_rev='-')})
@@ -733,7 +733,7 @@ def build_simple_file_move_tests(sbox, s
     ]
   )
   # XXX: working breaks the move?  Is that right?
-  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   working['status'].tweak(source, status='D ')
   working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
   working['disk'] = test['up_disk']
@@ -745,7 +745,7 @@ def build_simple_file_move_tests(sbox, s
   # move and update with incoming property modification to source (r14-15)
   test = {}
   test['start_rev'] = 14
-  test['end_rev'] = 15 
+  test['end_rev'] = 15
   test['start_output'] = None
   test['start_disk'] = None
   test['start_status'] = None
@@ -767,7 +767,7 @@ def build_simple_file_move_tests(sbox, s
   mc['output'] = svntest.verify.ExpectedOutput(
     "Resolved conflicted state of '%s'\n" % source_path, match_all=False
   )
-  mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   mc['status'].tweak(source, status='D ', moved_to=dest)
   mc['status'].add({dest: Item(status='A ', moved_from=source,
                                copied='+', wc_rev='-')})
@@ -786,7 +786,7 @@ def build_simple_file_move_tests(sbox, s
     ]
   )
   # XXX: working breaks the move?  Is that right?
-  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   working['status'].tweak(source, status='D ')
   working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
   working['disk'] = test['up_disk']
@@ -798,7 +798,7 @@ def build_simple_file_move_tests(sbox, s
   # move and update with incoming property deletion to source (r15-16)
   test = {}
   test['start_rev'] = 15
-  test['end_rev'] = 16 
+  test['end_rev'] = 16
   test['start_output'] = None
   test['start_disk'] = None
   test['start_status'] = None
@@ -820,7 +820,7 @@ def build_simple_file_move_tests(sbox, s
   mc['output'] = svntest.verify.ExpectedOutput(
     "Resolved conflicted state of '%s'\n" % source_path, match_all=False
   )
-  mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   mc['status'].tweak(source, status='D ', moved_to=dest)
   mc['status'].add({dest: Item(status='A ', moved_from=source,
                                copied='+', wc_rev='-')})
@@ -839,7 +839,7 @@ def build_simple_file_move_tests(sbox, s
     ]
   )
   # XXX: working breaks the move?  Is that right?
-  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev']) 
+  working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
   working['status'].tweak(source, status='D ')
   working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
   working['disk'] = test['up_disk']
@@ -853,7 +853,7 @@ def build_simple_file_move_tests(sbox, s
   # showed no conflict at all on udpate.
   test = {}
   test['start_rev'] = 16
-  test['end_rev'] = 17 
+  test['end_rev'] = 17
   test['start_output'] = None
   test['start_disk'] = None
   test['start_status'] = None
@@ -905,9 +905,9 @@ def build_simple_file_move_func(sbox, so
   def move_func(rev):
     # execute the move
     svntest.actions.run_and_verify_svn(None, None, [], "move",
-                                       source_path, dest_path) 
+                                       source_path, dest_path)
     if move_func.extra_mv_tests:
-      mv_status = svntest.actions.get_virginal_state(wc_dir, rev) 
+      mv_status = svntest.actions.get_virginal_state(wc_dir, rev)
       mv_status.tweak(source, status='D ', moved_to=dest)
       mv_status.add({dest: Item(status='A ', moved_from=source,
                                 copied='+', wc_rev='-')})
@@ -1192,6 +1192,48 @@ value3>>>>>>> (incoming property value)
   svntest.actions.verify_disk(wc_dir, expected_disk, True)
 
 
+@Issue(4356)
+def move_missing(sbox):
+  "move a missing directory"
+
+  sbox.build(read_only=True)
+  wc_dir = sbox.wc_dir
+
+  svntest.main.safe_rmtree(sbox.ospath('A/D/G'))
+
+  expected_err = '.*Can\'t move \'.*G\' to \'.*R\':.*'
+
+  # This move currently fails halfway between adding the dest and
+  # deleting the source
+  svntest.actions.run_and_verify_svn(None, None, expected_err,
+                                     'mv', sbox.ospath('A/D/G'),
+                                           sbox.ospath('R'))
+
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.tweak('A/D/G', 'A/D/G/tau', 'A/D/G/pi', 'A/D/G/rho',
+                        status='! ', entry_status='  ')
+
+  expected_status.add({
+    'R'                 : Item(status='! ', wc_rev='-',
+                               entry_status='A ', entry_copied='+'),
+    'R/pi'              : Item(status='! ', wc_rev='-',
+                               entry_status='  ', entry_copied='+'),
+    'R/tau'             : Item(status='! ', wc_rev='-',
+                               entry_status='  ', entry_copied='+'),
+    'R/rho'             : Item(status='! ', wc_rev='-',
+                               entry_status='  ', entry_copied='+'),
+  })
+
+  # Verify that the status processing doesn't crash
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+  # The issue is a crash when the destination is present
+  os.mkdir(sbox.ospath('R'))
+  expected_status.tweak('R', status='A ', copied='+')
+
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+
 #######################################################################
 # Run the tests
 
@@ -1202,6 +1244,7 @@ test_list = [ None,
               shallower_move_file_test,
               deeper_move_file_test,
               property_merge,
+              move_missing,
             ]
 
 if __name__ == '__main__':

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/patch_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/patch_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/patch_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/patch_tests.py Wed Jun  5 09:22:43 2013
@@ -4617,6 +4617,46 @@ def patch_lacking_trailing_eol_on_contex
                                        expected_output, expected_disk,
                                        expected_status, expected_skip)
 
+def patch_with_custom_keywords(sbox):
+  """patch with custom keywords"""
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  sbox.simple_append('A/mu', '$Qq$\nAB\nZZ\n', truncate=True)
+  sbox.simple_propset('svn:keywords', 'Qq=%R', 'A/mu')
+  sbox.simple_commit()
+  expected_disk = svntest.main.greek_state.copy()
+  expected_disk.tweak('A/mu',
+                      contents='$Qq: %s $\nAB\nZZ\n' % sbox.repo_url)
+  svntest.actions.verify_disk(sbox.wc_dir, expected_disk)
+
+  unidiff_patch = [
+    "Index: A/mu\n",
+    "===================================================================\n",
+    "--- A/mu\t(revision 2)\n",
+    "+++ A/mu\t(working copy)\n",
+    "@@ -1,3 +1,3 @@\n",
+    " $Qq$\n",
+    "-AB\n",
+    "+ABAB\n",
+    " ZZ\n"
+    ]
+
+  patch_file_path = make_patch_path(sbox)
+  svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
+
+  expected_output = [ 'U         %s\n' % sbox.ospath('A/mu') ]
+  expected_disk.tweak('A/mu',
+                      contents='$Qq: %s $\nABAB\nZZ\n' % sbox.repo_url)
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.tweak('A/mu', wc_rev=2)
+  expected_status.tweak('A/mu', status='M ')
+  expected_skip = wc.State('', { })
+  svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+                                       expected_output, expected_disk,
+                                       expected_status, expected_skip)
+
 
 ########################################################################
 #Run the tests
@@ -4669,6 +4709,7 @@ test_list = [ None,
               patch_empty_file,
               patch_apply_no_fuz,
               patch_lacking_trailing_eol_on_context,
+              patch_with_custom_keywords,
             ]
 
 if __name__ == '__main__':

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/prop_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/prop_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/prop_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/prop_tests.py Wed Jun  5 09:22:43 2013
@@ -2603,7 +2603,7 @@ def peg_rev_base_working(sbox):
 
   sbox.build()
   wc_dir = sbox.wc_dir
-  
+
   # set up a local prop mod
   svntest.actions.set_prop('ordinal', 'ninth\n', sbox.ospath('iota'))
   sbox.simple_commit(message='r2')

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/revert_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/revert_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/revert_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/revert_tests.py Wed Jun  5 09:22:43 2013
@@ -792,7 +792,7 @@ def status_of_missing_dir_after_revert(s
 
   svntest.main.safe_rmtree(A_D_G_path)
   expected_status.tweak('A/D/G', status='! ')
-  
+
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
   # When using single-db, we can get back to the virginal state.
@@ -1599,13 +1599,13 @@ def revert_nonexistent(sbox):
 @Issue(4168)
 def revert_obstructing_wc(sbox):
   "revert with an obstructing working copy"
-  
+
   sbox.build(create_wc=False, read_only=True)
   wc_dir = sbox.wc_dir
-  
+
   expected_output = svntest.wc.State(wc_dir, {})
-  expected_disk = svntest.wc.State(wc_dir, {})  
-  
+  expected_disk = svntest.wc.State(wc_dir, {})
+
   # Checkout wc as depth empty
   svntest.actions.run_and_verify_checkout(sbox.repo_url, wc_dir,
                                           expected_output, expected_disk,

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/stat_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/stat_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/stat_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/stat_tests.py Wed Jun  5 09:22:43 2013
@@ -1528,7 +1528,7 @@ def status_depth_update(sbox):
 #----------------------------------------------------------------------
 def status_depth_update_local_modifications(sbox):
   "run 'status --depth=X -u' with local changes"
-  
+
   sbox.build()
   wc_dir = sbox.wc_dir
   A_path = sbox.ospath('A')
@@ -1978,7 +1978,7 @@ def status_not_present(sbox):
                                      sbox.ospath('no-file'))
 
 # Skip this test is a .svn dir exists in the root directory
-@Skip(lambda: os.path.exists("/%s" % svntest.main.get_admin_name())) 
+@Skip(lambda: os.path.exists("/%s" % svntest.main.get_admin_name()))
 def status_unversioned_dir(sbox):
   "status on unversioned dir"
   sbox.build(read_only = True, create_wc = False)

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svnadmin_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svnadmin_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svnadmin_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svnadmin_tests.py Wed Jun  5 09:22:43 2013
@@ -548,6 +548,8 @@ def verify_windows_paths_in_repos(sbox):
 
   exit_code, output, errput = svntest.main.run_svnadmin("verify",
                                                         sbox.repo_dir)
+  if errput:
+    raise SVNUnexpectedStderr(errput)
 
   # unfortunately, FSFS needs to do more checks than BDB resulting in
   # different progress output
@@ -557,13 +559,13 @@ def verify_windows_paths_in_repos(sbox):
       'STDERR', ["* Verifying repository metadata ...\n",
                  "* Verified revision 0.\n",
                  "* Verified revision 1.\n",
-                 "* Verified revision 2.\n"], errput)
+                 "* Verified revision 2.\n"], output)
   else:
     svntest.verify.compare_and_display_lines(
       "Error while running 'svnadmin verify'.",
       'STDERR', ["* Verified revision 0.\n",
                  "* Verified revision 1.\n",
-                 "* Verified revision 2.\n"], errput)
+                 "* Verified revision 2.\n"], output)
 
 #----------------------------------------------------------------------
 
@@ -1062,8 +1064,10 @@ def verify_with_invalid_revprops(sbox):
   exit_code, output, errput = svntest.main.run_svnadmin("verify",
                                                         sbox.repo_dir)
 
+  if errput:
+    raise SVNUnexpectedStderr(errput)
   if svntest.verify.verify_outputs(
-    "Output of 'svnadmin verify' is unexpected.", None, errput, None,
+    "Output of 'svnadmin verify' is unexpected.", None, output, None,
     ".*Verified revision 0*"):
     raise svntest.Failure
 
@@ -1621,7 +1625,8 @@ def hotcopy_incremental_packed(sbox):
 
   # Pack revisions 0 and 1.
   svntest.actions.run_and_verify_svnadmin(
-    None, None, [], "pack", os.path.join(cwd, sbox.repo_dir))
+    None, ['Packing revisions in shard 0...done.\n'], [], "pack",
+    os.path.join(cwd, sbox.repo_dir))
 
   # Commit 5 more revs, hotcopy and pack after each commit.
   for i in [1, 2, 3, 4, 5]:
@@ -1637,8 +1642,12 @@ def hotcopy_incremental_packed(sbox):
     if i < 5:
       sbox.simple_mkdir("newdir-%i" % i)
       sbox.simple_commit()
+      if not i % 2:
+        expected_output = ['Packing revisions in shard %d...done.\n' % (i/2)]
+      else:
+        expected_output = []
       svntest.actions.run_and_verify_svnadmin(
-        None, None, [], "pack", os.path.join(cwd, sbox.repo_dir))
+        None, expected_output, [], "pack", os.path.join(cwd, sbox.repo_dir))
 
 
 def locking(sbox):

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svnauthz_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svnauthz_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svnauthz_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svnauthz_tests.py Wed Jun  5 09:22:43 2013
@@ -90,7 +90,7 @@ def svnauthz_validate_file_test(sbox):
   (authz_fd, authz_path) = tempfile.mkstemp()
   authz_content = "[/]\n* = rw\n"
   svntest.main.file_write(authz_path, authz_content)
-  
+
   # Valid authz file
   svntest.actions.run_and_verify_svnauthz("Valid authz file", None, None,
                                           0, False, "validate", authz_path)
@@ -162,7 +162,7 @@ def svnauthz_validate_txn_test(sbox):
                                    repr([('validate', 'A/authz')]))
   svntest.main.create_python_hook_script(pre_commit_hook, hook_instance)
 
-  # Create an authz file 
+  # Create an authz file
   authz_content = "[/]\n* = rw\n"
   authz_path = os.path.join(wc_dir, 'A/authz')
   svntest.main.file_write(authz_path, authz_content)
@@ -249,7 +249,7 @@ def svnauthz_accessof_file_test(sbox):
                                           "--path", "/jokes", "--username",
                                           "groucho")
 
-  # User groucho specified on /jokes with the repo comedy will be rw 
+  # User groucho specified on /jokes with the repo comedy will be rw
   svntest.actions.run_and_verify_svnauthz("User access on path with repo",
                                           ["rw\n"], None, 0, False, "accessof",
                                           authz_path, "--path", "/jokes",
@@ -318,13 +318,13 @@ def svnauthz_accessof_repo_test(sbox):
                                           "--path", "/jokes", "--username",
                                           "groucho")
 
-  # User groucho specified on /jokes with the repo comedy will be rw 
+  # User groucho specified on /jokes with the repo comedy will be rw
   svntest.actions.run_and_verify_svnauthz("User access on path with repo",
                                           ["rw\n"], None, 0, False, "accessof",
                                           authz_url, "--path", "/jokes",
                                           "--username", "groucho",
                                           "--repository", "comedy")
- 
+
 def svnauthz_accessof_groups_file_test(sbox):
   "test 'svnauthz accessof --groups-file' on files"
 
@@ -359,7 +359,7 @@ def svnauthz_accessof_groups_file_test(s
                                           ["no\n"], None,
                                           0, False, "accessof", authz_path,
                                           "--groups-file", groups_path,
-                                          "--username", "groucho")  
+                                          "--username", "groucho")
 
   # Anonymous access specified on /jokes with the repo comedy will be no.
   svntest.actions.run_and_verify_svnauthz("Anonymous access on path with repo",
@@ -449,7 +449,7 @@ def svnauthz_accessof_groups_repo_test(s
                                           ["no\n"], None,
                                           0, False, "accessof", authz_url,
                                           "--groups-file", groups_url,
-                                          "--username", "groucho")  
+                                          "--username", "groucho")
 
   # Anonymous access specified on /jokes with the repo comedy will be no.
   svntest.actions.run_and_verify_svnauthz("Anonymous access on path with repo",
@@ -592,7 +592,7 @@ def svnauthz_accessof_is_file_test(sbox)
                                           "--username", "groucho",
                                           "--is", "no")
 
-  # User groucho specified on /jokes with the repo comedy will be rw 
+  # User groucho specified on /jokes with the repo comedy will be rw
   # Test --is rw returns 0.
   svntest.actions.run_and_verify_svnauthz("User access on path w/ repo --is rw",
                                           None, None, 0, False, "accessof",
@@ -623,7 +623,7 @@ def svnauthz_accessof_is_file_test(sbox)
       match_all=False
   )
   svntest.actions.run_and_verify_svnauthz("--is with invalid authz file",
-                                          None, expected_out, 1, False, 
+                                          None, expected_out, 1, False,
                                           "accessof", authz_path, "--path",
                                           "/jokes", "--username", "groucho",
                                           "--repository", "comedy", "--is",
@@ -761,7 +761,7 @@ def svnauthz_accessof_is_repo_test(sbox)
                                           "--username", "groucho",
                                           "--is", "no")
 
-  # User groucho specified on /jokes with the repo comedy will be rw 
+  # User groucho specified on /jokes with the repo comedy will be rw
   # Test --is rw returns 0.
   svntest.actions.run_and_verify_svnauthz("User access on path w/ repo --is rw",
                                           None, None, 0, False, "accessof",
@@ -818,7 +818,7 @@ def svnauthz_accessof_txn_test(sbox):
                                           '--is rw A/authz')]))
   svntest.main.create_python_hook_script(pre_commit_hook, hook_instance)
 
-  # Create an authz file 
+  # Create an authz file
   authz_content = "[/]\n* = rw\n"
   authz_path = os.path.join(wc_dir, 'A/authz')
   svntest.main.file_write(authz_path, authz_content)
@@ -875,9 +875,9 @@ def svnauthz_accessof_txn_test(sbox):
 
 def svnauthz_compat_mode_file_test(sbox):
   "test 'svnauthz-validate' compatability mode file"
- 
 
-  # Create an authz file 
+
+  # Create an authz file
   (authz_fd, authz_path) = tempfile.mkstemp()
   authz_content = "[/]\n* = rw\n"
   svntest.main.file_write(authz_path, authz_content)
@@ -912,7 +912,7 @@ def svnauthz_compat_mode_repo_test(sbox)
   wc_dir = sbox.wc_dir
   repo_url = sbox.repo_url
 
-  # Create an authz file 
+  # Create an authz file
   authz_content = "[/]\n* = rw\n"
   authz_path = os.path.join(wc_dir, 'A/authz')
   svntest.main.file_write(authz_path, authz_content)
@@ -944,7 +944,7 @@ def svnauthz_compat_mode_repo_test(sbox)
                                           authz_path)
 
   # Check a non-existant url.
-  # Exit code really should be 2 since this is an operational error. 
+  # Exit code really should be 2 since this is an operational error.
   svntest.actions.run_and_verify_svnauthz(
       "svnauthz-validate on non-existant file", None, None, 2, True,
       repo_url + "/zilch"

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svndumpfilter_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svndumpfilter_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svndumpfilter_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svndumpfilter_tests.py Wed Jun  5 09:22:43 2013
@@ -677,7 +677,7 @@ def accepts_deltas(sbox):
   load_and_verify_dumpstream(sbox, [], [], expected_revs, True, dump_out,
                              '--ignore-uuid')
 
-  
+
 
 @Issue(4234)
 def dumpfilter_targets_expect_leading_slash_prefixes(sbox):

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svneditor.bat
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svneditor.bat?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svneditor.bat (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svneditor.bat Wed Jun  5 09:22:43 2013
@@ -19,7 +19,7 @@ rem specific language governing permissi
 rem under the License.
 rem
 rem
-rem the svneditor.py script is expected to be in the same directory as the 
+rem the svneditor.py script is expected to be in the same directory as the
 rem .bat file
 rem SVN_TEST_PYTHON set by svntest/main.py
 "%SVN_TEST_PYTHON%" "%~dp0\svneditor.py" %*

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svnmucc_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svnmucc_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svnmucc_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svnmucc_tests.py Wed Jun  5 09:22:43 2013
@@ -375,7 +375,7 @@ def too_many_log_messages(sbox):
   svntest.main.file_append(msg_file, 'some log message')
   err_msg = ["svnmucc: E205000: --message (-m), --file (-F), and "
              "--with-revprop=svn:log are mutually exclusive"]
-             
+
   xtest_svnmucc(sbox.repo_url, err_msg,
                 '--non-interactive',
                 '-m', 'log msg',
@@ -397,11 +397,11 @@ def too_many_log_messages(sbox):
                 '-F', msg_file,
                 '--with-revprop', 'svn:log=proppy log message',
                 'mkdir', 'A/subdir')
-  
+
 @Issues(3418)
 def no_log_msg_non_interactive(sbox):
   "test non-interactive without a log message"
-  
+
   sbox.build(create_wc=False)
   xtest_svnmucc(sbox.repo_url,
                 ["svnmucc: E205001: Cannot invoke editor to get log message "
@@ -409,7 +409,7 @@ def no_log_msg_non_interactive(sbox):
                  ], #---------
                 '--non-interactive',
                 'mkdir', 'A/subdir')
-  
+
 
 ######################################################################
 

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svnrdump_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svnrdump_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svnrdump_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svnrdump_tests.py Wed Jun  5 09:22:43 2013
@@ -367,7 +367,7 @@ def copy_bad_line_endings_load(sbox):
   "load: inconsistent line endings in svn:* props"
   run_load_test(sbox, "copy-bad-line-endings.dump",
                 expected_dumpfile_name="copy-bad-line-endings.expected.dump")
-          
+
 def copy_bad_line_endings2_dump(sbox):
   "dump: non-LF line endings in svn:* props"
   run_dump_test(sbox, "copy-bad-line-endings2.dump",

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/actions.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/actions.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/actions.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/actions.py Wed Jun  5 09:22:43 2013
@@ -1628,7 +1628,7 @@ def run_and_verify_inherited_prop_xml(pa
   expected_iprops = {}
   for x in expected_inherited_props:
     if sandbox.is_url(x):
-      expected_iprops[x] = expected_inherited_props[x]    
+      expected_iprops[x] = expected_inherited_props[x]
     else:
       expected_iprops[os.path.abspath(x)] = expected_inherited_props[x]
 

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/main.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/main.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/main.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/main.py Wed Jun  5 09:22:43 2013
@@ -53,7 +53,7 @@ import svntest
 from svntest import Failure
 from svntest import Skip
 
-SVN_VER_MINOR = 8
+SVN_VER_MINOR = 9
 
 ######################################################################
 #
@@ -135,6 +135,8 @@ wc_passwd = 'rayjandom'
 # scenarios
 wc_author2 = 'jconstant' # use the same password as wc_author
 
+stack_trace_regexp = r'(?:.*subversion[\\//].*\.c:[0-9]*,$|.*apr_err=.*)'
+
 # Set C locale for command line programs
 os.environ['LC_ALL'] = 'C'
 
@@ -520,13 +522,13 @@ def run_command_stdin(command, error_exp
                                                         *varargs)
 
   def _line_contains_repos_diskpath(line):
-    # ### Note: this assumes that either svn-test-work isn't a symlink, 
+    # ### Note: this assumes that either svn-test-work isn't a symlink,
     # ### or the diskpath isn't realpath()'d somewhere on the way from
     # ### the server's configuration and the client's stderr.  We could
     # ### check for both the symlinked path and the realpath.
     return \
          os.path.join('cmdline', 'svn-test-work', 'repositories') in line \
-      or os.path.join('cmdline', 'svn-test-work', 'local_tmp', 'repos') in line 
+      or os.path.join('cmdline', 'svn-test-work', 'local_tmp', 'repos') in line
 
   for lines, name in [[stdout_lines, "stdout"], [stderr_lines, "stderr"]]:
     if is_ra_type_file() or 'svnadmin' in command or 'svnlook' in command:

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/sandbox.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/sandbox.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/sandbox.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/sandbox.py Wed Jun  5 09:22:43 2013
@@ -362,6 +362,13 @@ class Sandbox:
        DEST is a relpath relative to the WC."""
     open(self.ospath(dest), truncate and 'w' or 'a').write(contents)
 
+  def simple_lock(self, *targets):
+    """Lock TARGETS in the WC.
+       TARGETS are relpaths relative to the WC."""
+    assert len(targets) > 0
+    targets = self.ospaths(targets)
+    svntest.main.run_svn(False, 'lock', *targets)
+
 
 def is_url(target):
   return (target.startswith('^/')
@@ -389,7 +396,7 @@ def _cleanup_test_path(path, retrying=Fa
     logger.info("CLEANUP: %s", path)
 
   try:
-    svntest.main.safe_rmtree(path)
+    svntest.main.safe_rmtree(path, retrying)
   except:
     logger.info("WARNING: cleanup failed, will try again later")
     _deferred_test_paths.append(path)

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/update_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/update_tests.py Wed Jun  5 09:22:43 2013
@@ -6015,7 +6015,7 @@ def update_edit_delete_obstruction(sbox)
     'A/D/H'     : Item(status='  ', treeconflict='U'),
     'A/D/H/chi' : Item(status='  ', treeconflict='D'),
     'A/B'       : Item(prev_status='  ', prev_treeconflict='D', # Replacement
-                       status='  ', treeconflict='A'), 
+                       status='  ', treeconflict='A'),
     'iota'      : Item(status='A ', prev_status='D '), # Replacement
   })
 
@@ -6277,7 +6277,7 @@ def update_removes_switched(sbox):
     'C'                 : Item(status='  ', wc_rev='3'),
     'mu'                : Item(status='  ', wc_rev='3'),
   })
-  
+
   # And this final update brings back the node, as it was before switching.
   svntest.actions.run_and_verify_update(wc_dir,
                                        expected_output,

Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/upgrade_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/upgrade_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/upgrade_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/upgrade_tests.py Wed Jun  5 09:22:43 2013
@@ -1278,6 +1278,153 @@ def upgrade_from_1_7_conflict(sbox):
   # a working copy used to cause a pointless 'upgrade required' error.
   svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
 
+def do_iprops_upgrade(nonrootfile, rootfile, sbox):
+
+  wc_dir = sbox.wc_dir
+
+  replace_sbox_with_tarfile(sbox, nonrootfile)
+  svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
+  svntest.actions.run_and_verify_svn(None, None, [], 'relocate',
+                                     'file:///tmp/repo', sbox.repo_url, wc_dir)
+
+  expected_output = []
+  expected_disk = svntest.wc.State('', {
+      'E'       : Item(),
+      'E/alpha' : Item(contents="This is the file 'alpha'.\n"),
+      'E/beta'  : Item(contents="This is the file 'beta'.\n"),
+      'F'       : Item(),
+      'lambda'  : Item(contents="This is the file 'lambda'.\n"),
+      })
+  expected_status = svntest.wc.State(sbox.wc_dir, {
+      ''        : Item(),
+      'E'       : Item(switched='S'),
+      'E/alpha' : Item(),
+      'E/beta'  : Item(),
+      'F'       : Item(),
+      'lambda'  : Item(),
+      })
+  expected_status.tweak(status='  ', wc_rev=2)
+
+  # No inherited props after upgrade until an update
+  expected_iprops = {}
+  expected_explicit_props = {}
+  svntest.actions.run_and_verify_inherited_prop_xml(
+    wc_dir, expected_iprops, expected_explicit_props)
+  svntest.actions.run_and_verify_inherited_prop_xml(
+    sbox.ospath('E'), expected_iprops, expected_explicit_props)
+
+  # Update populates the inherited props
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status)
+
+  expected_iprops = {sbox.repo_url        : {'p'  : 'v'},
+                     sbox.repo_url + '/A' : {'pA' : 'vA'}}
+  svntest.actions.run_and_verify_inherited_prop_xml(
+    wc_dir, expected_iprops, expected_explicit_props)
+
+  expected_iprops = {sbox.repo_url        : {'p'  : 'v'},
+                     sbox.repo_url + '/X' : {'pX' : 'vX'}}
+  svntest.actions.run_and_verify_inherited_prop_xml(
+    sbox.ospath('E'), expected_iprops, expected_explicit_props)
+
+  # Now try with a repository root working copy
+  replace_sbox_with_tarfile(sbox, rootfile)
+  svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
+  svntest.actions.run_and_verify_svn(None, None, [], 'relocate',
+                                     'file:///tmp/repo', sbox.repo_url, wc_dir)
+
+  # Unswitched inherited props available after upgrade
+  expected_iprops = {wc_dir           : {'p'  : 'v'},
+                     sbox.ospath('A') : {'pA' : 'vA'}}
+  svntest.actions.run_and_verify_inherited_prop_xml(
+    sbox.ospath('A/B'), expected_iprops, expected_explicit_props)
+
+  # Switched inherited props not populated until update after upgrade
+  expected_iprops = {}
+  svntest.actions.run_and_verify_inherited_prop_xml(
+    sbox.ospath('A/B/E'), expected_iprops, expected_explicit_props)
+
+  expected_disk = svntest.wc.State('', {
+      'A'     : Item(),
+      'A/B'   : Item(),
+      'A/B/E' : Item(),
+      })
+  expected_status = svntest.wc.State(sbox.wc_dir, {
+      ''      : Item(),
+      'A'     : Item(),
+      'A/B'   : Item(),
+      'A/B/E' : Item(switched='S'),
+      })
+  expected_status.tweak(status='  ', wc_rev=2)
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status)
+
+  expected_iprops = {wc_dir           : {'p'  : 'v'},
+                     sbox.ospath('A') : {'pA' : 'vA'}}
+  svntest.actions.run_and_verify_inherited_prop_xml(
+    sbox.ospath('A/B'), expected_iprops, expected_explicit_props)
+
+  expected_iprops = {sbox.repo_url        : {'p'  : 'v'},
+                     sbox.repo_url + '/X' : {'pX' : 'vX'}}
+  expected_explicit_props = {}
+  svntest.actions.run_and_verify_inherited_prop_xml(
+    sbox.ospath('A/B/E'), expected_iprops, expected_explicit_props)
+
+def iprops_upgrade(sbox):
+  "inherited properties after upgrade from 1.7"
+
+  sbox.build()
+
+  sbox.simple_copy('A', 'X')
+  sbox.simple_propset('p', 'v', '')
+  sbox.simple_propset('pA', 'vA', 'A')
+  sbox.simple_propset('pX', 'vX', 'X')
+  sbox.simple_commit()
+  svntest.main.run_svnadmin('setuuid', sbox.repo_dir,
+                            '8f4d0ebe-2ebf-4f62-ad11-804fd88c2382')
+
+  do_iprops_upgrade('iprops_upgrade_nonroot.tar.bz2',
+                    'iprops_upgrade_root.tar.bz2',
+                    sbox)
+
+def iprops_upgrade1_6(sbox):
+  "inherited properties after upgrade from 1.6"
+
+  sbox.build()
+
+  sbox.simple_copy('A', 'X')
+  sbox.simple_propset('p', 'v', '')
+  sbox.simple_propset('pA', 'vA', 'A')
+  sbox.simple_propset('pX', 'vX', 'X')
+  sbox.simple_commit()
+  svntest.main.run_svnadmin('setuuid', sbox.repo_dir,
+                            '8f4d0ebe-2ebf-4f62-ad11-804fd88c2382')
+
+  do_iprops_upgrade('iprops_upgrade_nonroot1_6.tar.bz2',
+                    'iprops_upgrade_root1_6.tar.bz2',
+                    sbox)
+
+def changelist_upgrade_1_6(sbox):
+  "upgrade from 1.6 with changelist"
+
+  sbox.build(create_wc = False)
+  svntest.main.run_svnadmin('setuuid', sbox.repo_dir,
+                            'aa4c97bd-2e1a-4e55-a1e5-3db22cff2673')
+  replace_sbox_with_tarfile(sbox, 'changelist_upgrade_1_6.tar.bz2')
+  svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
+
+  exit_code, output, errput = svntest.main.run_svn(None, 'info', sbox.wc_dir,
+                                                   '--depth', 'infinity',
+                                                   '--changelist', 'foo')
+  paths = [x for x in output if x[:6] == 'Path: ']
+  expected_paths = ['Path: %s\n' % sbox.ospath('A/D/gamma')]
+  if paths != expected_paths:
+    raise svntest.Failure("changelist not matched")
+
 ########################################################################
 # Run the tests
 
@@ -1330,6 +1477,9 @@ test_list = [ None,
               upgrade_missing_replaced,
               upgrade_not_present_replaced,
               upgrade_from_1_7_conflict,
+              iprops_upgrade,
+              iprops_upgrade1_6,
+              changelist_upgrade_1_6,
              ]
 
 

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_client/client-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_client/client-test.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_client/client-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_client/client-test.c Wed Jun  5 09:22:43 2013
@@ -400,7 +400,7 @@ test_patch(const svn_test_opts_t *opts,
       SVN_ERR(svn_io_file_write(patch_file, unidiff_patch[i], &len, pool));
       SVN_TEST_ASSERT(len == strlen(unidiff_patch[i]));
     }
-  SVN_ERR(svn_io_file_flush_to_disk(patch_file, pool));
+  SVN_ERR(svn_io_file_flush(patch_file, pool));
 
   /* Apply the patch. */
   pcb.patched_tempfiles = apr_hash_make(pool);

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/random-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/random-test.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/random-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/random-test.c Wed Jun  5 09:22:43 2013
@@ -500,6 +500,8 @@ random_combine_test(apr_pool_t *pool)
 {
   apr_uint32_t seed;
   svn_error_t *err = do_random_combine_test(pool, &seed);
+  if (err)
+    fprintf(stderr, "SEED: %lu\n", (unsigned long)seed);
   return err;
 }
 

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/range-index-test.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/range-index-test.h?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/range-index-test.h (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/range-index-test.h Wed Jun  5 09:22:43 2013
@@ -27,7 +27,7 @@
 #include "../../libsvn_delta/compose_delta.c"
 
 static range_index_node_t *prev_node, *prev_prev_node;
-static apr_off_t
+static apr_size_t
 walk_range_index(range_index_node_t *node, const char **msg)
 {
   apr_off_t ret;
@@ -70,19 +70,18 @@ print_node_data(range_index_node_t *node
 {
   if (-node->target_offset == ndx)
     {
-      printf("   * Node: [%3"APR_OFF_T_FMT
-             ",%3"APR_OFF_T_FMT
-             ") = %-5"APR_OFF_T_FMT"%s\n",
+      printf("   * Node: [%3"APR_SIZE_T_FMT
+             ",%3"APR_SIZE_T_FMT
+             ") = %-5"APR_SIZE_T_FMT"%s\n",
              node->offset, node->limit, -node->target_offset, msg);
     }
   else
     {
-      printf("     Node: [%3"APR_OFF_T_FMT
-             ",%3"APR_OFF_T_FMT
-             ") = %"APR_OFF_T_FMT"\n",
+      printf("     Node: [%3"APR_SIZE_T_FMT
+             ",%3"APR_SIZE_T_FMT
+             ") = %"APR_SIZE_T_FMT"\n",
              node->offset, node->limit,
-             (node->target_offset < 0
-              ? -node->target_offset : node->target_offset));
+             node->target_offset);
     }
 }
 
@@ -154,13 +153,13 @@ random_range_index_test(apr_pool_t *pool
   ndx = create_range_index(pool);
   for (i = 1; i <= iterations; ++i)
     {
-      apr_off_t offset = svn_test_rand(&seed) % 47;
-      apr_off_t limit = offset + svn_test_rand(&seed) % 16 + 1;
+      apr_size_t offset = svn_test_rand(&seed) % 47;
+      apr_size_t limit = offset + svn_test_rand(&seed) % 16 + 1;
       range_list_node_t *list, *r;
-      apr_off_t ret;
+      apr_size_t ret;
       const char *msg2;
 
-      printf("%3d: Inserting [%3"APR_OFF_T_FMT",%3"APR_OFF_T_FMT") ...",
+      printf("%3d: Inserting [%3"APR_SIZE_T_FMT",%3"APR_SIZE_T_FMT") ...",
              i, offset, limit);
       splay_range_index(offset, ndx);
       list = build_range_list(offset, limit, ndx);
@@ -170,7 +169,7 @@ random_range_index_test(apr_pool_t *pool
       if (ret == 0)
         {
           for (r = list; r; r = r->next)
-            printf(" %s[%3"APR_OFF_T_FMT",%3"APR_OFF_T_FMT")",
+            printf(" %s[%3"APR_SIZE_T_FMT",%3"APR_SIZE_T_FMT")",
                    (r->kind == range_from_source ?
                     (++src_cp, "S") : (++tgt_cp, "T")),
                    r->offset, r->limit);