You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ja...@apache.org on 2018/09/18 01:50:51 UTC

svn commit: r1841179 [2/2] - in /subversion/branches/java10-compat: ./ subversion/bindings/javahl/src/org/apache/subversion/javahl/ subversion/include/ subversion/libsvn_client/ subversion/libsvn_wc/ subversion/svn/ subversion/tests/cmdline/ subversion...

Modified: subversion/branches/java10-compat/subversion/svn/conflict-callbacks.c
URL: http://svn.apache.org/viewvc/subversion/branches/java10-compat/subversion/svn/conflict-callbacks.c?rev=1841179&r1=1841178&r2=1841179&view=diff
==============================================================================
--- subversion/branches/java10-compat/subversion/svn/conflict-callbacks.c (original)
+++ subversion/branches/java10-compat/subversion/svn/conflict-callbacks.c Tue Sep 18 01:50:50 2018
@@ -1534,22 +1534,14 @@ build_tree_conflict_options(
           id != svn_client_conflict_option_accept_current_wc_state)
         *all_options_are_dumb = FALSE;
 
-      if (id == svn_client_conflict_option_incoming_move_file_text_merge ||
-          id == svn_client_conflict_option_incoming_move_dir_merge)
-        {
+        if (*possible_moved_to_repos_relpaths == NULL)
           SVN_ERR(
-            svn_client_conflict_option_get_moved_to_repos_relpath_candidates(
+            svn_client_conflict_option_get_moved_to_repos_relpath_candidates2(
               possible_moved_to_repos_relpaths, builtin_option,
               result_pool, iterpool));
-          SVN_ERR(svn_client_conflict_option_get_moved_to_abspath_candidates(
-                    possible_moved_to_abspaths, builtin_option,
-                    result_pool, iterpool));
-        }
-      else if (id == svn_client_conflict_option_local_move_file_text_merge ||
-          id == svn_client_conflict_option_local_move_dir_merge ||
-          id == svn_client_conflict_option_sibling_move_file_text_merge ||
-          id == svn_client_conflict_option_sibling_move_dir_merge)
-          SVN_ERR(svn_client_conflict_option_get_moved_to_abspath_candidates(
+
+        if (*possible_moved_to_abspaths == NULL)
+          SVN_ERR(svn_client_conflict_option_get_moved_to_abspath_candidates2(
                     possible_moved_to_abspaths, builtin_option,
                     result_pool, iterpool));
     }
@@ -1682,6 +1674,69 @@ prompt_move_target_path(int *preferred_m
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+find_conflict_option_with_repos_move_targets(
+  svn_client_conflict_option_t **option_with_move_targets,
+  apr_array_header_t *options,
+  apr_pool_t *scratch_pool)
+{
+  apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+  int i;
+  apr_array_header_t *possible_moved_to_repos_relpaths = NULL;
+  
+  *option_with_move_targets = NULL;
+
+  for (i = 0; i < options->nelts; i++)
+    {
+      svn_client_conflict_option_t *option;
+
+      svn_pool_clear(iterpool);
+      option = APR_ARRAY_IDX(options, i, svn_client_conflict_option_t *);
+      SVN_ERR(svn_client_conflict_option_get_moved_to_repos_relpath_candidates2(
+        &possible_moved_to_repos_relpaths, option, iterpool, iterpool));
+      if (possible_moved_to_repos_relpaths)
+        {
+          *option_with_move_targets = option;
+          break;
+        }
+    }
+  svn_pool_destroy(iterpool);
+
+  return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+find_conflict_option_with_working_copy_move_targets(
+  svn_client_conflict_option_t **option_with_move_targets,
+  apr_array_header_t *options,
+  apr_pool_t *scratch_pool)
+{
+  apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+  int i;
+  apr_array_header_t *possible_moved_to_abspaths = NULL;
+  
+  *option_with_move_targets = NULL;
+
+  for (i = 0; i < options->nelts; i++)
+    {
+      svn_client_conflict_option_t *option;
+
+      svn_pool_clear(iterpool);
+      option = APR_ARRAY_IDX(options, i, svn_client_conflict_option_t *);
+      SVN_ERR(svn_client_conflict_option_get_moved_to_abspath_candidates2(
+              &possible_moved_to_abspaths, option, scratch_pool,
+              iterpool));
+      if (possible_moved_to_abspaths)
+        {
+          *option_with_move_targets = option;
+          break;
+        }
+    }
+  svn_pool_destroy(iterpool);
+
+  return SVN_NO_ERROR;
+}
+
 /* Ask the user what to do about the tree conflict described by CONFLICT
  * and either resolve the conflict accordingly or postpone resolution.
  * SCRATCH_POOL is used for temporary allocations. */
@@ -1809,7 +1864,7 @@ handle_tree_conflict(svn_boolean_t *reso
         {
           int preferred_move_target_idx;
           apr_array_header_t *options;
-          svn_client_conflict_option_t *conflict_option;
+          svn_client_conflict_option_t *option;
 
           SVN_ERR(prompt_move_target_path(&preferred_move_target_idx,
                                           possible_moved_to_repos_relpaths,
@@ -1822,22 +1877,12 @@ handle_tree_conflict(svn_boolean_t *reso
                                                                   ctx,
                                                                   iterpool,
                                                                   iterpool));
-          conflict_option =
-            svn_client_conflict_option_find_by_id( 
-              options,
-              svn_client_conflict_option_incoming_move_file_text_merge);
-          if (conflict_option == NULL)
+          SVN_ERR(find_conflict_option_with_repos_move_targets(
+            &option, options, iterpool));
+          if (option)
             {
-              conflict_option =
-                svn_client_conflict_option_find_by_id( 
-                  options, svn_client_conflict_option_incoming_move_dir_merge);
-            }
-
-          if (conflict_option)
-            {
-              SVN_ERR(svn_client_conflict_option_set_moved_to_repos_relpath(
-                        conflict_option, preferred_move_target_idx,
-                        ctx, iterpool));
+              SVN_ERR(svn_client_conflict_option_set_moved_to_repos_relpath2(
+                        option, preferred_move_target_idx, ctx, iterpool));
               repos_move_target_chosen = TRUE;
               wc_move_target_chosen = FALSE;
 
@@ -1863,7 +1908,7 @@ handle_tree_conflict(svn_boolean_t *reso
         {
           int preferred_move_target_idx;
           apr_array_header_t *options;
-          svn_client_conflict_option_t *conflict_option;
+          svn_client_conflict_option_t *option;
 
           SVN_ERR(prompt_move_target_path(&preferred_move_target_idx,
                                            possible_moved_to_abspaths, TRUE,
@@ -1875,50 +1920,12 @@ handle_tree_conflict(svn_boolean_t *reso
                                                                   ctx,
                                                                   iterpool,
                                                                   iterpool));
-          conflict_option =
-            svn_client_conflict_option_find_by_id( 
-              options,
-              svn_client_conflict_option_incoming_move_file_text_merge);
-          if (conflict_option == NULL)
-            {
-              conflict_option =
-                svn_client_conflict_option_find_by_id( 
-                  options,
-                  svn_client_conflict_option_local_move_file_text_merge);
-            }
-          if (conflict_option == NULL)
-            {
-              conflict_option =
-                svn_client_conflict_option_find_by_id( 
-                  options,
-                  svn_client_conflict_option_local_move_dir_merge);
-            }
-          if (conflict_option == NULL)
-            {
-              conflict_option =
-                svn_client_conflict_option_find_by_id( 
-                  options,
-                  svn_client_conflict_option_sibling_move_file_text_merge);
-            }
-          if (conflict_option == NULL)
-            {
-              conflict_option =
-                svn_client_conflict_option_find_by_id( 
-                  options,
-                  svn_client_conflict_option_sibling_move_dir_merge);
-            }
-          if (conflict_option == NULL)
-            {
-              conflict_option =
-                svn_client_conflict_option_find_by_id( 
-                  options, svn_client_conflict_option_incoming_move_dir_merge);
-            }
-
-          if (conflict_option)
+          SVN_ERR(find_conflict_option_with_working_copy_move_targets(
+            &option, options, iterpool));
+          if (option)
             {
-              SVN_ERR(svn_client_conflict_option_set_moved_to_abspath(
-                        conflict_option, preferred_move_target_idx, ctx,
-                        iterpool));
+              SVN_ERR(svn_client_conflict_option_set_moved_to_abspath2(
+                        option, preferred_move_target_idx, ctx, iterpool));
               wc_move_target_chosen = TRUE;
 
               /* Update option description. */

Modified: subversion/branches/java10-compat/subversion/svn/info-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/java10-compat/subversion/svn/info-cmd.c?rev=1841179&r1=1841178&r2=1841179&view=diff
==============================================================================
--- subversion/branches/java10-compat/subversion/svn/info-cmd.c (original)
+++ subversion/branches/java10-compat/subversion/svn/info-cmd.c Tue Sep 18 01:50:50 2018
@@ -21,6 +21,10 @@
  * ====================================================================
  */
 
+/* We define this here to remove any further warnings about the usage of
+   experimental functions in this file. */
+#define SVN_EXPERIMENTAL
+
 /* ==================================================================== */
 
 

Modified: subversion/branches/java10-compat/subversion/svn/svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/java10-compat/subversion/svn/svn.c?rev=1841179&r1=1841178&r2=1841179&view=diff
==============================================================================
--- subversion/branches/java10-compat/subversion/svn/svn.c (original)
+++ subversion/branches/java10-compat/subversion/svn/svn.c Tue Sep 18 01:50:50 2018
@@ -480,7 +480,7 @@ const apr_getopt_option_t svn_cl__option
   {"drop", opt_drop, 0,
                        N_("drop shelf after successful unshelve")},
 
-  {"viewspec", opt_viewspec, 0,
+  {"x-viewspec", opt_viewspec, 0,
                        N_("print the working copy layout")},
 
   /* Long-opt Aliases
@@ -823,7 +823,7 @@ const svn_opt_subcommand_desc3_t svn_cl_
      "  about TARGET.\n"
      "\n"), N_(
      "  EXPERIMENTAL:\n"
-     "  With --viewspec, print the working copy layout.\n"
+     "  With --x-viewspec, print the working copy layout.\n"
     )},
     {'r', 'R', opt_depth, opt_targets, opt_incremental, opt_xml,
      opt_changelist, opt_include_externals, opt_show_item, opt_no_newline,
@@ -1953,7 +1953,7 @@ const svn_opt_subcommand_desc3_t svn_cl_
     )},
     { 'q' } },
 
-  { "x-shelf-diff", svn_cl__shelf_diff, {"shelf-diff"}, {N_(
+  { "x-shelf-diff", svn_cl__shelf_diff, {0}, {N_(
      "Show shelved changes as a diff.\n"
      "usage: x-shelf-diff SHELF [VERSION]\n"
      "\n"), N_(
@@ -1968,7 +1968,7 @@ const svn_opt_subcommand_desc3_t svn_cl_
     {opt_summarize},
   },
 
-  { "x-shelf-drop", svn_cl__shelf_drop, {"shelf-drop"}, {N_(
+  { "x-shelf-drop", svn_cl__shelf_drop, {0}, {N_(
      "Delete a shelf.\n"
      "usage: x-shelf-drop SHELF [PATH ...]\n"
      "\n"), N_(
@@ -1980,7 +1980,7 @@ const svn_opt_subcommand_desc3_t svn_cl_
     )},
   },
 
-  { "x-shelf-list", svn_cl__shelf_list, {"shelf-list", "shelves"}, {N_(
+  { "x-shelf-list", svn_cl__shelf_list, {"x-shelves"}, {N_(
      "List shelves.\n"
      "usage: x-shelf-list [PATH ...]\n"
      "\n"), N_(
@@ -1994,7 +1994,7 @@ const svn_opt_subcommand_desc3_t svn_cl_
     {'q', 'v'}
   },
 
-  { "x-shelf-list-by-paths", svn_cl__shelf_list_by_paths, {"shelf-list-by-paths"}, {N_(
+  { "x-shelf-list-by-paths", svn_cl__shelf_list_by_paths, {0}, {N_(
      "List which shelf affects each path.\n"
      "usage: x-shelf-list-by-paths [PATH...]\n"
      "\n"), N_(
@@ -2005,7 +2005,7 @@ const svn_opt_subcommand_desc3_t svn_cl_
     )},
   },
 
-  { "x-shelf-log", svn_cl__shelf_log, {"shelf-log"}, {N_(
+  { "x-shelf-log", svn_cl__shelf_log, {0}, {N_(
      "Show the versions of a shelf.\n"
      "usage: x-shelf-log SHELF [PATH...]\n"
      "\n"), N_(
@@ -2018,7 +2018,7 @@ const svn_opt_subcommand_desc3_t svn_cl_
     {'q', 'v'}
   },
 
-  { "x-shelf-save", svn_cl__shelf_save, {"shelf-save"}, {N_(
+  { "x-shelf-save", svn_cl__shelf_save, {0}, {N_(
      "Copy local changes onto a new version of a shelf.\n"
      "usage: x-shelf-save SHELF [PATH...]\n"
      "\n"), N_(
@@ -2036,7 +2036,7 @@ const svn_opt_subcommand_desc3_t svn_cl_
     }
   },
 
-  { "x-shelve", svn_cl__shelf_shelve, {"shelve"}, {N_(
+  { "x-shelve", svn_cl__shelf_shelve, {0}, {N_(
      "Move local changes onto a shelf.\n"
      "usage: x-shelve [--keep-local] SHELF [PATH...]\n"
      "\n"), N_(
@@ -2065,7 +2065,7 @@ const svn_opt_subcommand_desc3_t svn_cl_
      SVN_CL__LOG_MSG_OPTIONS,
     } },
 
-  { "x-unshelve", svn_cl__shelf_unshelve, {"unshelve"}, {N_(
+  { "x-unshelve", svn_cl__shelf_unshelve, {0}, {N_(
      "Copy shelved changes back into the WC.\n"
      "usage: x-unshelve [--drop] [SHELF [VERSION]]\n"
      "\n"), N_(

Modified: subversion/branches/java10-compat/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout
URL: http://svn.apache.org/viewvc/subversion/branches/java10-compat/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout?rev=1841179&r1=1841178&r2=1841179&view=diff
==============================================================================
--- subversion/branches/java10-compat/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout (original)
+++ subversion/branches/java10-compat/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout Tue Sep 18 01:50:50 2018
@@ -47,14 +47,14 @@ Available subcommands:
    unlock
    update (up)
    upgrade
-   x-shelf-diff (shelf-diff)
-   x-shelf-drop (shelf-drop)
-   x-shelf-list (shelf-list, shelves)
-   x-shelf-list-by-paths (shelf-list-by-paths)
-   x-shelf-log (shelf-log)
-   x-shelf-save (shelf-save)
-   x-shelve (shelve)
-   x-unshelve (unshelve)
+   x-shelf-diff
+   x-shelf-drop
+   x-shelf-list (x-shelves)
+   x-shelf-list-by-paths
+   x-shelf-log
+   x-shelf-save
+   x-shelve
+   x-unshelve
 
 Subversion is a tool for version control.
 For additional information, see http://subversion.apache.org/

Modified: subversion/branches/java10-compat/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout
URL: http://svn.apache.org/viewvc/subversion/branches/java10-compat/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout?rev=1841179&r1=1841178&r2=1841179&view=diff
==============================================================================
--- subversion/branches/java10-compat/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout (original)
+++ subversion/branches/java10-compat/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout Tue Sep 18 01:50:50 2018
@@ -47,14 +47,14 @@ Available subcommands:
    unlock
    update (up)
    upgrade
-   x-shelf-diff (shelf-diff)
-   x-shelf-drop (shelf-drop)
-   x-shelf-list (shelf-list, shelves)
-   x-shelf-list-by-paths (shelf-list-by-paths)
-   x-shelf-log (shelf-log)
-   x-shelf-save (shelf-save)
-   x-shelve (shelve)
-   x-unshelve (unshelve)
+   x-shelf-diff
+   x-shelf-drop
+   x-shelf-list (x-shelves)
+   x-shelf-list-by-paths
+   x-shelf-log
+   x-shelf-save
+   x-shelve
+   x-unshelve
 
 Subversion is a tool for version control.
 For additional information, see http://subversion.apache.org/

Modified: subversion/branches/java10-compat/subversion/tests/cmdline/shelf_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/java10-compat/subversion/tests/cmdline/shelf_tests.py?rev=1841179&r1=1841178&r2=1841179&view=diff
==============================================================================
--- subversion/branches/java10-compat/subversion/tests/cmdline/shelf_tests.py (original)
+++ subversion/branches/java10-compat/subversion/tests/cmdline/shelf_tests.py Tue Sep 18 01:50:50 2018
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-#  shelve_tests.py:  testing shelving
+#  shelf_tests.py:  testing shelving
 #
 #  Subversion is a tool for revision control.
 #  See http://subversion.apache.org for more information.
@@ -111,12 +111,12 @@ def shelve_unshelve_verify(sbox, modifie
 
   if cannot_shelve:
     svntest.actions.run_and_verify_svn(None, '.* could not be shelved.*',
-                                       'shelve', 'foo')
+                                       'x-shelve', 'foo')
     return
 
   # Shelve; check there are no longer any modifications
   svntest.actions.run_and_verify_svn(None, [],
-                                     'shelve', 'foo')
+                                     'x-shelve', 'foo')
   check_wc_state(wc_dir, virginal_state)
 
   # List; ensure the shelf is listed
@@ -124,11 +124,11 @@ def shelve_unshelve_verify(sbox, modifie
     [r'foo\s*version \d+.*',
      r' ',
     ])
-  svntest.actions.run_and_verify_svn(expected_output, [], 'shelves')
+  svntest.actions.run_and_verify_svn(expected_output, [], 'x-shelves')
 
   # Unshelve; check the original modifications are here again
   svntest.actions.run_and_verify_svn(None, [],
-                                     'unshelve', 'foo')
+                                     'x-unshelve', 'foo')
   check_wc_state(wc_dir, modified_state)
 
 #----------------------------------------------------------------------
@@ -273,14 +273,14 @@ def save_revert_restore(sbox, modifier1,
 
   # Save a checkpoint; check nothing changed
   svntest.actions.run_and_verify_svn(None, [],
-                                     'shelf-save', 'foo')
+                                     'x-shelf-save', 'foo')
   check_wc_state(wc_dir, modified_state1)
 
   # Modify again; remember the state; save a checkpoint
   modifier2(sbox)
   modified_state2 = get_wc_state(wc_dir)
   svntest.actions.run_and_verify_svn(None, [],
-                                     'shelf-save', 'foo')
+                                     'x-shelf-save', 'foo')
   check_wc_state(wc_dir, modified_state2)
 
   # Revert
@@ -290,7 +290,7 @@ def save_revert_restore(sbox, modifier1,
 
   # Restore; check the original modifications are here again
   svntest.actions.run_and_verify_svn(None, [],
-                                     'unshelve', 'foo', '1')
+                                     'x-unshelve', 'foo', '1')
   check_wc_state(wc_dir, modified_state1)
 
   os.chdir(was_cwd)
@@ -351,7 +351,7 @@ def unshelve_refuses_if_conflicts(sbox):
 
   # Shelve; check there are no longer any local mods
   svntest.actions.run_and_verify_svn(None, [],
-                                     'shelve', 'foo')
+                                     'x-shelve', 'foo')
   check_wc_state(wc_dir, initial_state)
 
   # Make a different local mod that will conflict with the shelf
@@ -360,7 +360,7 @@ def unshelve_refuses_if_conflicts(sbox):
 
   # Try to unshelve; check it fails with an error about a conflict
   svntest.actions.run_and_verify_svn(None, '.*[Cc]onflict.*',
-                                     'unshelve', 'foo')
+                                     'x-unshelve', 'foo')
   # Check nothing changed in the attempt
   check_wc_state(wc_dir, modified_state2)
 
@@ -462,13 +462,13 @@ def shelve_with_log_message(sbox):
   sbox.simple_add_text('New file', 'f')
   log_message = 'Log message for foo'
   svntest.actions.run_and_verify_svn(None, [],
-                                     'shelve', 'foo', '-m', log_message)
+                                     'x-shelve', 'foo', '-m', log_message)
   expected_output = svntest.verify.RegexListOutput(
     ['foo .*',
      ' ' + log_message
     ])
   svntest.actions.run_and_verify_svn(expected_output, [],
-                                     'shelf-list')
+                                     'x-shelf-list')
 
   os.chdir(was_cwd)
 
@@ -518,7 +518,7 @@ def shelf_status(sbox):
   run_and_verify_status(sbox.wc_dir, expected_status)
 
   svntest.actions.run_and_verify_svn(None, [],
-                                     'shelve', 'foo')
+                                     'x-shelve', 'foo')
   run_and_verify_shelf_status(sbox.wc_dir, expected_status, shelf='foo')
 
   os.chdir(was_cwd)
@@ -603,17 +603,17 @@ def list_shelves(sbox):
 
   # an empty list
   svntest.actions.run_and_verify_svn([], [],
-                                     'shelf-list', '-q')
+                                     'x-shelf-list', '-q')
 
   # make two shelves
   sbox.simple_append('A/mu', 'appended mu text')
   svntest.actions.run_and_verify_svn(None, [],
-                                     'shelf-save', 'foo')
+                                     'x-shelf-save', 'foo')
   sbox.simple_append('A/mu', 'appended more text')
   svntest.actions.run_and_verify_svn(None, [],
-                                     'shelf-save', 'foo', '-m', 'log msg')
+                                     'x-shelf-save', 'foo', '-m', 'log msg')
   svntest.actions.run_and_verify_svn(None, [],
-                                     'shelf-save', 'bar', '-m', 'log msg')
+                                     'x-shelf-save', 'bar', '-m', 'log msg')
 
   # We don't check for time-ordering of the shelves. If we want to do so, we
   # would need to sleep for timestamps to differ, between creating them.
@@ -621,7 +621,7 @@ def list_shelves(sbox):
   # a quiet list
   expected_out = svntest.verify.UnorderedRegexListOutput(['foo', 'bar'])
   svntest.actions.run_and_verify_svn(expected_out, [],
-                                     'shelf-list', '-q')
+                                     'x-shelf-list', '-q')
 
   # a detailed list
   expected_out = svntest.verify.UnorderedRegexListOutput(['foo .* 1 path.*',
@@ -629,7 +629,7 @@ def list_shelves(sbox):
                                                           'bar .* 1 path.*',
                                                           ' log msg'])
   svntest.actions.run_and_verify_svn(expected_out, [],
-                                     'shelf-list')
+                                     'x-shelf-list')
 
   os.chdir(was_cwd)
 
@@ -668,7 +668,7 @@ def refuse_to_shelve_conflict(sbox):
     r'      >   not shelved'])
   svntest.actions.run_and_verify_svn(expected_out,
                                      '.* 1 path could not be shelved',
-                                     'shelf-save', 'foo')
+                                     'x-shelf-save', 'foo')
 
   os.chdir(was_cwd)
 
@@ -695,7 +695,7 @@ def unshelve_with_merge(sbox, setup, mod
 
   # Shelve; check there are no longer any modifications
   svntest.actions.run_and_verify_svn(None, [],
-                                     'shelve', 'foo')
+                                     'x-shelve', 'foo')
   check_wc_state(wc_dir, initial_state)
 
   # Make a different change, with which we shall merge
@@ -705,7 +705,7 @@ def unshelve_with_merge(sbox, setup, mod
 
   # Unshelve; check the expected result of the merge
   svntest.actions.run_and_verify_svn(None, [],
-                                     'unshelve', 'foo')
+                                     'x-unshelve', 'foo')
   tweak_expected_state(modified_state)
   check_wc_state(wc_dir, modified_state)
 
@@ -892,7 +892,7 @@ def run_and_verify_shelf_diff_summarize(
 
   exit_code, output, errput = svntest.actions.run_and_verify_svn(
                                 None, [],
-                                'shelf-diff', '--summarize', shelf, *args)
+                                'x-shelf-diff', '--summarize', shelf, *args)
 
   actual = svntest.tree.build_tree_from_diff_summarize(output)
 
@@ -930,7 +930,7 @@ def shelf_diff_simple(sbox):
   modified_state = get_wc_state(wc_dir)
 
   svntest.actions.run_and_verify_svn(None, [],
-                                     'shelf-save', 'foo')
+                                     'x-shelf-save', 'foo')
 
   # basic svn-style diff
   expected_output = make_diff_header('A/mu', 'revision 2', 'working copy') + [
@@ -940,7 +940,7 @@ def shelf_diff_simple(sbox):
                     ] + make_diff_prop_header('A/mu') \
                     + make_diff_prop_modified('p1', 'v', 'changed')
   svntest.actions.run_and_verify_svn(expected_output, [],
-                                     'shelf-diff', 'foo')
+                                     'x-shelf-diff', 'foo')
 
   # basic summary diff
   expected_diff = svntest.wc.State(wc_dir, {

Modified: subversion/branches/java10-compat/subversion/tests/cmdline/svntest/main.py
URL: http://svn.apache.org/viewvc/subversion/branches/java10-compat/subversion/tests/cmdline/svntest/main.py?rev=1841179&r1=1841178&r2=1841179&view=diff
==============================================================================
--- subversion/branches/java10-compat/subversion/tests/cmdline/svntest/main.py (original)
+++ subversion/branches/java10-compat/subversion/tests/cmdline/svntest/main.py Tue Sep 18 01:50:50 2018
@@ -56,7 +56,7 @@ import svntest
 from svntest import Failure
 from svntest import Skip
 
-SVN_VER_MINOR = 11
+SVN_VER_MINOR = 12
 
 ######################################################################
 #

Modified: subversion/branches/java10-compat/subversion/tests/libsvn_client/conflicts-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/java10-compat/subversion/tests/libsvn_client/conflicts-test.c?rev=1841179&r1=1841178&r2=1841179&view=diff
==============================================================================
--- subversion/branches/java10-compat/subversion/tests/libsvn_client/conflicts-test.c (original)
+++ subversion/branches/java10-compat/subversion/tests/libsvn_client/conflicts-test.c Tue Sep 18 01:50:50 2018
@@ -5700,6 +5700,185 @@ test_cherry_pick_post_move_edit_dir(cons
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+test_local_missing_abiguous_moves(const svn_test_opts_t *opts,
+                                  apr_pool_t *pool)
+{
+  svn_test__sandbox_t *b = apr_palloc(pool, sizeof(*b));
+  svn_opt_revision_t opt_rev;
+  svn_client_ctx_t *ctx;
+  svn_client_conflict_t *conflict;
+  apr_array_header_t *options;
+  svn_client_conflict_option_t *option;
+  apr_array_header_t *possible_moved_to_repos_relpaths;
+  apr_array_header_t *possible_moved_to_abspaths;
+  struct status_baton sb;
+  struct svn_client_status_t *status;
+  svn_stringbuf_t *buf;
+
+  SVN_ERR(svn_test__sandbox_create(b, "local_missing_ambiguous_moves", opts,
+                                   pool));
+
+  SVN_ERR(sbox_add_and_commit_greek_tree(b)); /* r1 */
+
+  /* Create a copy of node "A" (the "trunk") to "A1" (the "branch"). */
+  SVN_ERR(sbox_wc_copy(b, "A", "A1"));
+  SVN_ERR(sbox_wc_commit(b, "")); /* r2 */
+
+  SVN_ERR(sbox_wc_update(b, "", SVN_INVALID_REVNUM));
+  /* Copy a file across branch boundaries (gives ambiguous WC targets later). */
+  SVN_ERR(sbox_wc_copy(b, "A/mu", "A1/mu-copied-from-A"));
+  /* Create an ambiguous move with the "trunk". */
+  SVN_ERR(sbox_wc_copy(b, "A/mu", "A/mu-copied"));
+  SVN_ERR(sbox_wc_move(b, "A/mu", "A/mu-moved"));
+  SVN_ERR(sbox_wc_commit(b, "")); /* r3 */
+
+  /* Modify the moved file on the "branch". */
+  SVN_ERR(sbox_file_write(b, "A1/mu", "Modified content." APR_EOL_STR));
+  SVN_ERR(sbox_wc_commit(b, "")); /* r4 */
+  SVN_ERR(sbox_wc_update(b, "", SVN_INVALID_REVNUM));
+
+  /* Merge "A1" ("branch") into "A" ("trunk"). */
+  opt_rev.kind = svn_opt_revision_head;
+  opt_rev.value.number = SVN_INVALID_REVNUM;
+  SVN_ERR(svn_test__create_client_ctx(&ctx, b, pool));
+  SVN_ERR(svn_client_merge_peg5(svn_path_url_add_component2(b->repos_url, "A1",
+                                                            pool),
+                                NULL, &opt_rev, sbox_wc_path(b, "A"),
+                                svn_depth_infinity,
+                                FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
+                                NULL, ctx, pool));
+
+  SVN_ERR(svn_client_conflict_get(&conflict, sbox_wc_path(b, "A/mu"),
+                                  ctx, b->pool, b->pool));
+  {
+    svn_client_conflict_option_id_t expected_opts[] = {
+      svn_client_conflict_option_postpone,
+      svn_client_conflict_option_accept_current_wc_state,
+      -1 /* end of list */
+    };
+    SVN_ERR(assert_tree_conflict_options(conflict, ctx, expected_opts,
+                                         b->pool));
+  }
+  SVN_ERR(svn_client_conflict_tree_get_details(conflict, ctx, b->pool));
+  {
+    svn_client_conflict_option_id_t expected_opts[] = {
+      svn_client_conflict_option_postpone,
+      svn_client_conflict_option_accept_current_wc_state,
+      svn_client_conflict_option_local_move_file_text_merge,
+      -1 /* end of list */
+    };
+    SVN_ERR(assert_tree_conflict_options(conflict, ctx, expected_opts,
+                                         b->pool));
+  }
+
+  SVN_ERR(svn_client_conflict_tree_get_resolution_options(&options, conflict,
+                                                          ctx, b->pool,
+                                                          b->pool));
+  option = svn_client_conflict_option_find_by_id(
+             options, svn_client_conflict_option_local_move_file_text_merge);
+  SVN_TEST_ASSERT(option != NULL);
+
+	/*
+	 * Possible repository destinations for moved-away 'A/mu' are:
+	 *  (1): '^/A/mu-copied'
+	 *  (2): '^/A/mu-moved'
+	 *  (3): '^/A1/mu-copied-from-A'
+	 */
+  SVN_ERR(svn_client_conflict_option_get_moved_to_repos_relpath_candidates(
+            &possible_moved_to_repos_relpaths, option, b->pool, b->pool));
+  SVN_TEST_INT_ASSERT(possible_moved_to_repos_relpaths->nelts, 3);
+  SVN_TEST_STRING_ASSERT(
+    APR_ARRAY_IDX(possible_moved_to_repos_relpaths, 0, const char *),
+    "A/mu-copied");
+  SVN_TEST_STRING_ASSERT(
+    APR_ARRAY_IDX(possible_moved_to_repos_relpaths, 1, const char *),
+    "A/mu-moved");
+  SVN_TEST_STRING_ASSERT(
+    APR_ARRAY_IDX(possible_moved_to_repos_relpaths, 2, const char *),
+    "A1/mu-copied-from-A");
+
+  /* Move target for "A/mu-copied" (selected by default) is not ambiguous. */
+  SVN_ERR(svn_client_conflict_option_get_moved_to_abspath_candidates(
+            &possible_moved_to_abspaths, option, b->pool, b->pool));
+  SVN_TEST_INT_ASSERT(possible_moved_to_abspaths->nelts, 1);
+  SVN_TEST_STRING_ASSERT(
+    APR_ARRAY_IDX(possible_moved_to_abspaths, 0, const char *),
+    sbox_wc_path(b, "A/mu-copied"));
+
+  /* Move target for "A/mu-moved" is not ambiguous. */
+  SVN_ERR(svn_client_conflict_option_set_moved_to_repos_relpath(option, 1,
+                                                                ctx, b->pool));
+  SVN_ERR(svn_client_conflict_option_get_moved_to_abspath_candidates(
+            &possible_moved_to_abspaths, option, b->pool, b->pool));
+  SVN_TEST_INT_ASSERT(possible_moved_to_abspaths->nelts, 1);
+  SVN_TEST_STRING_ASSERT(
+    APR_ARRAY_IDX(possible_moved_to_abspaths, 0, const char *),
+    sbox_wc_path(b, "A/mu-moved"));
+
+  /* Select move target "A1/mu-copied-from-A". */
+  SVN_ERR(svn_client_conflict_option_set_moved_to_repos_relpath(option, 2,
+                                                                ctx, b->pool));
+
+  /*
+	 * Possible working copy destinations for moved-away 'A/mu' are:
+	 *  (1): 'A/mu-copied-from-A'
+	 *  (2): 'A1/mu-copied-from-A'
+   */
+  SVN_ERR(svn_client_conflict_option_get_moved_to_abspath_candidates(
+            &possible_moved_to_abspaths, option, b->pool, b->pool));
+  SVN_TEST_INT_ASSERT(possible_moved_to_abspaths->nelts, 2);
+  SVN_TEST_STRING_ASSERT(
+    APR_ARRAY_IDX(possible_moved_to_abspaths, 0, const char *),
+    sbox_wc_path(b, "A/mu-copied-from-A"));
+  SVN_TEST_STRING_ASSERT(
+    APR_ARRAY_IDX(possible_moved_to_abspaths, 1, const char *),
+    sbox_wc_path(b, "A1/mu-copied-from-A"));
+
+  /* Select move target "A/mu-moved". */
+  SVN_ERR(svn_client_conflict_option_set_moved_to_repos_relpath(option, 1,
+                                                                ctx, b->pool));
+
+  /* Resolve the tree conflict. */
+  SVN_ERR(svn_client_conflict_tree_resolve_by_id(
+            conflict,
+            svn_client_conflict_option_local_move_file_text_merge, ctx,
+            b->pool));
+
+  /* The node "A/mu" should no longer exist. */
+  SVN_TEST_ASSERT_ERROR(svn_client_conflict_get(&conflict,
+                                                sbox_wc_path(b, "A/mu"),
+                                                ctx, pool, pool),
+                        SVN_ERR_WC_PATH_NOT_FOUND);
+
+  /* Ensure that the merged file has the expected status. */
+  opt_rev.kind = svn_opt_revision_working;
+  sb.result_pool = b->pool;
+  SVN_ERR(svn_client_status6(NULL, ctx, sbox_wc_path(b, "A/mu-moved"),
+                             &opt_rev, svn_depth_unknown, TRUE, TRUE,
+                             TRUE, TRUE, FALSE, TRUE, NULL,
+                             status_func, &sb, b->pool));
+  status = sb.status;
+  SVN_TEST_ASSERT(status->kind == svn_node_file);
+  SVN_TEST_ASSERT(status->versioned);
+  SVN_TEST_ASSERT(!status->conflicted);
+  SVN_TEST_ASSERT(status->node_status == svn_wc_status_modified);
+  SVN_TEST_ASSERT(status->text_status == svn_wc_status_modified);
+  SVN_TEST_ASSERT(status->prop_status == svn_wc_status_none);
+  SVN_TEST_ASSERT(!status->copied);
+  SVN_TEST_ASSERT(!status->switched);
+  SVN_TEST_ASSERT(!status->file_external);
+  SVN_TEST_ASSERT(status->moved_from_abspath == NULL);
+  SVN_TEST_ASSERT(status->moved_to_abspath == NULL);
+
+  /* And it should have expected contents. */
+  SVN_ERR(svn_stringbuf_from_file2(&buf, sbox_wc_path(b, "A/mu-moved"),
+                                   pool));
+  SVN_TEST_STRING_ASSERT(buf->data, "Modified content." APR_EOL_STR);
+
+  return SVN_NO_ERROR;
+}
+
 /* ========================================================================== */
 
 
@@ -5798,6 +5977,8 @@ static struct svn_test_descriptor_t test
                        "do not suggest unrelated move targets (#4766)"),
     SVN_TEST_OPTS_PASS(test_cherry_pick_post_move_edit_dir,
                        "cherry-pick edit from moved directory"),
+    SVN_TEST_OPTS_PASS(test_local_missing_abiguous_moves,
+                       "local missing conflict with ambiguous moves"),
     SVN_TEST_NULL
   };
 

Modified: subversion/branches/java10-compat/tools/client-side/bash_completion
URL: http://svn.apache.org/viewvc/subversion/branches/java10-compat/tools/client-side/bash_completion?rev=1841179&r1=1841178&r2=1841179&view=diff
==============================================================================
--- subversion/branches/java10-compat/tools/client-side/bash_completion (original)
+++ subversion/branches/java10-compat/tools/client-side/bash_completion Tue Sep 18 01:50:50 2018
@@ -248,8 +248,8 @@ _svn()
 	cmds="$cmds patch propdel pdel propedit pedit propget pget proplist"
 	cmds="$cmds plist propset pset relocate resolve resolved revert status"
 	cmds="$cmds switch unlock update upgrade"
-	cmds="$cmds shelf-list-by-paths shelf-diff shelf-drop shelf-list shelf-log shelf-save"
-	cmds="$cmds shelve shelves unshelve"
+	cmds="$cmds x-shelf-diff x-shelf-drop x-shelf-list x-shelf-list-by-paths"
+	cmds="$cmds x-shelf-log x-shelf-save x-shelve x-shelves x-unshelve"
 
 	# help options have a strange command status...
 	local helpOpts='--help -h'
@@ -1024,34 +1024,34 @@ _svn()
 	upgrade)
 		cmdOpts="$qOpts $pOpts"
 		;;
-	shelf-list-by-paths)
+	x-shelf-list-by-paths)
 		cmdOpts="$pOpts"
 		;;
-	shelf-diff)
+	x-shelf-diff)
 		cmdOpts="$pOpts --summarize"
 		;;
-	shelf-drop)
+	x-shelf-drop)
 		cmdOpts="$pOpts"
 		;;
-	shelf-list|shelves)
+	x-shelf-list|x-shelves)
 		cmdOpts="$qOpts $pOpts"
 		;;
-	shelf-log)
+	x-shelf-log)
 		cmdOpts="$qOpts $pOpts"
 		;;
-	shelf-save)
+	x-shelf-save)
 		cmdOpts="--dry-run \
                          --depth --targets $cOpts \
                          $mOpts \
                          $qOpts $pOpts"
 		;;
-	shelve)
+	x-shelve)
 		cmdOpts="--keep-local --dry-run \
                          --depth --targets $cOpts \
                          $mOpts \
                          $qOpts $pOpts"
 		;;
-	unshelve)
+	x-unshelve)
 		cmdOpts="--drop --dry-run \
                          $qOpts $pOpts"
 		;;

Modified: subversion/branches/java10-compat/tools/dist/release.py
URL: http://svn.apache.org/viewvc/subversion/branches/java10-compat/tools/dist/release.py?rev=1841179&r1=1841178&r2=1841179&view=diff
==============================================================================
--- subversion/branches/java10-compat/tools/dist/release.py (original)
+++ subversion/branches/java10-compat/tools/dist/release.py Tue Sep 18 01:50:50 2018
@@ -75,6 +75,14 @@ tool_versions = {
             'swig'     : ['3.0.12',
             '7cf9f447ae7ed1c51722efc45e7f14418d15d7a1e143ac9f09a668999f4fc94d'],
   },
+  '1.11' : {
+            'autoconf' : ['2.69',
+            '954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969'],
+            'libtool'  : ['2.4.6',
+            'e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3'],
+            'swig'     : ['3.0.12',
+            '7cf9f447ae7ed1c51722efc45e7f14418d15d7a1e143ac9f09a668999f4fc94d'],
+  },
   '1.10' : {
             'autoconf' : ['2.69',
             '954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969'],
@@ -103,7 +111,9 @@ tool_versions = {
 
 # The version that is our current recommended release
 # ### TODO: derive this from svn_version.h; see ../../build/getversion.py
-recommended_release = '1.10'
+recommended_release = '1.11'
+# For clean-dist, a whitelist of artifacts to keep, by version.
+supported_release_lines = frozenset({"1.9", "1.10", "1.11", "1.12"})
 
 # Some constants
 repos = 'https://svn.apache.org/repos/asf/subversion'
@@ -906,15 +916,15 @@ def clean_dist(args):
     filenames = stdout.split('\n')
     filenames = filter(lambda x: x.startswith('subversion-'), filenames)
     versions = set(map(Version, filenames))
-    minor_lines = set(map(minor, versions))
     to_keep = set()
-    # Keep 3 minor lines: 1.10.0-alpha3, 1.9.7, 1.8.19.
     # TODO: When we release 1.A.0 GA we'll have to manually remove 1.(A-2).* artifacts.
-    for recent_line in sorted(minor_lines, reverse=True)[:3]:
-        to_keep.add(max(
+    for line_to_keep in [minor(Version(x + ".0")) for x in supported_release_lines]:
+        candidates = list(
             x for x in versions
-            if minor(x) == recent_line
-        ))
+            if minor(x) == line_to_keep
+        )
+        if candidates:
+            to_keep.add(max(candidates))
     for i in sorted(to_keep):
         logging.info("Saving release '%s'", i)