You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2018/01/08 17:49:29 UTC

svn commit: r1820588 - in /subversion/branches/shelve-checkpoint: subversion/svn/cl.h subversion/svn/shelve-cmd.c subversion/svn/svn.c tools/client-side/bash_completion

Author: julianfoad
Date: Mon Jan  8 17:49:28 2018
New Revision: 1820588

URL: http://svn.apache.org/viewvc?rev=1820588&view=rev
Log:
On the 'shelve-checkpoint' branch: changes to the set of shelving subcommands.

Modified:
    subversion/branches/shelve-checkpoint/subversion/svn/cl.h
    subversion/branches/shelve-checkpoint/subversion/svn/shelve-cmd.c
    subversion/branches/shelve-checkpoint/subversion/svn/svn.c
    subversion/branches/shelve-checkpoint/tools/client-side/bash_completion

Modified: subversion/branches/shelve-checkpoint/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/svn/cl.h?rev=1820588&r1=1820587&r2=1820588&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/subversion/svn/cl.h (original)
+++ subversion/branches/shelve-checkpoint/subversion/svn/cl.h Mon Jan  8 17:49:28 2018
@@ -257,6 +257,7 @@ typedef struct svn_cl__opt_state_t
   svn_boolean_t adds_as_modification; /* update 'add vs add' no tree conflict */
   svn_boolean_t vacuum_pristines; /* remove unreferenced pristines */
   svn_boolean_t list;
+  svn_boolean_t log;
 } svn_cl__opt_state_t;
 
 /* Conflict stats for operations such as update and merge. */
@@ -305,6 +306,10 @@ svn_opt_subcommand_t
   svn_cl__revert,
   svn_cl__resolve,
   svn_cl__resolved,
+  svn_cl__shelf,
+  svn_cl__shelf_diff,
+  svn_cl__shelf_drop,
+  svn_cl__shelf_log,
   svn_cl__shelve,
   svn_cl__unshelve,
   svn_cl__shelves,

Modified: subversion/branches/shelve-checkpoint/subversion/svn/shelve-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/svn/shelve-cmd.c?rev=1820588&r1=1820587&r2=1820588&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/subversion/svn/shelve-cmd.c (original)
+++ subversion/branches/shelve-checkpoint/subversion/svn/shelve-cmd.c Mon Jan  8 17:49:28 2018
@@ -177,11 +177,11 @@ shelves_list(const char *local_abspath,
 /* Print info about each checkpoint of the shelf named NAME.
  */
 static svn_error_t *
-checkpoint_log(const char *name,
-               const char *local_abspath,
-               svn_boolean_t with_diffstat,
-               svn_client_ctx_t *ctx,
-               apr_pool_t *scratch_pool)
+shelf_log(const char *name,
+          const char *local_abspath,
+          svn_boolean_t with_diffstat,
+          svn_client_ctx_t *ctx,
+          apr_pool_t *scratch_pool)
 {
   apr_time_t time_now = apr_time_now();
   svn_client_shelf_t *shelf;
@@ -375,13 +375,13 @@ check_no_modified_paths(svn_client_shelf
  * If @a dry_run is true, don't actually do it.
  */
 static svn_error_t *
-restore(const char *name,
-        const char *arg,
-        svn_boolean_t dry_run,
-        svn_boolean_t quiet,
-        const char *local_abspath,
-        svn_client_ctx_t *ctx,
-        apr_pool_t *scratch_pool)
+shelf_restore(const char *name,
+              const char *arg,
+              svn_boolean_t dry_run,
+              svn_boolean_t quiet,
+              const char *local_abspath,
+              svn_client_ctx_t *ctx,
+              apr_pool_t *scratch_pool)
 {
   int version, old_version;
   svn_client_shelf_t *shelf;
@@ -433,11 +433,11 @@ restore(const char *name,
 }
 
 static svn_error_t *
-export_as_patch(const char *name,
-                const char *arg,
-                const char *local_abspath,
-                svn_client_ctx_t *ctx,
-                apr_pool_t *scratch_pool)
+shelf_diff(const char *name,
+           const char *arg,
+           const char *local_abspath,
+           svn_client_ctx_t *ctx,
+           apr_pool_t *scratch_pool)
 {
   int version;
   svn_client_shelf_t *shelf;
@@ -471,19 +471,33 @@ export_as_patch(const char *name,
 }
 
 /* This implements the `svn_opt_subcommand_t' interface. */
+static svn_error_t *
+shelf_drop(const char *name,
+           const char *local_abspath,
+           svn_boolean_t dry_run,
+           svn_boolean_t quiet,
+           svn_client_ctx_t *ctx,
+           apr_pool_t *scratch_pool)
+{
+  SVN_ERR(svn_client_shelf_delete(name, local_abspath, dry_run,
+                                  ctx, scratch_pool));
+  if (! quiet)
+    SVN_ERR(svn_cmdline_printf(scratch_pool,
+                               _("deleted '%s'\n"),
+                               name));
+  return SVN_NO_ERROR;
+}
+
+/* This implements the `svn_opt_subcommand_t' interface. */
 svn_error_t *
-svn_cl__shelve(apr_getopt_t *os,
-               void *baton,
-               apr_pool_t *pool)
+svn_cl__shelf(apr_getopt_t *os,
+              void *baton,
+              apr_pool_t *pool)
 {
   svn_cl__opt_state_t *opt_state = ((svn_cl__cmd_baton_t *) baton)->opt_state;
   svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
   const char *local_abspath;
   const char *name;
-  apr_array_header_t *targets;
-
-  if (opt_state->quiet)
-    ctx->notify_func2 = NULL; /* Easy out: avoid unneeded work */
 
   SVN_ERR(svn_dirent_get_absolute(&local_abspath, "", pool));
 
@@ -506,15 +520,60 @@ svn_cl__shelve(apr_getopt_t *os,
       if (os->ind < os->argc)
         return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, 0, NULL);
 
-      SVN_ERR(svn_client_shelf_delete(name, local_abspath,
-                                      opt_state->dry_run, ctx, pool));
-      if (! opt_state->quiet)
-        SVN_ERR(svn_cmdline_printf(pool,
-                                   _("deleted '%s'\n"),
-                                   name));
+      SVN_ERR(shelf_drop(name, local_abspath,
+                         opt_state->dry_run, opt_state->quiet,
+                         ctx, pool));
       return SVN_NO_ERROR;
     }
 
+  if (opt_state->log)
+    {
+      if (os->ind < os->argc)
+        return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, 0, NULL);
+
+      SVN_ERR(shelf_log(name, local_abspath,
+                        !opt_state->quiet, ctx, pool));
+      return SVN_NO_ERROR;
+    }
+
+  if (opt_state->show_diff)
+    {
+      const char *arg = NULL;
+
+      /* Which checkpoint number? */
+      if (os->ind < os->argc)
+        SVN_ERR(get_next_argument(&arg, os, pool, pool));
+
+      if (os->ind < os->argc)
+        return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, 0, NULL);
+
+      SVN_ERR(shelf_diff(name, arg, local_abspath,
+                         ctx, pool));
+      return SVN_NO_ERROR;
+    }
+
+  return SVN_NO_ERROR;
+}
+
+/* This implements the `svn_opt_subcommand_t' interface. */
+svn_error_t *
+svn_cl__shelve(apr_getopt_t *os,
+               void *baton,
+               apr_pool_t *pool)
+{
+  svn_cl__opt_state_t *opt_state = ((svn_cl__cmd_baton_t *) baton)->opt_state;
+  svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
+  const char *local_abspath;
+  const char *name;
+  apr_array_header_t *targets;
+
+  if (opt_state->quiet)
+    ctx->notify_func2 = NULL; /* Easy out: avoid unneeded work */
+
+  SVN_ERR(svn_dirent_get_absolute(&local_abspath, "", pool));
+
+  SVN_ERR(get_next_argument(&name, os, pool, pool));
+
   /* Parse the remaining arguments as paths. */
   SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os,
                                                       opt_state->targets,
@@ -574,18 +633,6 @@ svn_cl__unshelve(apr_getopt_t *os,
 
   SVN_ERR(svn_dirent_get_absolute(&local_abspath, "", scratch_pool));
 
-  if (opt_state->list)
-    {
-      if (os->ind < os->argc)
-        return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, 0, NULL);
-
-      SVN_ERR(shelves_list(local_abspath,
-                           ! opt_state->quiet /*with_logmsg*/,
-                           ! opt_state->quiet /*with_diffstat*/,
-                           ctx, scratch_pool));
-      return SVN_NO_ERROR;
-    }
-
   if (os->ind < os->argc)
     {
       SVN_ERR(get_next_argument(&name, os, scratch_pool, scratch_pool));
@@ -609,9 +656,9 @@ svn_cl__unshelve(apr_getopt_t *os,
   if (opt_state->quiet)
     ctx->notify_func2 = NULL; /* Easy out: avoid unneeded work */
 
-  SVN_ERR(restore(name, NULL,
-                  opt_state->dry_run, opt_state->quiet,
-                  local_abspath, ctx, scratch_pool));
+  SVN_ERR(shelf_restore(name, NULL,
+                        opt_state->dry_run, opt_state->quiet,
+                        local_abspath, ctx, scratch_pool));
 
   return SVN_NO_ERROR;
 }
@@ -641,6 +688,84 @@ svn_cl__shelves(apr_getopt_t *os,
 
 /* This implements the `svn_opt_subcommand_t' interface. */
 svn_error_t *
+svn_cl__shelf_diff(apr_getopt_t *os,
+                   void *baton,
+                   apr_pool_t *pool)
+{
+  svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
+  const char *local_abspath;
+  const char *name;
+  const char *arg = NULL;
+
+  SVN_ERR(svn_dirent_get_absolute(&local_abspath, "", pool));
+
+  SVN_ERR(get_next_argument(&name, os, pool, pool));
+
+  /* Which checkpoint number? */
+  if (os->ind < os->argc)
+    SVN_ERR(get_next_argument(&arg, os, pool, pool));
+
+  if (os->ind < os->argc)
+    return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+                            _("Too many arguments"));
+
+  SVN_ERR(shelf_diff(name, arg, local_abspath, ctx, pool));
+
+  return SVN_NO_ERROR;
+}
+
+/* This implements the `svn_opt_subcommand_t' interface. */
+svn_error_t *
+svn_cl__shelf_drop(apr_getopt_t *os,
+                   void *baton,
+                   apr_pool_t *pool)
+{
+  svn_cl__opt_state_t *opt_state = ((svn_cl__cmd_baton_t *) baton)->opt_state;
+  svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
+  const char *name;
+  const char *local_abspath;
+
+  SVN_ERR(get_next_argument(&name, os, pool, pool));
+
+  /* There should be no remaining arguments. */
+  if (os->ind < os->argc)
+    return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, 0, NULL);
+
+  SVN_ERR(svn_dirent_get_absolute(&local_abspath, "", pool));
+  SVN_ERR(shelf_drop(name, local_abspath,
+                     opt_state->dry_run, opt_state->quiet,
+                     ctx, pool));
+
+  return SVN_NO_ERROR;
+}
+
+/* This implements the `svn_opt_subcommand_t' interface. */
+svn_error_t *
+svn_cl__shelf_log(apr_getopt_t *os,
+                  void *baton,
+                  apr_pool_t *pool)
+{
+  svn_cl__opt_state_t *opt_state = ((svn_cl__cmd_baton_t *) baton)->opt_state;
+  svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
+  const char *name;
+  const char *local_abspath;
+
+  SVN_ERR(get_next_argument(&name, os, pool, pool));
+
+  /* There should be no remaining arguments. */
+  if (os->ind < os->argc)
+    return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, 0, NULL);
+
+  SVN_ERR(svn_dirent_get_absolute(&local_abspath, "", pool));
+  SVN_ERR(shelf_log(name, local_abspath,
+                    !opt_state->quiet /*with_diffstat*/,
+                    ctx, pool));
+
+  return SVN_NO_ERROR;
+}
+
+/* This implements the `svn_opt_subcommand_t' interface. */
+svn_error_t *
 svn_cl__checkpoint(apr_getopt_t *os,
                    void *baton,
                    apr_pool_t *pool)
@@ -671,9 +796,9 @@ svn_cl__checkpoint(apr_getopt_t *os,
         return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
                                 _("Too many arguments"));
 
-      SVN_ERR(checkpoint_log(name, local_abspath,
-                             ! opt_state->quiet /*diffstat*/,
-                             ctx, pool));
+      SVN_ERR(shelf_log(name, local_abspath,
+                        !opt_state->quiet /*diffstat*/,
+                        ctx, pool));
     }
   else if (strcmp(subsubcommand, "save") == 0)
     {
@@ -712,7 +837,7 @@ svn_cl__checkpoint(apr_getopt_t *os,
     }
   else if (strcmp(subsubcommand, "restore") == 0)
     {
-      const char *arg;
+      const char *arg = NULL;
 
       if (targets->nelts > 1)
         return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
@@ -724,25 +849,25 @@ svn_cl__checkpoint(apr_getopt_t *os,
       else
         arg = APR_ARRAY_IDX(targets, 0, char *);
 
-      SVN_ERR(restore(name, arg,
-                      opt_state->dry_run, opt_state->quiet,
-                      local_abspath, ctx, pool));
+      SVN_ERR(shelf_restore(name, arg,
+                            opt_state->dry_run, opt_state->quiet,
+                            local_abspath, ctx, pool));
     }
-  else if (strcmp(subsubcommand, "export") == 0)
+  else if (strcmp(subsubcommand, "diff") == 0)
     {
       const char *arg;
 
-      if (targets->nelts > 1)
-        return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
-                                _("Too many arguments"));
-
       /* Which checkpoint number? */
-      if (targets->nelts != 1)
+      if (os->ind < os->argc)
         arg = NULL;
       else
         arg = APR_ARRAY_IDX(targets, 0, char *);
 
-      SVN_ERR(export_as_patch(name, arg, local_abspath, ctx, pool));
+      if (os->ind < os->argc)
+        return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+                                _("Too many arguments"));
+
+      SVN_ERR(shelf_diff(name, arg, local_abspath, ctx, pool));
     }
   else
     {

Modified: subversion/branches/shelve-checkpoint/subversion/svn/svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/svn/svn.c?rev=1820588&r1=1820587&r2=1820588&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/subversion/svn/svn.c (original)
+++ subversion/branches/shelve-checkpoint/subversion/svn/svn.c Mon Jan  8 17:49:28 2018
@@ -146,7 +146,8 @@ typedef enum svn_cl__longopt_t {
   opt_show_item,
   opt_adds_as_modification,
   opt_vacuum_pristines,
-  opt_delete,
+  opt_drop,
+  opt_log,
   opt_list
 } svn_cl__longopt_t;
 
@@ -474,7 +475,8 @@ const apr_getopt_option_t svn_cl__option
                        N_("remove unreferenced pristines from .svn directory")},
 
   {"list", opt_list, 0, N_("list shelves or checkpoints")},
-  {"delete", opt_delete, 0, N_("delete a shelf")},
+  {"drop", opt_drop, 0, N_("delete a shelf")},
+  {"log", opt_log, 0, N_("show versions of a shelf")},
 
   /* Long-opt Aliases
    *
@@ -1693,7 +1695,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "usage: 1. savepoint save NAME [PATH...]\n"
      "       2. savepoint restore NAME [VERSION]\n"
      "       3. savepoint log NAME\n"
-     "       4. savepoint export NAME [VERSION]\n"
+     "       4. savepoint diff NAME [VERSION]\n"
      "\n"
      "  1. Save local changes in the given PATHs as a new version of shelf NAME.\n"
      "     A new log message can be given with -m, -F, etc.\n"
@@ -1706,7 +1708,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "\n"
      "  3. List all versions of shelf NAME.\n"
      "\n"
-     "  4. Export the shelf NAME:VERSION (default: latest) as a patch.\n"
+     "  4. Show the changes in shelf NAME:VERSION (default: latest) as a diff.\n"
      "\n"
      "  The default PATH is the current working directory.\n"
      "\n"
@@ -1720,18 +1722,14 @@ const svn_opt_subcommand_desc2_t svn_cl_
     }
   },
 
-  { "shelve", svn_cl__shelve, {0}, N_
-    ("Put local changes aside, as if putting them on a shelf.\n"
-     "usage: 1. shelve [--keep-local] NAME [PATH...]\n"
-     "       2. shelve --delete NAME\n"
-     "       3. shelve --list\n"
-     "\n"
-     "  1. Save the local changes in the given PATHs to a shelf named NAME.\n"
-     "     Revert those changes from the WC unless '--keep-local' is given.\n"
-     "     If a log message is given with '-m' or '-F', replace the shelf's\n"
-     "     current log message (if any).\n"
+  { "shelf", svn_cl__shelf, {0}, N_
+    ("Examine or manage a shelf.\n"
+     "usage: 1. shelf --diff NAME [VERSION]\n"
+     "       2. shelf --drop [--dry-run] NAME\n"
+     "       3. shelf --list\n"
+     "       4. shelf --log NAME\n"
      "\n"
-     "     'svn shelve --keep-local' is like 'svn checkpoint save'.\n"
+     "  1. Show the changes in shelf NAME:VERSION (default: latest) as a diff.\n"
      "\n"
      "  2. Delete the shelf named NAME.\n"
      "\n"
@@ -1739,6 +1737,71 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "     and some details about the contents of the shelf, unless '-q' is\n"
      "     given.\n"
      "\n"
+     "  4. List all versions of shelf NAME.\n"
+     "\n"
+     "  The shelving feature is EXPERIMENTAL. This command is likely to change\n"
+     "  in the next release, and there is no promise of backward compatibility.\n"
+    ),
+    {opt_diff, opt_drop, opt_list, opt_log, opt_dry_run, 'q'}
+  },
+
+  { "shelf-diff", svn_cl__shelf_diff, {0}, N_
+    ("Show shelved changes as a diff.\n"
+     "usage: shelf-diff NAME [VERSION]\n"
+     "\n"
+     "  Export the shelf NAME:VERSION (default: latest) as a patch.\n"
+     "\n"
+     "  The shelving feature is EXPERIMENTAL. This command is likely to change\n"
+     "  in the next release, and there is no promise of backward compatibility.\n"
+    ),
+  },
+
+  { "shelf-drop", svn_cl__shelf_drop, {0}, N_
+    ("Delete a shelf.\n"
+     "usage: shelf-drop NAME\n"
+     "\n"
+     "  Delete the shelf named NAME.\n"
+     "\n"
+     "  The shelving feature is EXPERIMENTAL. This command is likely to change\n"
+     "  in the next release, and there is no promise of backward compatibility.\n"
+    ),
+  },
+
+  { "shelf-list", svn_cl__shelves, {"shelves"}, N_
+    ("List shelves.\n"
+     "usage: shelf-list\n"
+     "\n"
+     "  List shelves. Include the first line of any log message\n"
+     "  and some details about the contents of the shelf, unless '-q' is\n"
+     "  given.\n"
+     "\n"
+     "  The shelving feature is EXPERIMENTAL. This command is likely to change\n"
+     "  in the next release, and there is no promise of backward compatibility.\n"
+    ),
+    {'q'}
+  },
+
+  { "shelf-log", svn_cl__shelf_log, {0}, N_
+    ("Show the versions of a shelf.\n"
+     "usage: shelf-log NAME\n"
+     "\n"
+     "  The shelving feature is EXPERIMENTAL. This command is likely to change\n"
+     "  in the next release, and there is no promise of backward compatibility.\n"
+    ),
+    {'q'}
+  },
+
+  { "shelve", svn_cl__shelve, {0}, N_
+    ("Put local changes aside, as if putting them on a shelf.\n"
+     "usage: shelve [--keep-local] NAME [PATH...]\n"
+     "\n"
+     "  Save the local changes in the given PATHs to a shelf named NAME.\n"
+     "  Revert those changes from the WC unless '--keep-local' is given.\n"
+     "  If a log message is given with '-m' or '-F', replace the shelf's\n"
+     "  current log message (if any).\n"
+     "\n"
+     "  'svn shelve --keep-local' is like 'svn checkpoint save'.\n"
+     "\n"
      "  The kinds of change you can shelve are those supported by 'svn diff'\n"
      "  and 'svn patch'. The following are currently NOT supported:\n"
      "     mergeinfo changes, copies, moves, mkdir, rmdir,\n"
@@ -1751,7 +1814,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "  The shelving feature is EXPERIMENTAL. This command is likely to change\n"
      "  in the next release, and there is no promise of backward compatibility.\n"
     ),
-    {opt_delete, opt_list, 'q', opt_dry_run, opt_keep_local,
+    {'q', opt_dry_run, opt_keep_local,
      opt_depth, opt_targets, opt_changelist,
      /* almost SVN_CL__LOG_MSG_OPTIONS but not currently opt_with_revprop: */
      'm', 'F', opt_force_log, opt_editor_cmd, opt_encoding,
@@ -1759,17 +1822,12 @@ const svn_opt_subcommand_desc2_t svn_cl_
 
   { "unshelve", svn_cl__unshelve, {0}, N_
     ("Bring shelved changes back into the WC.\n"
-     "usage: 1. unshelve [NAME]\n"
-     "       2. unshelve --list\n"
+     "usage: unshelve [NAME]\n"
      "\n"
-     "  1. Apply the shelf named NAME to the working copy.\n"
-     "     NAME defaults to the most recent shelf.\n"
+     "  Apply the shelf named NAME to the working copy.\n"
+     "  NAME defaults to the most recent shelf.\n"
      "\n"
-     "     Like 'svn checkpoint restore'.\n"
-     "\n"
-     "  2. List shelves. Include the first line of any log message\n"
-     "     and some details about the contents of the shelf, unless '-q' is\n"
-     "     given.\n"
+     "  Like 'svn checkpoint restore'.\n"
      "\n"
      "  Any conflict between the change being unshelved and a change\n"
      "  already in the WC is handled the same way as by 'svn patch',\n"
@@ -1778,7 +1836,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "  The shelving feature is EXPERIMENTAL. This command is likely to change\n"
      "  in the next release, and there is no promise of backward compatibility.\n"
     ),
-    {opt_list, 'q', opt_dry_run} },
+    {'q', opt_dry_run} },
 
   { "shelves", svn_cl__shelves, {0}, N_
     ("List shelves.\n"
@@ -2342,6 +2400,9 @@ sub_main(int *exit_code, int argc, const
       case opt_list:
         opt_state.list = TRUE;
         break;
+      case opt_log:
+        opt_state.log = TRUE;
+        break;
       case opt_revprop:
         opt_state.revprop = TRUE;
         break;
@@ -2525,7 +2586,7 @@ sub_main(int *exit_code, int argc, const
         opt_state.diff.summarize = TRUE;
         break;
       case opt_remove:
-      case opt_delete:
+      case opt_drop:
         opt_state.remove = TRUE;
         break;
       case opt_changelist:

Modified: subversion/branches/shelve-checkpoint/tools/client-side/bash_completion
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/client-side/bash_completion?rev=1820588&r1=1820587&r2=1820588&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/tools/client-side/bash_completion (original)
+++ subversion/branches/shelve-checkpoint/tools/client-side/bash_completion Mon Jan  8 17:49:28 2018
@@ -1024,19 +1024,36 @@ _svn()
 		cmdOpts="$qOpts $pOpts"
 		;;
 	checkpoint|savepoint|sp)
-		cmdOpts="save restore log --dry-run \
+		cmdOpts="save restore log diff --dry-run \
                          --depth --targets $cOpts \
                          -m --message -F --file --encoding --force-log --editor-cmd \
                          $qOpts $pOpts"
 		;;
+	shelf)
+		cmdOpts="diff drop list log \
+                         --diff --drop --list --log --dry-run \
+                         $qOpts $pOpts"
+		;;
+	shelf-diff)
+		cmdOpts="$pOpts"
+		;;
+	shelf-drop)
+		cmdOpts="$pOpts"
+		;;
+	shelf-list)
+		cmdOpts="$qOpts $pOpts"
+		;;
+	shelf-log)
+		cmdOpts="$qOpts $pOpts"
+		;;
 	shelve)
-		cmdOpts="--keep-local --delete --list --dry-run \
+		cmdOpts="--keep-local --dry-run \
                          --depth --targets $cOpts \
                          -m --message -F --file --encoding --force-log --editor-cmd \
                          $qOpts $pOpts"
 		;;
 	unshelve)
-		cmdOpts="--list --dry-run \
+		cmdOpts="--dry-run \
                          $qOpts $pOpts"
 		;;
 	shelves)