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)