A few users have commented that they haven't been able to discover the
"--version" option. This patch lists it in the main "help" output, where it
should be.
I added a line under "usage" in each of five "svn*" programs. (The other two
already list all their option switches.) In four cases "--version" outputs a
list of FS or RA modules and I added another line mentioning that.
I considered using the option-description line generated from the option table,
but it doesn't fit well into the style of this help display. I also considered
other changes to the help, such as mentioning "--help" in a similar way to
"--version", but decided to keep to the one purpose.
Any comments on the patch before I commit it?
Basically the change looks something like this:
OLD:
> $ svn help help
> help (?, h): Describe the usage of this program or its subcommands.
> usage: help [SUBCOMMAND...]
>
> Valid options:
> --version : print client version info
> -q [--quiet] : print as little as possible
> --config-dir arg : read user configuration files from directory ARG
NEW:
> $ svn help
> usage: svn <subcommand> [options] [args]
> svn --version [--quiet]
> Subversion command-line client, version 1.5.0-dev.
> Type 'svn help <subcommand>' for help on a specific subcommand.
> Type 'svn --version' to see the program version and RA modules.
>
> Most subcommands take file and/or directory arguments, recursing
[...]
- Julian
Improve visibility of the "--version" option; fix quirks in parsing it.
Describe "--version" in the main help display rather than as an option to
the "help" subcommand, for logical correctness and so users can reasonably
find it. Remove "--version" and "--quiet" options from the "help" command.
Do not allow "--version" to be combined with "help" or any other arguments
or options.
* subversion/svn/help-cmd.c
(svn_cl__help): Mention "--version" in the main help.
* subversion/svn/main.c
(svn_cl__cmd_table): Remove "--version" and "--quiet" from "help" command.
(main): Allow "--version" to take "--quiet" and "--config-dir" options.
Suppress a misleading error message for "svn --version --OTHER-OPTION".
* subversion/svnadmin/main.c,
* subversion/svndumpfilter/main.c,
* subversion/svnlook/main.c
(cmd_table): Remove "--version" from "help" command.
(subcommand_help): Mention "--version" in the main help.
(main): Suppress a misleading error message for "--version --OTHER-OPTION".
* subversion/svnsync/main.c
(svnsync_cmd_table): Remove "--version" from "help" command.
(help_cmd): Mention "--version" in the main help.
(main): Suppress a misleading error message for "--version --OTHER-OPTION".
Index: subversion/svn/help-cmd.c
===================================================================
--- subversion/svn/help-cmd.c (revision 20223)
+++ subversion/svn/help-cmd.c (working copy)
@@ -43,8 +43,10 @@ svn_cl__help(apr_getopt_t *os,
/* xgettext: the %s is for SVN_VER_NUMBER. */
char help_header_template[] =
N_("usage: svn <subcommand> [options] [args]\n"
+ " svn --version [--quiet]\n"
"Subversion command-line client, version %s.\n"
"Type 'svn help <subcommand>' for help on a specific subcommand.\n"
+ "Type 'svn --version' to see the program version and RA modules.\n"
"\n"
"Most subcommands take file and/or directory arguments, recursing\n"
"on the directories. If no arguments are supplied to such a\n"
Index: subversion/svn/main.c
===================================================================
--- subversion/svn/main.c (revision 20223)
+++ subversion/svn/main.c (working copy)
@@ -346,11 +346,8 @@ const svn_opt_subcommand_desc2_t svn_cl_
{ "help", svn_cl__help, {"?", "h"}, N_
("Describe the usage of this program or its subcommands.\n"
"usage: help [SUBCOMMAND...]\n"),
- {svn_cl__version_opt, 'q', svn_cl__config_dir_opt} },
- /* We need to support "--help", "-?", and all that good stuff, of
- course. But those options, since unknown, will result in the
- help message being printed out anyway, so there's no need to
- support them explicitly. */
+ {svn_cl__config_dir_opt} },
+ /* This command is also invoked if we see option "--help", "-h" or "-?". */
{ "import", svn_cl__import, {0}, N_
("Commit an unversioned file or tree into the repository.\n"
@@ -1048,7 +1045,6 @@ main(int argc, const char *argv[])
break;
case svn_cl__version_opt:
opt_state.version = TRUE;
- opt_state.help = TRUE;
break;
case svn_cl__auth_username_opt:
err = svn_utf_cstring_to_utf8(&opt_state.auth_username,
@@ -1207,12 +1203,27 @@ main(int argc, const char *argv[])
{
if (os->ind >= os->argc)
{
- svn_error_clear
- (svn_cmdline_fprintf(stderr, pool,
- _("Subcommand argument required\n")));
- svn_cl__help(NULL, NULL, pool);
- svn_pool_destroy(pool);
- return EXIT_FAILURE;
+ if (opt_state.version)
+ {
+ /* Use the "help" subcommand to handle the "--version" option. */
+ static const svn_opt_subcommand_desc2_t pseudo_cmd =
+ { "--version", svn_cl__help, {0}, "",
+ {svn_cl__version_opt, /* must accept its own option */
+ 'q', /* brief output */
+ svn_cl__config_dir_opt /* all commands accept this */
+ } };
+
+ subcommand = &pseudo_cmd;
+ }
+ else
+ {
+ svn_error_clear
+ (svn_cmdline_fprintf(stderr, pool,
+ _("Subcommand argument required\n")));
+ svn_cl__help(NULL, NULL, pool);
+ svn_pool_destroy(pool);
+ return EXIT_FAILURE;
+ }
}
else
{
@@ -1259,11 +1270,14 @@ main(int argc, const char *argv[])
|| (err = svn_utf_cstring_to_utf8(&cmdname_utf8,
subcommand->name, pool)))
return svn_cmdline_handle_exit_error(err, pool, "svn: ");
- svn_error_clear
- (svn_cmdline_fprintf
- (stderr, pool, _("Subcommand '%s' doesn't accept option '%s'\n"
- "Type 'svn help %s' for usage.\n"),
- cmdname_utf8, optstr_utf8, cmdname_utf8));
+ if (subcommand->name[0] == '-')
+ svn_cl__help(NULL, NULL, pool);
+ else
+ svn_error_clear
+ (svn_cmdline_fprintf
+ (stderr, pool, _("Subcommand '%s' doesn't accept option '%s'\n"
+ "Type 'svn help %s' for usage.\n"),
+ cmdname_utf8, optstr_utf8, cmdname_utf8));
svn_pool_destroy(pool);
return EXIT_FAILURE;
}
Index: subversion/svnadmin/main.c
===================================================================
--- subversion/svnadmin/main.c (revision 20223)
+++ subversion/svnadmin/main.c (working copy)
@@ -329,7 +329,7 @@ static const svn_opt_subcommand_desc_t c
{"help", subcommand_help, {"?", "h"}, N_
("usage: svnadmin help [SUBCOMMAND...]\n\n"
"Describe the usage of this program or its subcommands.\n"),
- {svnadmin__version} },
+ {0} },
{"hotcopy", subcommand_hotcopy, {0}, N_
("usage: svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH\n\n"
@@ -652,7 +652,9 @@ subcommand_help(apr_getopt_t *os, void *
struct svnadmin_opt_state *opt_state = baton;
const char *header =
_("general usage: svnadmin SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]\n"
+ " svnadmin --version\n"
"Type 'svnadmin help <subcommand>' for help on a specific subcommand.\n"
+ "Type 'svnadmin --version' to see the program version and FS modules.\n"
"\n"
"Available subcommands:\n");
@@ -1255,7 +1257,6 @@ main(int argc, const char *argv[])
break;
case svnadmin__version:
opt_state.version = TRUE;
- opt_state.help = TRUE;
break;
case svnadmin__incremental:
opt_state.incremental = TRUE;
@@ -1332,12 +1333,25 @@ main(int argc, const char *argv[])
{
if (os->ind >= os->argc)
{
- svn_error_clear
- (svn_cmdline_fprintf(stderr, pool,
- _("subcommand argument required\n")));
- subcommand_help(NULL, NULL, pool);
- svn_pool_destroy(pool);
- return EXIT_FAILURE;
+ if (opt_state.version)
+ {
+ /* Use the "help" subcommand to handle the "--version" option. */
+ static const svn_opt_subcommand_desc_t pseudo_cmd =
+ { "--version", subcommand_help, {0}, "",
+ {svnadmin__version, /* must accept its own option */
+ } };
+
+ subcommand = &pseudo_cmd;
+ }
+ else
+ {
+ svn_error_clear
+ (svn_cmdline_fprintf(stderr, pool,
+ _("subcommand argument required\n")));
+ subcommand_help(NULL, NULL, pool);
+ svn_pool_destroy(pool);
+ return EXIT_FAILURE;
+ }
}
else
{
@@ -1413,11 +1427,14 @@ main(int argc, const char *argv[])
const apr_getopt_option_t *badopt =
svn_opt_get_option_from_code(opt_id, options_table);
svn_opt_format_option(&optstr, badopt, FALSE, pool);
- svn_error_clear
- (svn_cmdline_fprintf
- (stderr, pool, _("subcommand '%s' doesn't accept option '%s'\n"
- "Type 'svnadmin help %s' for usage.\n"),
- subcommand->name, optstr, subcommand->name));
+ if (subcommand->name[0] == '-')
+ subcommand_help(NULL, NULL, pool);
+ else
+ svn_error_clear
+ (svn_cmdline_fprintf
+ (stderr, pool, _("subcommand '%s' doesn't accept option '%s'\n"
+ "Type 'svnadmin help %s' for usage.\n"),
+ subcommand->name, optstr, subcommand->name));
svn_pool_destroy(pool);
return EXIT_FAILURE;
}
Index: subversion/svndumpfilter/main.c
===================================================================
--- subversion/svndumpfilter/main.c (revision 20223)
+++ subversion/svndumpfilter/main.c (working copy)
@@ -816,7 +816,7 @@ static const svn_opt_subcommand_desc_t c
{"help", subcommand_help, {"?", "h"},
N_("Describe the usage of this program or its subcommands.\n"
"usage: svndumpfilter help [SUBCOMMAND...]\n"),
- {svndumpfilter__version} },
+ {0} },
{ NULL, NULL, {0}, NULL, {0} }
};
@@ -886,6 +886,7 @@ subcommand_help(apr_getopt_t *os, void *
struct svndumpfilter_opt_state *opt_state = baton;
const char *header =
_("general usage: svndumpfilter SUBCOMMAND [ARGS & OPTIONS ...]\n"
+ " svndumpfilter --version\n"
"Type 'svndumpfilter help <subcommand>' for help on a "
"specific subcommand.\n"
"\n"
@@ -1155,7 +1156,6 @@ main(int argc, const char *argv[])
break;
case svndumpfilter__version:
opt_state.version = TRUE;
- opt_state.help = TRUE;
case svndumpfilter__quiet:
opt_state.quiet = TRUE;
break;
@@ -1190,11 +1190,25 @@ main(int argc, const char *argv[])
{
if (os->ind >= os->argc)
{
- svn_error_clear(svn_cmdline_fprintf
- (stderr, pool, _("Subcommand argument required\n")));
- subcommand_help(NULL, NULL, pool);
- svn_pool_destroy(pool);
- return EXIT_FAILURE;
+ if (opt_state.version)
+ {
+ /* Use the "help" subcommand to handle the "--version" option. */
+ static const svn_opt_subcommand_desc_t pseudo_cmd =
+ { "--version", subcommand_help, {0}, "",
+ {svndumpfilter__version, /* must accept its own option */
+ } };
+
+ subcommand = &pseudo_cmd;
+ }
+ else
+ {
+ svn_error_clear(svn_cmdline_fprintf
+ (stderr, pool,
+ _("Subcommand argument required\n")));
+ subcommand_help(NULL, NULL, pool);
+ svn_pool_destroy(pool);
+ return EXIT_FAILURE;
+ }
}
else
{
@@ -1267,11 +1281,14 @@ main(int argc, const char *argv[])
const apr_getopt_option_t *badopt =
svn_opt_get_option_from_code(opt_id, options_table);
svn_opt_format_option(&optstr, badopt, FALSE, pool);
- svn_error_clear(svn_cmdline_fprintf
- (stderr, pool,
- _("Subcommand '%s' doesn't accept option '%s'\n"
- "Type 'svndumpfilter help %s' for usage.\n"),
- subcommand->name, optstr, subcommand->name));
+ if (subcommand->name[0] == '-')
+ subcommand_help(NULL, NULL, pool);
+ else
+ svn_error_clear(svn_cmdline_fprintf
+ (stderr, pool,
+ _("Subcommand '%s' doesn't accept option '%s'\n"
+ "Type 'svndumpfilter help %s' for usage.\n"),
+ subcommand->name, optstr, subcommand->name));
svn_pool_destroy(pool);
return EXIT_FAILURE;
}
Index: subversion/svnlook/main.c
===================================================================
--- subversion/svnlook/main.c (revision 20223)
+++ subversion/svnlook/main.c (working copy)
@@ -169,7 +169,7 @@ static const svn_opt_subcommand_desc_t c
{"help", subcommand_help, {"?", "h"},
N_("usage: svnlook help [SUBCOMMAND...]\n\n"
"Describe the usage of this program or its subcommands.\n"),
- {svnlook__version} },
+ {0} },
{"history", subcommand_history, {0},
N_("usage: svnlook history REPOS_PATH [PATH_IN_REPOS]\n\n"
@@ -1651,10 +1651,12 @@ subcommand_help(apr_getopt_t *os, void *
struct svnlook_opt_state *opt_state = baton;
const char *header =
_("general usage: svnlook SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]\n"
+ " svnlook --version\n"
"Note: any subcommand which takes the '--revision' and '--transaction'\n"
" options will, if invoked without one of those options, act on\n"
" the repository's youngest revision.\n"
"Type 'svnlook help <subcommand>' for help on a specific subcommand.\n"
+ "Type 'svnlook --version' to see the program version and FS modules.\n"
"\n"
"Available subcommands:\n");
@@ -1965,7 +1967,6 @@ main(int argc, const char *argv[])
case svnlook__version:
opt_state.version = TRUE;
- opt_state.help = TRUE;
break;
case svnlook__show_ids:
@@ -2020,12 +2021,25 @@ main(int argc, const char *argv[])
{
if (os->ind >= os->argc)
{
- svn_error_clear
- (svn_cmdline_fprintf(stderr, pool,
- _("Subcommand argument required\n")));
- subcommand_help(NULL, NULL, pool);
- svn_pool_destroy(pool);
- return EXIT_FAILURE;
+ if (opt_state.version)
+ {
+ /* Use the "help" subcommand to handle the "--version" option. */
+ static const svn_opt_subcommand_desc_t pseudo_cmd =
+ { "--version", subcommand_help, {0}, "",
+ {svnlook__version, /* must accept its own option */
+ } };
+
+ subcommand = &pseudo_cmd;
+ }
+ else
+ {
+ svn_error_clear
+ (svn_cmdline_fprintf(stderr, pool,
+ _("Subcommand argument required\n")));
+ subcommand_help(NULL, NULL, pool);
+ svn_pool_destroy(pool);
+ return EXIT_FAILURE;
+ }
}
else
{
@@ -2127,12 +2141,15 @@ main(int argc, const char *argv[])
const apr_getopt_option_t *badopt =
svn_opt_get_option_from_code(opt_id, options_table);
svn_opt_format_option(&optstr, badopt, FALSE, pool);
- svn_error_clear
- (svn_cmdline_fprintf
- (stderr, pool,
- _("Subcommand '%s' doesn't accept option '%s'\n"
- "Type 'svnlook help %s' for usage.\n"),
- subcommand->name, optstr, subcommand->name));
+ if (subcommand->name[0] == '-')
+ subcommand_help(NULL, NULL, pool);
+ else
+ svn_error_clear
+ (svn_cmdline_fprintf
+ (stderr, pool,
+ _("Subcommand '%s' doesn't accept option '%s'\n"
+ "Type 'svnlook help %s' for usage.\n"),
+ subcommand->name, optstr, subcommand->name));
svn_pool_destroy(pool);
return EXIT_FAILURE;
}
Index: subversion/svnsync/main.c
===================================================================
--- subversion/svnsync/main.c (revision 20223)
+++ subversion/svnsync/main.c (working copy)
@@ -77,7 +77,7 @@ static const svn_opt_subcommand_desc_t s
{ "help", help_cmd, { "?", "h" },
N_("usage: svnsync help [SUBCOMMAND...]\n"
"Describe the usage of this program or its subcommands.\n"),
- { svnsync_opt_version } },
+ { 0 } },
{ NULL, NULL, { 0 }, NULL, { 0 } }
};
@@ -1132,7 +1132,9 @@ help_cmd(apr_getopt_t *os, void *baton,
const char *header =
_("general usage: svnsync SUBCOMMAND DEST_URL [ARGS & OPTIONS ...]\n"
+ " svnsync --version\n"
"Type 'svnsync help <subcommand>' for help on a specific subcommand.\n"
+ "Type 'svnsync --version' to see the program version and RA modules.\n"
"\n"
"Available subcommands:\n");
@@ -1250,7 +1252,6 @@ main(int argc, const char *argv[])
case svnsync_opt_version:
opt_baton.version = TRUE;
- opt_baton.help = TRUE;
break;
case 'r':
@@ -1287,9 +1288,22 @@ main(int argc, const char *argv[])
{
if (os->ind >= os->argc)
{
- help_cmd(NULL, NULL, pool);
- svn_pool_destroy(pool);
- return EXIT_FAILURE;
+ if (opt_baton.version)
+ {
+ /* Use the "help" subcommand to handle the "--version" option. */
+ static const svn_opt_subcommand_desc_t pseudo_cmd =
+ { "--version", help_cmd, {0}, "",
+ {svnsync_opt_version, /* must accept its own option */
+ } };
+
+ subcommand = &pseudo_cmd;
+ }
+ else
+ {
+ help_cmd(NULL, NULL, pool);
+ svn_pool_destroy(pool);
+ return EXIT_FAILURE;
+ }
}
else
{
@@ -1318,11 +1332,14 @@ main(int argc, const char *argv[])
const apr_getopt_option_t *badopt =
svn_opt_get_option_from_code(opt_id, svnsync_options);
svn_opt_format_option(&optstr, badopt, FALSE, pool);
- svn_error_clear
- (svn_cmdline_fprintf
- (stderr, pool, _("subcommand '%s' doesn't accept option '%s'\n"
- "Type 'svnsync help %s' for usage.\n"),
- subcommand->name, optstr, subcommand->name));
+ if (subcommand->name[0] == '-')
+ help_cmd(NULL, NULL, pool);
+ else
+ svn_error_clear
+ (svn_cmdline_fprintf
+ (stderr, pool, _("subcommand '%s' doesn't accept option '%s'\n"
+ "Type 'svnsync help %s' for usage.\n"),
+ subcommand->name, optstr, subcommand->name));
svn_pool_destroy(pool);
return EXIT_FAILURE;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Tue Jun 27 01:44:00 2006