mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 02:48:08 +01:00
cli: change argument parsing convention for subcommands
previously we deleted the subcommand name from argv before passing to the subcommand. In this version, the deletion is done in the actual subcommands. Although this causes some duplication of code, it allows us to be more flexible about how we parse command line arguments in the subcommand, including possibly using off-the-shelf routines like getopt_long that expect the name of the command in argv[0].
This commit is contained in:
parent
8bb5b6201e
commit
61f0a5b8ee
10 changed files with 21 additions and 1 deletions
|
@ -735,6 +735,8 @@ notmuch_config_command_set (void *ctx, char *item, int argc, char *argv[])
|
||||||
int
|
int
|
||||||
notmuch_config_command (void *ctx, int argc, char *argv[])
|
notmuch_config_command (void *ctx, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
argc--; argv++; /* skip subcommand argument */
|
||||||
|
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
fprintf (stderr, "Error: notmuch config requires at least two arguments.\n");
|
fprintf (stderr, "Error: notmuch config requires at least two arguments.\n");
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -35,6 +35,8 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
|
||||||
notmuch_sort_t sort = NOTMUCH_SORT_NEWEST_FIRST;
|
notmuch_sort_t sort = NOTMUCH_SORT_NEWEST_FIRST;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
argc--; argv++; /* skip subcommand argument */
|
||||||
|
|
||||||
for (i = 0; i < argc && argv[i][0] == '-'; i++) {
|
for (i = 0; i < argc && argv[i][0] == '-'; i++) {
|
||||||
if (strcmp (argv[i], "--") == 0) {
|
if (strcmp (argv[i], "--") == 0) {
|
||||||
i++;
|
i++;
|
||||||
|
|
|
@ -41,6 +41,8 @@ notmuch_dump_command (unused (void *ctx), int argc, char *argv[])
|
||||||
if (notmuch == NULL)
|
if (notmuch == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
argc--; argv++; /* skip subcommand argument */
|
||||||
|
|
||||||
if (argc && strcmp (argv[0], "--") != 0) {
|
if (argc && strcmp (argv[0], "--") != 0) {
|
||||||
fprintf (stderr, "Warning: the output file argument of dump is deprecated.\n");
|
fprintf (stderr, "Warning: the output file argument of dump is deprecated.\n");
|
||||||
output = fopen (argv[0], "w");
|
output = fopen (argv[0], "w");
|
||||||
|
|
|
@ -815,6 +815,8 @@ notmuch_new_command (void *ctx, int argc, char *argv[])
|
||||||
add_files_state.verbose = 0;
|
add_files_state.verbose = 0;
|
||||||
add_files_state.output_is_a_tty = isatty (fileno (stdout));
|
add_files_state.output_is_a_tty = isatty (fileno (stdout));
|
||||||
|
|
||||||
|
argc--; argv++; /* skip subcommand argument */
|
||||||
|
|
||||||
for (i = 0; i < argc && argv[i][0] == '-'; i++) {
|
for (i = 0; i < argc && argv[i][0] == '-'; i++) {
|
||||||
if (STRNCMP_LITERAL (argv[i], "--verbose") == 0) {
|
if (STRNCMP_LITERAL (argv[i], "--verbose") == 0) {
|
||||||
add_files_state.verbose = 1;
|
add_files_state.verbose = 1;
|
||||||
|
|
|
@ -628,6 +628,8 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
|
||||||
params.part = -1;
|
params.part = -1;
|
||||||
params.cryptoctx = NULL;
|
params.cryptoctx = NULL;
|
||||||
|
|
||||||
|
argc--; argv++; /* skip subcommand argument */
|
||||||
|
|
||||||
for (i = 0; i < argc && argv[i][0] == '-'; i++) {
|
for (i = 0; i < argc && argv[i][0] == '-'; i++) {
|
||||||
if (strcmp (argv[i], "--") == 0) {
|
if (strcmp (argv[i], "--") == 0) {
|
||||||
i++;
|
i++;
|
||||||
|
|
|
@ -44,6 +44,8 @@ notmuch_restore_command (unused (void *ctx), int argc, char *argv[])
|
||||||
|
|
||||||
synchronize_flags = notmuch_config_get_maildir_synchronize_flags (config);
|
synchronize_flags = notmuch_config_get_maildir_synchronize_flags (config);
|
||||||
|
|
||||||
|
argc--; argv++; /* skip subcommand argument */
|
||||||
|
|
||||||
if (argc) {
|
if (argc) {
|
||||||
input = fopen (argv[0], "r");
|
input = fopen (argv[0], "r");
|
||||||
if (input == NULL) {
|
if (input == NULL) {
|
||||||
|
|
|
@ -395,6 +395,8 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
|
||||||
int i, ret;
|
int i, ret;
|
||||||
output_t output = OUTPUT_SUMMARY;
|
output_t output = OUTPUT_SUMMARY;
|
||||||
|
|
||||||
|
argc--; argv++; /* skip subcommand argument */
|
||||||
|
|
||||||
for (i = 0; i < argc && argv[i][0] == '-'; i++) {
|
for (i = 0; i < argc && argv[i][0] == '-'; i++) {
|
||||||
if (strcmp (argv[i], "--") == 0) {
|
if (strcmp (argv[i], "--") == 0) {
|
||||||
i++;
|
i++;
|
||||||
|
|
|
@ -936,6 +936,8 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[]))
|
||||||
params.cryptoctx = NULL;
|
params.cryptoctx = NULL;
|
||||||
params.decrypt = 0;
|
params.decrypt = 0;
|
||||||
|
|
||||||
|
argc--; argv++; /* skip subcommand argument */
|
||||||
|
|
||||||
for (i = 0; i < argc && argv[i][0] == '-'; i++) {
|
for (i = 0; i < argc && argv[i][0] == '-'; i++) {
|
||||||
if (strcmp (argv[i], "--") == 0) {
|
if (strcmp (argv[i], "--") == 0) {
|
||||||
i++;
|
i++;
|
||||||
|
|
|
@ -65,6 +65,8 @@ notmuch_tag_command (void *ctx, unused (int argc), unused (char *argv[]))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
argc--; argv++; /* skip subcommand argument */
|
||||||
|
|
||||||
for (i = 0; i < argc; i++) {
|
for (i = 0; i < argc; i++) {
|
||||||
if (strcmp (argv[i], "--") == 0) {
|
if (strcmp (argv[i], "--") == 0) {
|
||||||
i++;
|
i++;
|
||||||
|
|
|
@ -465,6 +465,8 @@ notmuch_help_command (unused (void *ctx), int argc, char *argv[])
|
||||||
command_t *command;
|
command_t *command;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
argc--; argv++; /* Ignore "help" */
|
||||||
|
|
||||||
if (argc == 0) {
|
if (argc == 0) {
|
||||||
printf ("The notmuch mail system.\n\n");
|
printf ("The notmuch mail system.\n\n");
|
||||||
usage (stdout);
|
usage (stdout);
|
||||||
|
@ -639,7 +641,7 @@ main (int argc, char *argv[])
|
||||||
command = &commands[i];
|
command = &commands[i];
|
||||||
|
|
||||||
if (strcmp (argv[1], command->name) == 0)
|
if (strcmp (argv[1], command->name) == 0)
|
||||||
return (command->function) (local, argc - 2, &argv[2]);
|
return (command->function) (local, argc - 1, &argv[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf (stderr, "Error: Unknown command '%s' (see \"notmuch help\")\n",
|
fprintf (stderr, "Error: Unknown command '%s' (see \"notmuch help\")\n",
|
||||||
|
|
Loading…
Reference in a new issue