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 2013/01/09 00:46:03 UTC

svn commit: r1430634 [7/7] - in /subversion/branches/ev2-export: ./ build/win32/ doc/ subversion/bindings/cxxhl/src/ subversion/bindings/swig/ruby/test/ subversion/include/ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_delta/ ...

Modified: subversion/branches/ev2-export/subversion/tests/cmdline/merge_tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/merge_tree_conflict_tests.py?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/merge_tree_conflict_tests.py (original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/merge_tree_conflict_tests.py Tue Jan  8 23:46:00 2013
@@ -765,7 +765,7 @@ def tree_conflicts_and_obstructions(sbox
     'beta'        : Item(status='  ', wc_rev=3),
     })
   expected_skip = wc.State(branch_path, {
-    'alpha-moved' : Item(),
+    'alpha-moved' : Item(verb='Skipped'),
     })
 
   svntest.actions.run_and_verify_merge(branch_path,
@@ -1313,16 +1313,16 @@ def tree_conflicts_merge_edit_onto_missi
     })
 
   expected_skip = svntest.wc.State('', {
-    'F/alpha'           : Item(),
+    'F/alpha'           : Item(verb='Skipped missing target'),
     # Obstruction handling improvements in 1.7 and 1.8 added
-    'DF/D1/beta'        : Item(),
-    'DDD/D1/D2/D3/zeta' : Item(),
-    'DDD/D1/D2/D3'      : Item(),
-    'DDF/D1/D2/gamma'   : Item(),
-    'D/D1/delta'        : Item(),
-    'D/D1'              : Item(),
-    'DD/D1/D2/epsilon'  : Item(),
-    'DD/D1/D2'          : Item(),
+    'DF/D1/beta'        : Item(verb='Skipped missing target'),
+    'DDD/D1/D2/D3/zeta' : Item(verb='Skipped'),
+    'DDD/D1/D2/D3'      : Item(verb='Skipped missing target'),
+    'DDF/D1/D2/gamma'   : Item(verb='Skipped missing target'),
+    'D/D1/delta'        : Item(verb='Skipped'),
+    'D/D1'              : Item(verb='Skipped missing target'),
+    'DD/D1/D2/epsilon'  : Item(verb='Skipped'),
+    'DD/D1/D2'          : Item(verb='Skipped missing target'),
     })
 
   # Currently this test fails because some parts of the merge
@@ -1385,14 +1385,14 @@ def tree_conflicts_merge_del_onto_missin
     })
 
   expected_skip = svntest.wc.State('', {
-    'F/alpha'           : Item(),
-    'D/D1'              : Item(),
+    'F/alpha'           : Item(verb='Skipped missing target'),
+    'D/D1'              : Item(verb='Skipped missing target'),
     # Obstruction handling improvements in 1.7 and 1.8 added
-    'D/D1'              : Item(),
-    'DD/D1/D2'          : Item(),
-    'DF/D1/beta'        : Item(),
-    'DDD/D1/D2/D3'      : Item(),
-    'DDF/D1/D2/gamma'   : Item(),
+    'D/D1'              : Item(verb='Skipped missing target'),
+    'DD/D1/D2'          : Item(verb='Skipped missing target'),
+    'DF/D1/beta'        : Item(verb='Skipped missing target'),
+    'DDD/D1/D2/D3'      : Item(verb='Skipped missing target'),
+    'DDF/D1/D2/gamma'   : Item(verb='Skipped missing target'),
     })
 
   svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,

Modified: subversion/branches/ev2-export/subversion/tests/cmdline/patch_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/patch_tests.py?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/patch_tests.py (original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/patch_tests.py Tue Jan  8 23:46:00 2013
@@ -278,7 +278,7 @@ def patch_absolute_paths(sbox):
   expected_status.tweak('A/B/E/alpha', status='M ')
 
   expected_skip = wc.State('', {
-    lambda_path:  Item(),
+    lambda_path:  Item(verb='Skipped missing target'),
   })
 
   svntest.actions.run_and_verify_patch('.', os.path.abspath(patch_file_path),
@@ -1012,9 +1012,11 @@ def patch_add_new_dir(sbox):
            'A/C'       : Item(status='D ', wc_rev=1),
   })
 
-  expected_skip = wc.State('', {A_Z_new_path : Item(),
-                                A_B_E_Y_new_path : Item(),
-                                A_C_new_path : Item()})
+  expected_skip = wc.State(
+    '',
+    {A_Z_new_path     : Item(verb='Skipped missing target'),
+     A_B_E_Y_new_path : Item(verb='Skipped missing target'),
+     A_C_new_path     : Item(verb='Skipped missing target')})
 
   svntest.actions.run_and_verify_patch(wc_dir,
                                        os.path.abspath(patch_file_path),
@@ -2452,7 +2454,7 @@ def patch_same_twice(sbox):
     '  Skipped paths: 1\n',
   ]
 
-  expected_skip = wc.State('', {beta_path : Item()})
+  expected_skip = wc.State('', {beta_path : Item(verb='Skipped')})
 
   # See above comment about the iota patch being applied twice.
   iota_contents += "Some more bytes\n"
@@ -3973,7 +3975,9 @@ def patch_delete_and_skip(sbox):
   expected_status.tweak('A/B/E/alpha', status='D ')
   expected_status.tweak('A/B/E/beta', status='D ')
 
-  expected_skip = wc.State('', {skipped_path: Item()})
+  expected_skip = wc.State(
+    '',
+    {skipped_path: Item(verb='Skipped missing target')})
 
   svntest.actions.run_and_verify_patch('.', os.path.abspath(patch_file_path),
                                        expected_output,

Modified: subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py (original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py Tue Jan  8 23:46:00 2013
@@ -1740,11 +1740,11 @@ def status_with_tree_conflicts(sbox):
   # check status of G
   expected = svntest.verify.UnorderedOutput(
          ["A  +  C %s\n" % rho,
-          "      >   local edit, incoming delete upon update\n",
+          "      >   local file edit, incoming file delete upon update\n",
           "D     C %s\n" % pi,
-          "      >   local delete, incoming edit upon update\n",
+          "      >   local file delete, incoming file edit upon update\n",
           "!     C %s\n" % tau,
-          "      >   local delete, incoming delete upon update\n",
+          "      >   local file delete, incoming file delete upon update\n",
           "Summary of conflicts:\n",
           "  Tree conflicts: 3\n",
           ])
@@ -1758,11 +1758,11 @@ def status_with_tree_conflicts(sbox):
   expected = svntest.verify.UnorderedOutput(
          ["                 2        2 jrandom      %s\n" % G,
           "D     C          2        2 jrandom      %s\n" % pi,
-          "      >   local delete, incoming edit upon update\n",
+          "      >   local file delete, incoming file edit upon update\n",
           "A  +  C          -        1 jrandom      %s\n" % rho,
-          "      >   local edit, incoming delete upon update\n",
+          "      >   local file edit, incoming file delete upon update\n",
           "!     C                                  %s\n" % tau,
-          "      >   local delete, incoming delete upon update\n",
+          "      >   local file delete, incoming file delete upon update\n",
           "Summary of conflicts:\n",
           "  Tree conflicts: 3\n",
           ])

Modified: subversion/branches/ev2-export/subversion/tests/cmdline/svntest/wc.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/svntest/wc.py?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/svntest/wc.py (original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/svntest/wc.py Tue Jan  8 23:46:00 2013
@@ -94,7 +94,7 @@ _re_parse_status = re.compile('^([?!MACD
                               '((?P<wc_rev>\d+|-|\?) +(\d|-|\?)+ +(\S+) +)?'
                               '(?P<path>.+)$')
 
-_re_parse_skipped = re.compile("^Skipped[^']* '(.+)'( --.*)?\n")
+_re_parse_skipped = re.compile("^(Skipped[^']*) '(.+)'( --.*)?\n")
 
 _re_parse_summarize = re.compile("^([MAD ][M ])      (.+)\n")
 
@@ -444,7 +444,8 @@ class State:
 
       match = _re_parse_skipped.search(line)
       if match:
-        desc[to_relpath(match.group(1))] = StateItem()
+        desc[to_relpath(match.group(2))] =  StateItem(
+          verb=(match.group(1).strip(':')))
 
     return cls('', desc)
 

Modified: subversion/branches/ev2-export/subversion/tests/cmdline/switch_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/switch_tests.py?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/switch_tests.py (original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/switch_tests.py Tue Jan  8 23:46:00 2013
@@ -891,7 +891,7 @@ def obstructed_switch(sbox):
 
   # svn info A/B/E/alpha
   expected_stdout = verify.RegexOutput(
-                      ".*local unversioned, incoming add upon switch",
+                      ".*local file unversioned, incoming file add upon switch",
                       match_all=False)
   actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'info',
     A_B_E_alpha)
@@ -1285,7 +1285,7 @@ def forced_switch_failures(sbox):
 
   # svn info A/B/F/pi
   expected_stdout = verify.ExpectedOutput(
-    'Tree conflict: local unversioned, incoming add upon switch\n',
+    'Tree conflict: local file unversioned, incoming file add upon switch\n',
     match_all=False)
 
   actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'info',
@@ -2349,37 +2349,37 @@ def tree_conflicts_on_switch_1_1(sbox):
   expected_info = {
     'F/alpha' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon switch'
+        '^local file delete, incoming file edit upon switch'
         + ' Source  left: .file.*/F/alpha@2'
         + ' Source right: .file.*/F/alpha@3$',
     },
     'DF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon switch'
+        '^local dir delete, incoming dir edit upon switch'
         + ' Source  left: .dir.*/DF/D1@2'
         + ' Source right: .dir.*/DF/D1@3$',
     },
     'DDF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon switch'
+        '^local dir delete, incoming dir edit upon switch'
         + ' Source  left: .dir.*/DDF/D1@2'
         + ' Source right: .dir.*/DDF/D1@3$',
     },
     'D/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon switch'
+        '^local dir delete, incoming dir edit upon switch'
         + ' Source  left: .dir.*/D/D1@2'
         + ' Source right: .dir.*/D/D1@3$',
     },
     'DD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon switch'
+        '^local dir delete, incoming dir edit upon switch'
         + ' Source  left: .dir.*/DD/D1@2'
         + ' Source right: .dir.*/DD/D1@3$',
     },
     'DDD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon switch'
+        '^local dir delete, incoming dir edit upon switch'
         + ' Source  left: .dir.*/DDD/D1@2'
         + ' Source right: .dir.*/DDD/D1@3$',
     },
@@ -2447,37 +2447,37 @@ def tree_conflicts_on_switch_1_2(sbox):
   expected_info = {
     'F/alpha' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon switch'
+        '^local file delete, incoming file delete upon switch'
         + ' Source  left: .file.*/F/alpha@2'
         + ' Source right: .none.*(/F/alpha@3)?$',
     },
     'DF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon switch'
+        '^local dir delete, incoming dir edit upon switch'
         + ' Source  left: .dir.*/DF/D1@2'
         + ' Source right: .dir.*/DF/D1@3$',
     },
     'DDF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon switch'
+        '^local dir delete, incoming dir edit upon switch'
         + ' Source  left: .dir.*/DDF/D1@2'
         + ' Source right: .dir.*/DDF/D1@3$',
     },
     'D/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon switch'
+        '^local dir delete, incoming dir delete upon switch'
         + ' Source  left: .dir.*/D/D1@2'
         + ' Source right: .none.*(/D/D1@3)?$',
     },
     'DD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon switch'
+        '^local dir delete, incoming dir edit upon switch'
         + ' Source  left: .dir.*/DD/D1@2'
         + ' Source right: .dir.*/DD/D1@3$',
     },
     'DDD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon switch'
+        '^local dir delete, incoming dir edit upon switch'
         + ' Source  left: .dir.*/DDD/D1@2'
         + ' Source right: .dir.*/DDD/D1@3$',
     },
@@ -2530,37 +2530,37 @@ def tree_conflicts_on_switch_2_1(sbox):
   expected_info = {
     'F/alpha' : {
       'Tree conflict' :
-        '^local edit, incoming delete upon switch'
+        '^local file edit, incoming file delete upon switch'
         + ' Source  left: .file.*/F/alpha@2'
         + ' Source right: .none.*(/F/alpha@3)?$',
     },
     'DF/D1' : {
       'Tree conflict' :
-        '^local edit, incoming delete upon switch'
+        '^local dir edit, incoming dir delete upon switch'
         + ' Source  left: .dir.*/DF/D1@2'
         + ' Source right: .none.*(/DF/D1@3)?$',
     },
     'DDF/D1' : {
       'Tree conflict' :
-        '^local edit, incoming delete upon switch'
+        '^local dir edit, incoming dir delete upon switch'
         + ' Source  left: .dir.*/DDF/D1@2'
         + ' Source right: .none.*(/DDF/D1@3)?$',
     },
     'D/D1' : {
       'Tree conflict' :
-        '^local edit, incoming delete upon switch'
+        '^local dir edit, incoming dir delete upon switch'
         + ' Source  left: .dir.*/D/D1@2'
         + ' Source right: .none.*(/D/D1@3)?$',
     },
     'DD/D1' : {
       'Tree conflict' :
-        '^local edit, incoming delete upon switch'
+        '^local dir edit, incoming dir delete upon switch'
         + ' Source  left: .dir.*/DD/D1@2'
         + ' Source right: .none.*(/DD/D1@3)?$',
     },
     'DDD/D1' : {
       'Tree conflict' :
-        '^local edit, incoming delete upon switch'
+        '^local dir edit, incoming dir delete upon switch'
         + ' Source  left: .dir.*/DDD/D1@2'
         + ' Source right: .none.*(/DDD/D1@3)?$',
     },
@@ -2629,37 +2629,37 @@ def tree_conflicts_on_switch_2_2(sbox):
   expected_info = {
     'F/alpha' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon switch'
+        '^local file delete, incoming file delete upon switch'
         + ' Source  left: .file.*/F/alpha@2'
         + ' Source right: .none.*(/F/alpha@3)?$',
     },
     'DF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon switch'
+        '^local dir delete, incoming dir delete upon switch'
         + ' Source  left: .dir.*/DF/D1@2'
         + ' Source right: .none.*(/DF/D1@3)?$',
     },
     'DDF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon switch'
+        '^local dir delete, incoming dir delete upon switch'
         + ' Source  left: .dir.*/DDF/D1@2'
         + ' Source right: .none.*(/DDF/D1@3)?$',
     },
     'D/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon switch'
+        '^local dir delete, incoming dir delete upon switch'
         + ' Source  left: .dir.*/D/D1@2'
         + ' Source right: .none.*(/D/D1@3)?$',
     },
     'DD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon switch'
+        '^local dir delete, incoming dir delete upon switch'
         + ' Source  left: .dir.*/DD/D1@2'
         + ' Source right: .none.*(/DD/D1@3)?$',
     },
     'DDD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon switch'
+        '^local dir delete, incoming dir delete upon switch'
         + ' Source  left: .dir.*/DDD/D1@2'
         + ' Source right: .none.*(/DDD/D1@3)?$',
     },
@@ -2718,37 +2718,37 @@ def tree_conflicts_on_switch_3(sbox):
   expected_info = {
     'F/alpha' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon switch'
+        '^local file delete, incoming file delete upon switch'
         + ' Source  left: .file.*/F/alpha@2'
         + ' Source right: .none.*(/F/alpha@3)?$',
     },
     'DF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon switch'
+        '^local dir delete, incoming dir delete upon switch'
         + ' Source  left: .dir.*/DF/D1@2'
         + ' Source right: .none.*(/DF/D1@3)?$',
     },
     'DDF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon switch'
+        '^local dir delete, incoming dir delete upon switch'
         + ' Source  left: .dir.*/DDF/D1@2'
         + ' Source right: .none.*(/DDF/D1@3)?$',
     },
     'D/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon switch'
+        '^local dir delete, incoming dir delete upon switch'
         + ' Source  left: .dir.*/D/D1@2'
         + ' Source right: .none.*(/D/D1@3)?$',
     },
     'DD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon switch'
+        '^local dir delete, incoming dir delete upon switch'
         + ' Source  left: .dir.*/DD/D1@2'
         + ' Source right: .none.*(/DD/D1@3)?$',
     },
     'DDD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon switch'
+        '^local dir delete, incoming dir delete upon switch'
         + ' Source  left: .dir.*/DDD/D1@2'
         + ' Source right: .none.*(/DDD/D1@3)?$',
     },

Modified: subversion/branches/ev2-export/subversion/tests/cmdline/tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/tree_conflict_tests.py?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/tree_conflict_tests.py (original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/tree_conflict_tests.py Tue Jan  8 23:46:00 2013
@@ -1223,7 +1223,7 @@ def actual_only_node_behaviour(sbox):
 
   # info
   expected_info = {
-    'Tree conflict': 'local missing, incoming edit upon merge.*',
+    'Tree conflict': 'local file missing, incoming file edit upon merge.*',
     'Name': 'foo',
     'Schedule': 'normal',
     'Node Kind': 'none',

Modified: subversion/branches/ev2-export/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/update_tests.py?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/update_tests.py Tue Jan  8 23:46:00 2013
@@ -4243,37 +4243,37 @@ def tree_conflicts_on_update_1_1(sbox):
   expected_info = {
     'F/alpha' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon update'
+        '^local file delete, incoming file edit upon update'
         + ' Source  left: .file.*/F/alpha@2'
         + ' Source right: .file.*/F/alpha@3$',
     },
     'DF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon update'
+        '^local dir delete, incoming dir edit upon update'
         + ' Source  left: .dir.*/DF/D1@2'
         + ' Source right: .dir.*/DF/D1@3$',
     },
     'DDF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon update'
+        '^local dir delete, incoming dir edit upon update'
         + ' Source  left: .dir.*/DDF/D1@2'
         + ' Source right: .dir.*/DDF/D1@3$',
     },
     'D/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon update'
+        '^local dir delete, incoming dir edit upon update'
         + ' Source  left: .dir.*/D/D1@2'
         + ' Source right: .dir.*/D/D1@3$',
     },
     'DD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon update'
+        '^local dir delete, incoming dir edit upon update'
         + ' Source  left: .dir.*/DD/D1@2'
         + ' Source right: .dir.*/DD/D1@3$',
     },
     'DDD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon update'
+        '^local dir delete, incoming dir edit upon update'
         + ' Source  left: .dir.*/DDD/D1@2'
         + ' Source right: .dir.*/DDD/D1@3$',
     },
@@ -4340,37 +4340,37 @@ def tree_conflicts_on_update_1_2(sbox):
   expected_info = {
     'F/alpha' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon update'
+        '^local file delete, incoming file delete upon update'
         + ' Source  left: .file.*/F/alpha@2'
         + ' Source right: .none.*(/F/alpha@3)?$',
     },
     'DF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon update'
+        '^local dir delete, incoming dir edit upon update'
         + ' Source  left: .dir.*/DF/D1@2'
         + ' Source right: .dir.*/DF/D1@3$',
     },
     'DDF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon update'
+        '^local dir delete, incoming dir edit upon update'
         + ' Source  left: .dir.*/DDF/D1@2'
         + ' Source right: .dir.*/DDF/D1@3$',
     },
     'D/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon update'
+        '^local dir delete, incoming dir delete upon update'
         + ' Source  left: .dir.*/D/D1@2'
         + ' Source right: .none.*(/D/D1@3)?$',
     },
     'DD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon update'
+        '^local dir delete, incoming dir edit upon update'
         + ' Source  left: .dir.*/DD/D1@2'
         + ' Source right: .dir.*/DD/D1@3$',
     },
     'DDD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming edit upon update'
+        '^local dir delete, incoming dir edit upon update'
         + ' Source  left: .dir.*/DDD/D1@2'
         + ' Source right: .dir.*/DDD/D1@3$',
     },
@@ -4423,37 +4423,37 @@ def tree_conflicts_on_update_2_1(sbox):
   expected_info = {
     'F/alpha' : {
       'Tree conflict' :
-        '^local edit, incoming delete upon update'
+        '^local file edit, incoming file delete upon update'
         + ' Source  left: .file.*/F/alpha@2'
         + ' Source right: .none.*(/F/alpha@3)?$',
     },
     'DF/D1' : {
       'Tree conflict' :
-        '^local edit, incoming delete upon update'
+        '^local dir edit, incoming dir delete upon update'
         + ' Source  left: .dir.*/DF/D1@2'
         + ' Source right: .none.*(/DF/D1@3)?$',
     },
     'DDF/D1' : {
       'Tree conflict' :
-        '^local edit, incoming delete upon update'
+        '^local dir edit, incoming dir delete upon update'
         + ' Source  left: .dir.*/DDF/D1@2'
         + ' Source right: .none.*(/DDF/D1@3)?$',
     },
     'D/D1' : {
       'Tree conflict' :
-        '^local edit, incoming delete upon update'
+        '^local dir edit, incoming dir delete upon update'
         + ' Source  left: .dir.*/D/D1@2'
         + ' Source right: .none.*(/D/D1@3)?$',
     },
     'DD/D1' : {
       'Tree conflict' :
-        '^local edit, incoming delete upon update'
+        '^local dir edit, incoming dir delete upon update'
         + ' Source  left: .dir.*/DD/D1@2'
         + ' Source right: .none.*(/DD/D1@3)?$',
     },
     'DDD/D1' : {
       'Tree conflict' :
-        '^local edit, incoming delete upon update'
+        '^local dir edit, incoming dir delete upon update'
         + ' Source  left: .dir.*/DDD/D1@2'
         + ' Source right: .none.*(/DDD/D1@3)?$',
     },
@@ -4531,37 +4531,37 @@ def tree_conflicts_on_update_2_2(sbox):
   expected_info = {
     'F/alpha' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon update'
+        '^local file delete, incoming file delete upon update'
         + ' Source  left: .file.*/F/alpha@2'
         + ' Source right: .none.*(/F/alpha@3)?$',
     },
     'DF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon update'
+        '^local dir delete, incoming dir delete upon update'
         + ' Source  left: .dir.*/DF/D1@2'
         + ' Source right: .none.*(/DF/D1@3)?$',
     },
     'DDF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon update'
+        '^local dir delete, incoming dir delete upon update'
         + ' Source  left: .dir.*/DDF/D1@2'
         + ' Source right: .none.*(/DDF/D1@3)?$',
     },
     'D/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon update'
+        '^local dir delete, incoming dir delete upon update'
         + ' Source  left: .dir.*/D/D1@2'
         + ' Source right: .none.*(/D/D1@3)?$',
     },
     'DD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon update'
+        '^local dir delete, incoming dir delete upon update'
         + ' Source  left: .dir.*/DD/D1@2'
         + ' Source right: .none.*(/DD/D1@3)?$',
     },
     'DDD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon update'
+        '^local dir delete, incoming dir delete upon update'
         + ' Source  left: .dir.*/DDD/D1@2'
         + ' Source right: .none.*(/DDD/D1@3)?$',
     },
@@ -4693,37 +4693,37 @@ def tree_conflicts_on_update_3(sbox):
   expected_info = {
     'F/alpha' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon update'
+        '^local file delete, incoming file delete upon update'
         + ' Source  left: .file.*/F/alpha@2'
         + ' Source right: .none.*(/F/alpha@3)?$',
     },
     'DF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon update'
+        '^local dir delete, incoming dir delete upon update'
         + ' Source  left: .dir.*/DF/D1@2'
         + ' Source right: .none.*(/DF/D1@3)?$',
     },
     'DDF/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon update'
+        '^local dir delete, incoming dir delete upon update'
         + ' Source  left: .dir.*/DDF/D1@2'
         + ' Source right: .none.*(/DDF/D1@3)?$',
     },
     'D/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon update'
+        '^local dir delete, incoming dir delete upon update'
         + ' Source  left: .dir.*/D/D1@2'
         + ' Source right: .none.*(/D/D1@3)?$',
     },
     'DD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon update'
+        '^local dir delete, incoming dir delete upon update'
         + ' Source  left: .dir.*/DD/D1@2'
         + ' Source right: .none.*(/DD/D1@3)?$',
     },
     'DDD/D1' : {
       'Tree conflict' :
-        '^local delete, incoming delete upon update'
+        '^local dir delete, incoming dir delete upon update'
         + ' Source  left: .dir.*/DDD/D1@2'
         + ' Source right: .none.*(/DDD/D1@3)?$',
     },
@@ -5599,7 +5599,6 @@ def update_moved_dir_dir_add(sbox):
   })
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
-@XFail()
 @Issue(4037)
 def update_moved_dir_file_move(sbox):
   "update locally moved dir with incoming file move"
@@ -5612,15 +5611,13 @@ def update_moved_dir_file_move(sbox):
   svntest.main.run_svn(False, 'update', '-r', '1', wc_dir)
   sbox.simple_move("A/B/E", "A/B/E2")
 
-  # The incoming move should auto-merge such that A/B/F/alpha appears
-  # as moved to A/B/E2/alpha -- this strategy prefers the local user's
-  # change as the solution to the conflict.
-  # ### Ideally, the user should be offered a set of alternative solutions.
-  # ### E.g. the user might prefer if A/B/E2/alpha disappeared and A/B/E/alpha
-  # ### appeared as moved to A/B/F/alpha. But the --accept option does not yet
-  # ### support tree conflicts.
+  # The incoming "move" creates a tree-conflict as an incoming change
+  # in a local move.  We don't yet track moves on the server so we
+  # don't recognise the incoming change as a move.
   expected_output = svntest.wc.State(wc_dir, {
-    'A/B/E2/alpha' : Item(status='A '),
+    'A/B/E'       : Item(status='  ', treeconflict='C'),
+    'A/B/E/alpha' : Item(status='  ', treeconflict='D'),
+    'A/B/F/alpha' : Item(status='A '),
   })
   expected_disk = svntest.main.greek_state.copy()
   expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E')
@@ -5628,13 +5625,16 @@ def update_moved_dir_file_move(sbox):
     'A/B/E2'           : Item(),
     'A/B/E2/alpha'     : Item(contents="This is the file 'alpha'.\n"),
     'A/B/E2/beta'      : Item(contents="This is the file 'beta'.\n"),
+    'A/B/F/alpha'      : Item(contents="This is the file 'alpha'.\n"),
   })
   expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
-  expected_status.tweak('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', status='D ')
+  expected_status.remove('A/B/E/alpha')
+  expected_status.tweak('A/B/E', status='D ', treeconflict='C')
+  expected_status.tweak('A/B/E/beta', status='D ')
   expected_status.add({
-    'A/B/F/alpha'       : Item(status='D '),
+    'A/B/F/alpha'       : Item(status='  ', wc_rev='2'),
     'A/B/E2'            : Item(status='A ', copied='+', wc_rev='-'),
-    'A/B/E2/alpha'      : Item(status='A ', copied='+', wc_rev='-'),
+    'A/B/E2/alpha'      : Item(status='  ', copied='+', wc_rev='-'),
     'A/B/E2/beta'       : Item(status='  ', copied='+', wc_rev='-'),
   })
   svntest.actions.run_and_verify_update(wc_dir,
@@ -5644,6 +5644,20 @@ def update_moved_dir_file_move(sbox):
                                         None, None, None,
                                         None, None, 1)
 
+  # The incoming change is a delete as we don't yet track server-side
+  # moves.  Resolving the tree-conflict as "mine-conflict" applies the
+  # delete to the move destination.  This is effectively accepting the
+  # move from the server.
+  svntest.actions.run_and_verify_svn("resolve failed", None, [],
+                                     'resolve',
+                                     '--recursive',
+                                     '--accept=mine-conflict', wc_dir)
+
+  expected_status.tweak('A/B/E', treeconflict=None)
+  expected_status.remove('A/B/E2/alpha')
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+
 @XFail()
 @Issue(3144,3630)
 def update_move_text_mod(sbox):

Modified: subversion/branches/ev2-export/subversion/tests/cmdline/wc_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/wc_tests.py?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/wc_tests.py (original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/wc_tests.py Tue Jan  8 23:46:00 2013
@@ -25,6 +25,7 @@
 ######################################################################
 
 # General modules
+from __future__ import with_statement
 import shutil, stat, re, os, logging
 
 logger = logging.getLogger()
@@ -117,6 +118,78 @@ def add_with_symlink_in_path(sbox):
   sbox.simple_append('A/B/kappa', 'xyz', True)
   sbox.simple_add('Z/B/kappa')
 
+@Issue(4118)
+@SkipUnless(svntest.main.is_posix_os)
+def status_with_inaccessible_wc_db(sbox):
+  """inaccessible .svn/wc.db"""
+
+  sbox.build(read_only = True)
+  os.chmod(sbox.ospath(".svn/wc.db"), 0)
+  svntest.actions.run_and_verify_svn(
+    "Status when wc.db is not accessible", None,
+    r"[^ ]+ E155016: The working copy database at '.*' is corrupt",
+    "st", sbox.wc_dir)
+
+@Issue(4118)
+def status_with_corrupt_wc_db(sbox):
+  """corrupt .svn/wc.db"""
+
+  sbox.build(read_only = True)
+  with open(sbox.ospath(".svn/wc.db"), 'wb') as fd:
+    fd.write('\0' * 17)
+  svntest.actions.run_and_verify_svn(
+    "Status when wc.db is corrupt", None,
+    r"[^ ]+ E155016: The working copy database at '.*' is corrupt",
+    "st", sbox.wc_dir)
+
+@Issue(4118)
+def status_with_zero_length_wc_db(sbox):
+  """zero-length .svn/wc.db"""
+
+  sbox.build(read_only = True)
+  os.close(os.open(sbox.ospath(".svn/wc.db"), os.O_RDWR | os.O_TRUNC))
+  svntest.actions.run_and_verify_svn(
+    "Status when wc.db has zero length", None,
+    r"[^ ]+ E200030:",                    # SVN_ERR_SQLITE_ERROR
+    "st", sbox.wc_dir)
+
+@Issue(4118)
+def status_without_wc_db(sbox):
+  """missing .svn/wc.db"""
+
+  sbox.build(read_only = True)
+  os.remove(sbox.ospath(".svn/wc.db"))
+  svntest.actions.run_and_verify_svn(
+    "Status when wc.db is missing", None,
+    r"[^ ]+ E155016: The working copy database at '.*' is missing",
+    "st", sbox.wc_dir)
+
+@Issue(4118)
+@Skip()      # FIXME: Test fails in-tree because it finds the source WC root
+def status_without_wc_db_and_entries(sbox):
+  """missing .svn/wc.db and .svn/entries"""
+
+  sbox.build(read_only = True)
+  os.remove(sbox.ospath(".svn/wc.db"))
+  os.remove(sbox.ospath(".svn/entries"))
+  svntest.actions.run_and_verify_svn2(
+    "Status when wc.db and entries are missing", None,
+    r"[^ ]+ warning: W155007: '.*' is not a working copy",
+    0, "st", sbox.wc_dir)
+
+@Issue(4118)
+def status_with_missing_wc_db_and_maybe_valid_entries(sbox):
+  """missing .svn/wc.db, maybe valid .svn/entries"""
+
+  sbox.build(read_only = True)
+  with open(sbox.ospath(".svn/entries"), 'ab') as fd:
+    fd.write('something\n')
+    os.remove(sbox.ospath(".svn/wc.db"))
+  svntest.actions.run_and_verify_svn(
+    "Status when wc.db is missing and .svn/entries might be valid", None,
+    r"[^ ]+ E155036:",                    # SVN_ERR_WC_UPGRADE_REQUIRED
+    "st", sbox.wc_dir)
+
 
 ########################################################################
 # Run the tests
@@ -129,6 +202,12 @@ test_list = [ None,
               add_through_unversioned_symlink,
               add_through_versioned_symlink,
               add_with_symlink_in_path,
+              status_with_inaccessible_wc_db,
+              status_with_corrupt_wc_db,
+              status_with_zero_length_wc_db,
+              status_without_wc_db,
+              status_without_wc_db_and_entries,
+              status_with_missing_wc_db_and_maybe_valid_entries,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/ev2-export/subversion/tests/libsvn_diff/diff-diff3-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/libsvn_diff/diff-diff3-test.c?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/libsvn_diff/diff-diff3-test.c (original)
+++ subversion/branches/ev2-export/subversion/tests/libsvn_diff/diff-diff3-test.c Tue Jan  8 23:46:00 2013
@@ -2563,6 +2563,60 @@ test_identical_suffix(apr_pool_t *pool)
 #undef ORIGINAL_CONTENTS_PATTERN
 #undef INSERTED_LINE
 
+/* The magic number used in this test, 1<<17, is
+   CHUNK_SIZE from ../../libsvn_diff/diff_file.c
+ */
+static svn_error_t *
+test_token_compare(apr_pool_t *pool)
+{
+  apr_size_t chunk_size = 1 << 17;
+  const char *pattern = "\n\n\n\n\n\n\n\n";
+  svn_stringbuf_t *original, *modified;
+  svn_diff_file_options_t *diff_opts = svn_diff_file_options_create(pool);
+
+  diff_opts->ignore_space = svn_diff_file_ignore_space_all;
+
+  original = svn_stringbuf_create_ensure(chunk_size, pool);
+  while (original->len < chunk_size - 8)
+    {
+      svn_stringbuf_appendcstr(original, pattern);
+    }
+  svn_stringbuf_appendcstr(original, "    @@@\n");
+
+  modified = svn_stringbuf_create_ensure(chunk_size, pool);
+  while (modified->len < chunk_size - 8)
+    {
+      svn_stringbuf_appendcstr(modified, pattern);
+    }
+  svn_stringbuf_appendcstr(modified, "     @@@\n");
+
+  /* regression test for reading exceeding the file size */
+  SVN_ERR(two_way_diff("token-compare-original1", "token-compare-modified1",
+                       original->data, modified->data, "",
+                       diff_opts, pool));
+
+  svn_stringbuf_appendcstr(original, "aaaaaaa\n");
+  svn_stringbuf_appendcstr(modified, "bbbbbbb\n");
+
+  /* regression test for comparison beyond the end-of-line */
+  SVN_ERR(two_way_diff("token-compare-original2", "token-compare-modified2",
+                       original->data, modified->data,
+                       apr_psprintf(pool,
+                                    "--- token-compare-original2" NL
+                                    "+++ token-compare-modified2" NL
+                                    "@@ -%u,4 +%u,4 @@"  NL
+                                    " \n"
+                                    " \n"
+                                    "     @@@\n"
+                                    "-aaaaaaa\n"
+                                    "+bbbbbbb\n",
+                                    1 +(unsigned int)chunk_size - 8 + 1 - 3,
+                                    1 +(unsigned int)chunk_size - 8 + 1 - 3),
+                       diff_opts, pool));
+
+  return SVN_NO_ERROR;
+}
+
 /* ========================================================================== */
 
 struct svn_test_descriptor_t test_funcs[] =
@@ -2596,5 +2650,7 @@ struct svn_test_descriptor_t test_funcs[
                    "offset of the normalized token"),
     SVN_TEST_PASS2(test_identical_suffix,
                    "identical suffix starts at the boundary of a chunk"),
+    SVN_TEST_PASS2(test_token_compare,
+                   "compare tokes at the chunk boundary"),
     SVN_TEST_NULL
   };

Modified: subversion/branches/ev2-export/subversion/tests/libsvn_wc/conflict-data-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/libsvn_wc/conflict-data-test.c?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/libsvn_wc/conflict-data-test.c (original)
+++ subversion/branches/ev2-export/subversion/tests/libsvn_wc/conflict-data-test.c Tue Jan  8 23:46:00 2013
@@ -337,6 +337,7 @@ test_serialize_prop_conflict(const svn_t
                         svn_wc_conflict_version_create2("http://my-repos/svn",
                                                         "uuid", "trunk", 12,
                                                         svn_node_dir, pool),
+                        NULL /* wc_only */,
                         pool, pool));
 
   SVN_ERR(svn_wc__conflict_skel_is_complete(&complete, conflict_skel));
@@ -510,6 +511,7 @@ test_serialize_tree_conflict(const svn_t
                         svn_wc_conflict_version_create2("http://my-repos/svn",
                                                         "uuid", "trunk", 12,
                                                         svn_node_dir, pool),
+                        NULL /* wc_only */,
                         pool, pool));
 
   SVN_ERR(svn_wc__conflict_skel_is_complete(&complete, conflict_skel));

Modified: subversion/branches/ev2-export/subversion/tests/libsvn_wc/op-depth-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/libsvn_wc/op-depth-test.c?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/libsvn_wc/op-depth-test.c (original)
+++ subversion/branches/ev2-export/subversion/tests/libsvn_wc/op-depth-test.c Tue Jan  8 23:46:00 2013
@@ -5226,6 +5226,174 @@ nested_move_update(const svn_test_opts_t
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+nested_move_commit(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+  svn_test__sandbox_t b;
+
+  SVN_ERR(svn_test__sandbox_create(&b, "nested_move_commit", opts, pool));
+
+  /* r1: Create file 'f' */
+  SVN_ERR(sbox_wc_mkdir(&b, "A"));
+  SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+  SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+  sbox_file_write(&b, "A/B/C/f", "r1 content\n");
+  SVN_ERR(sbox_wc_add(&b, "A/B/C/f"));
+  SVN_ERR(sbox_wc_commit(&b, ""));
+  SVN_ERR(sbox_wc_update(&b, "", 1));
+
+  SVN_ERR(sbox_wc_move(&b, "A/B/C", "C2"));
+
+  {
+    const char *moved_to;
+    const char *expected_to;
+    SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, NULL, &moved_to,
+                                     b.wc_ctx->db, sbox_wc_path(&b, "A/B/C"),
+                                     pool, pool));
+
+    expected_to = sbox_wc_path(&b, "C2");
+
+    if (strcmp(moved_to, expected_to) != 0)
+        return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+                                 "Expected moved to %s, but was %s",
+                                 expected_to, moved_to);
+  }
+  {
+    const char *moved_from;
+    const char *expected_from;
+    SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                                     NULL, NULL, &moved_from, NULL,
+                                     b.wc_ctx->db, sbox_wc_path(&b, "C2"),
+                                     pool, pool));
+
+    expected_from = sbox_wc_path(&b, "A/B/C");
+
+    if (strcmp(moved_from, expected_from) != 0)
+        return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+                                 "Expected moved from %s, but was %s",
+                                 expected_from, moved_from);
+  }
+
+  SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+  {
+    nodes_row_t nodes[] = {
+      {0, "",          "normal",       1, ""},
+      {0, "A",         "normal",       1, "A"},
+      {0, "A/B",       "normal",       1, "A/B"},
+      {0, "A/B/C",     "normal",       1, "A/B/C"},
+      {0, "A/B/C/f",   "normal",       1, "A/B/C/f"},
+      {1, "A",         "base-deleted", NO_COPY_FROM, "A2"},
+      {1, "A/B",       "base-deleted", NO_COPY_FROM},
+      {1, "A/B/C",     "base-deleted", NO_COPY_FROM},
+      {1, "A/B/C/f",   "base-deleted", NO_COPY_FROM},
+      {1, "A2",        "normal",       1, "A", MOVED_HERE},
+      {1, "A2/B",      "normal",       1, "A/B", MOVED_HERE},
+      {1, "A2/B/C",    "normal",       1, "A/B/C", MOVED_HERE},
+      {1, "A2/B/C/f",  "normal",       1, "A/B/C/f", MOVED_HERE},
+      {3, "A2/B/C",    "base-deleted", NO_COPY_FROM, "C2"},
+      {3, "A2/B/C/f",  "base-deleted", NO_COPY_FROM},
+      {1, "C2",        "normal",       1, "A/B/C", MOVED_HERE},
+      {1, "C2/f",      "normal",       1, "A/B/C/f", MOVED_HERE},
+      {0}
+    };
+    SVN_ERR(check_db_rows(&b, "", nodes));
+  }
+
+  {
+    const char *moved_to;
+    const char *expected_to;
+    SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, NULL, &moved_to,
+                                     b.wc_ctx->db, sbox_wc_path(&b, "A/B/C"),
+                                     pool, pool));
+
+    expected_to = sbox_wc_path(&b, "A2" /* ### I would have expected "C2" */);
+
+    if (strcmp(moved_to, expected_to) != 0)
+        return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+                                 "Expected moved to %s, but was %s",
+                                 expected_to, moved_to);
+  }
+  {
+    const char *moved_from;
+    const char *expected_from;
+    SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                                     NULL, NULL, &moved_from, NULL,
+                                     b.wc_ctx->db, sbox_wc_path(&b, "C2"),
+                                     pool, pool));
+
+    expected_from = sbox_wc_path(&b, "A2/B/C"
+                                 /* ### I would have expected "A/B/C" */);
+
+    if (strcmp(moved_from, expected_from) != 0)
+        return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+                                 "Expected moved from %s, but was %s",
+                                 expected_from, moved_from);
+  }
+
+  {
+    apr_array_header_t *targets = apr_array_make(pool, 2, sizeof(const char *));
+
+    APR_ARRAY_PUSH(targets, const char *) = sbox_wc_path(&b, "A");
+    APR_ARRAY_PUSH(targets, const char *) = sbox_wc_path(&b, "A2");
+
+    SVN_ERR(sbox_wc_commit_ex(&b, targets, svn_depth_empty));
+  }
+
+  {
+    nodes_row_t nodes[] = {
+      {0, "",          "normal",       1, ""},
+      {0, "A",         "not-present",  2, "A"},
+      {0, "A2",        "normal",       2, "A2"},
+      {0, "A2/B",      "normal",       2, "A2/B"},
+      {0, "A2/B/C",    "normal",       2, "A2/B/C"},
+      {0, "A2/B/C/f",  "normal",       2, "A2/B/C/f"},
+      {3, "A2/B/C",    "base-deleted", NO_COPY_FROM, "C2"},
+      {3, "A2/B/C/f",  "base-deleted", NO_COPY_FROM},
+
+      /* Currently these are recorded as a move but still
+         have the copy history from ^/A/B/C@1 */
+      {1, "C2",        "normal",       2, "A2/B/C", MOVED_HERE},
+      {1, "C2/f",      "normal",       2, "A2/B/C/f", MOVED_HERE},
+      {0}
+    };
+    SVN_ERR(check_db_rows(&b, "", nodes));
+  }
+
+  {
+    const char *moved_to;
+    const char *expected_to;
+    SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, NULL, &moved_to,
+                                     b.wc_ctx->db, sbox_wc_path(&b, "A2/B/C"),
+                                     pool, pool));
+
+    expected_to = sbox_wc_path(&b, "C2");
+
+    if (strcmp(moved_to, expected_to) != 0)
+        return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+                                 "Expected moved to %s, but was %s",
+                                 expected_to, moved_to);
+  }
+
+  {
+    const char *moved_from;
+    const char *expected_from;
+    SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                                     NULL, NULL, &moved_from, NULL,
+                                     b.wc_ctx->db, sbox_wc_path(&b, "C2"),
+                                     pool, pool));
+
+    expected_from = sbox_wc_path(&b, "A2/B/C");
+
+    if (strcmp(moved_from, expected_from) != 0)
+        return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+                                 "Expected moved from %s, but was %s",
+                                 expected_from, moved_from);
+  }
+
+
+  return SVN_NO_ERROR;
+}
+
 
 /* ---------------------------------------------------------------------- */
 /* The list of test functions */
@@ -5327,5 +5495,7 @@ struct svn_test_descriptor_t test_funcs[
                        "update_prop_mod_into_moved"),
     SVN_TEST_OPTS_PASS(nested_move_update,
                        "nested_move_update"),
+    SVN_TEST_OPTS_XFAIL(nested_move_commit,
+                       "nested_move_commit"),
     SVN_TEST_NULL
   };

Modified: subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.c?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.c (original)
+++ subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.c Tue Jan  8 23:46:00 2013
@@ -287,15 +287,14 @@ sbox_wc_exclude(svn_test__sandbox_t *b, 
 }
 
 svn_error_t *
-sbox_wc_commit(svn_test__sandbox_t *b, const char *path)
+sbox_wc_commit_ex(svn_test__sandbox_t *b,
+                  apr_array_header_t *targets,
+                  svn_depth_t depth)
 {
   svn_client_ctx_t *ctx;
-  apr_array_header_t *targets = apr_array_make(b->pool, 1,
-                                               sizeof(const char *));
-
-  APR_ARRAY_PUSH(targets, const char *) = sbox_wc_path(b, path);
   SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
-  return svn_client_commit6(targets, svn_depth_infinity,
+  ctx->wc_ctx = b->wc_ctx;
+  return svn_client_commit6(targets, depth,
                             FALSE /* keep_locks */,
                             FALSE /* keep_changelist */,
                             TRUE  /* commit_as_operations */,
@@ -305,6 +304,16 @@ sbox_wc_commit(svn_test__sandbox_t *b, c
 }
 
 svn_error_t *
+sbox_wc_commit(svn_test__sandbox_t *b, const char *path)
+{
+  apr_array_header_t *targets = apr_array_make(b->pool, 1,
+                                               sizeof(const char *));
+
+  APR_ARRAY_PUSH(targets, const char *) = sbox_wc_path(b, path);
+  return sbox_wc_commit_ex(b, targets, svn_depth_infinity);
+}
+
+svn_error_t *
 sbox_wc_update(svn_test__sandbox_t *b, const char *path, svn_revnum_t revnum)
 {
   svn_client_ctx_t *ctx;
@@ -318,6 +327,7 @@ sbox_wc_update(svn_test__sandbox_t *b, c
 
   APR_ARRAY_PUSH(paths, const char *) = sbox_wc_path(b, path);
   SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
+  ctx->wc_ctx = b->wc_ctx;
   return svn_client_update4(&result_revs, paths, &revision, svn_depth_infinity,
                             TRUE, FALSE, FALSE, FALSE, FALSE,
                             ctx, b->pool);
@@ -354,9 +364,16 @@ sbox_wc_move(svn_test__sandbox_t *b, con
                                              sizeof(const char *));
 
   SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
+  ctx->wc_ctx = b->wc_ctx;
   APR_ARRAY_PUSH(paths, const char *) = sbox_wc_path(b, src);
-  return svn_client_move6(paths, sbox_wc_path(b, dst),
-                          FALSE, FALSE, NULL, NULL, NULL, ctx, b->pool);
+  return svn_client_move7(paths, sbox_wc_path(b, dst),
+                          FALSE /* move_as_child */,
+                          FALSE /* make_parents */,
+                          TRUE /* allow_mixed_revisions */,
+                          FALSE /* metadata_only */,
+                          NULL /* revprop_table */,
+                          NULL, NULL, /* commit callback */
+                          ctx, b->pool);
 }
 
 svn_error_t *
@@ -371,6 +388,7 @@ sbox_wc_propset(svn_test__sandbox_t *b,
   svn_string_t *pval = value ? svn_string_create(value, b->pool) : NULL;
 
   SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
+  ctx->wc_ctx = b->wc_ctx;
   APR_ARRAY_PUSH(paths, const char *) = sbox_wc_path(b, path);
   return svn_client_propset_local(name, pval, paths, svn_depth_empty,
                                   TRUE /* skip_checks */,

Modified: subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.h?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.h (original)
+++ subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.h Tue Jan  8 23:46:00 2013
@@ -122,6 +122,12 @@ sbox_wc_commit(svn_test__sandbox_t *b, c
 
 /* */
 svn_error_t *
+sbox_wc_commit_ex(svn_test__sandbox_t *b,
+                  apr_array_header_t *targets,
+                  svn_depth_t depth);
+
+/* */
+svn_error_t *
 sbox_wc_update(svn_test__sandbox_t *b, const char *path, svn_revnum_t revnum);
 
 /* */

Modified: subversion/branches/ev2-export/tools/client-side/svn-bench/svn-bench.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/tools/client-side/svn-bench/svn-bench.c?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/tools/client-side/svn-bench/svn-bench.c (original)
+++ subversion/branches/ev2-export/tools/client-side/svn-bench/svn-bench.c Tue Jan  8 23:46:00 2013
@@ -222,7 +222,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "    If locked, the letter 'O'.  (Use 'svn info URL' to see details)\n"
      "    Size (in bytes)\n"
      "    Date and time of the last commit\n"),
-    {'r', 'v', 'R', opt_depth} },
+    {'r', 'v', 'q', 'R', opt_depth} },
 
   { "null-log", svn_cl__null_log, {0}, N_
     ("Fetch the log messages for a set of revision(s) and/or path(s).\n"

Modified: subversion/branches/ev2-export/tools/dev/fsfs-access-map.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/tools/dev/fsfs-access-map.c?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/tools/dev/fsfs-access-map.c (original)
+++ subversion/branches/ev2-export/tools/dev/fsfs-access-map.c Tue Jan  8 23:46:00 2013
@@ -272,15 +272,27 @@ parse_line(svn_stringbuf_t *line)
   /* determine function name, first parameter and return value */
   char *func_end = strchr(line->data, '(');
   char *return_value = strrchr(line->data, ' ');
+  char *first_param_end;
+  apr_int64_t func_return = 0;
 
-  char *first_param_end = strchr(func_end, ',');
+  if (func_end == NULL || return_value == NULL)
+    return;
+  
+  first_param_end = strchr(func_end, ',');
   if (first_param_end == NULL)
     first_param_end = strchr(func_end, ')');
 
+  if (first_param_end == NULL)
+    return;
+
   *func_end++ = 0;
   *first_param_end = 0;
   ++return_value;
 
+  /* (try to) convert the return value into an integer.
+   * If that fails, continue anyway as defaulting to 0 will be safe for us. */
+  svn_error_clear(svn_cstring_atoi64(&func_return, return_value));
+  
   /* process those operations that we care about */
   if (strcmp(line->data, "open") == 0)
     {
@@ -288,12 +300,12 @@ parse_line(svn_stringbuf_t *line)
       *func_end++ = 0;
       *--first_param_end = 0;
       
-      open_file(func_end, atoi(return_value));
+      open_file(func_end, (int)func_return);
     }
   else if (strcmp(line->data, "read") == 0)
-    read_file(atoi(func_end), atoi(return_value));
+    read_file(atoi(func_end), func_return);
   else if (strcmp(line->data, "lseek") == 0)
-    seek_file(atoi(func_end), atoi(return_value));
+    seek_file(atoi(func_end), func_return);
   else if (strcmp(line->data, "close") == 0)
     close_file(atoi(func_end));
 }
@@ -471,6 +483,12 @@ write_bitmap(apr_array_header_t *info, a
     if (xsize < APR_ARRAY_IDX(info, y, file_stats_t *)->read_map->nelts)
       xsize = APR_ARRAY_IDX(info, y, file_stats_t *)->read_map->nelts;
 
+  /* limit picture dimensions (16k pixels in each direction) */
+  if (xsize >= 0x4000)
+    xsize = 0x3fff;
+  if (ysize >= 0x4000)
+    ysize = 0x3fff;
+
   /* rows in BMP files must be aligned to 4 bytes */
   row_size = APR_ALIGN(xsize * 3, 4);
   padding = row_size - xsize * 3;

Modified: subversion/branches/ev2-export/tools/dist/release.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/tools/dist/release.py?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/tools/dist/release.py (original)
+++ subversion/branches/ev2-export/tools/dist/release.py Tue Jan  8 23:46:00 2013
@@ -91,7 +91,7 @@ secure_repos = 'https://svn.apache.org/r
 dist_repos = 'https://dist.apache.org/repos/dist'
 dist_dev_url = dist_repos + '/dev/subversion'
 dist_release_url = dist_repos + '/release/subversion'
-KEYS = 'https://people.apache.org/keys/group/subversion-pmc.asc'
+KEYS = 'https://people.apache.org/keys/group/subversion.asc'
 extns = ['zip', 'tar.gz', 'tar.bz2']
 
 

Modified: subversion/branches/ev2-export/tools/server-side/svnpubsub/svnwcsub.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/tools/server-side/svnpubsub/svnwcsub.py?rev=1430634&r1=1430633&r2=1430634&view=diff
==============================================================================
--- subversion/branches/ev2-export/tools/server-side/svnpubsub/svnwcsub.py (original)
+++ subversion/branches/ev2-export/tools/server-side/svnpubsub/svnwcsub.py Tue Jan  8 23:46:00 2013
@@ -124,9 +124,10 @@ class WorkingCopy(object):
 
     def _get_match(self, svnbin, env):
         ### quick little hack to auto-checkout missing working copies
-        if not os.path.isdir(self.path) or is_emptydir(self.path):
+        if not os.path.isdir(self.path + "/.svn") or is_emptydir(self.path):
             logging.info("autopopulate %s from %s" % (self.path, self.url))
             subprocess.check_call([svnbin, 'co', '-q',
+                                   '--force',
                                    '--non-interactive',
                                    '--config-option',
                                    'config:miscellany:use-commit-times=on',