cli/tag: convert to new config framework.

In addition to changing configuration access, change talloc context
for allocation.
This commit is contained in:
David Bremner 2020-12-07 19:48:48 -04:00
parent 6c28039ebb
commit c56dcea7e2
3 changed files with 63 additions and 12 deletions

View file

@ -187,11 +187,10 @@ tag_file (void *ctx, notmuch_database_t *notmuch, tag_op_flag_t flags,
} }
int int
notmuch_tag_command (notmuch_config_t *config, unused(notmuch_database_t *notmuch), int argc, char *argv[]) notmuch_tag_command (unused(notmuch_config_t *config), notmuch_database_t *notmuch, int argc, char *argv[])
{ {
tag_op_list_t *tag_ops = NULL; tag_op_list_t *tag_ops = NULL;
char *query_string = NULL; char *query_string = NULL;
notmuch_database_t *notmuch;
struct sigaction action; struct sigaction action;
tag_op_flag_t tag_flags = TAG_FLAG_NONE; tag_op_flag_t tag_flags = TAG_FLAG_NONE;
bool batch = false; bool batch = false;
@ -200,6 +199,7 @@ notmuch_tag_command (notmuch_config_t *config, unused(notmuch_database_t *notmuc
const char *input_file_name = NULL; const char *input_file_name = NULL;
int opt_index; int opt_index;
int ret; int ret;
notmuch_bool_t synchronize_flags;
/* Set up our handler for SIGINT */ /* Set up our handler for SIGINT */
memset (&action, 0, sizeof (struct sigaction)); memset (&action, 0, sizeof (struct sigaction));
@ -240,13 +240,13 @@ notmuch_tag_command (notmuch_config_t *config, unused(notmuch_database_t *notmuc
return EXIT_FAILURE; return EXIT_FAILURE;
} }
} else { } else {
tag_ops = tag_op_list_create (config); tag_ops = tag_op_list_create (notmuch);
if (tag_ops == NULL) { if (tag_ops == NULL) {
fprintf (stderr, "Out of memory.\n"); fprintf (stderr, "Out of memory.\n");
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if (parse_tag_command_line (config, argc - opt_index, argv + opt_index, if (parse_tag_command_line (notmuch, argc - opt_index, argv + opt_index,
&query_string, tag_ops)) &query_string, tag_ops))
return EXIT_FAILURE; return EXIT_FAILURE;
@ -261,22 +261,25 @@ notmuch_tag_command (notmuch_config_t *config, unused(notmuch_database_t *notmuc
} }
} }
if (notmuch_database_open (notmuch_config_get_database_path (config),
NOTMUCH_DATABASE_MODE_READ_WRITE, &notmuch))
return EXIT_FAILURE;
notmuch_exit_if_unmatched_db_uuid (notmuch); notmuch_exit_if_unmatched_db_uuid (notmuch);
if (notmuch_config_get_maildir_synchronize_flags (config)) if (print_status_database (
"notmuch restore",
notmuch,
notmuch_config_get_bool (notmuch, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS,
&synchronize_flags)))
return EXIT_FAILURE;
if (synchronize_flags)
tag_flags |= TAG_FLAG_MAILDIR_SYNC; tag_flags |= TAG_FLAG_MAILDIR_SYNC;
if (remove_all) if (remove_all)
tag_flags |= TAG_FLAG_REMOVE_ALL; tag_flags |= TAG_FLAG_REMOVE_ALL;
if (batch) if (batch)
ret = tag_file (config, notmuch, tag_flags, input); ret = tag_file (notmuch, notmuch, tag_flags, input);
else else
ret = tag_query (config, notmuch, query_string, tag_ops, tag_flags); ret = tag_query (notmuch, notmuch, query_string, tag_ops, tag_flags);
notmuch_database_destroy (notmuch); notmuch_database_destroy (notmuch);

View file

@ -157,7 +157,7 @@ static command_t commands[] = {
"Count messages matching the search terms." }, "Count messages matching the search terms." },
{ "reply", notmuch_reply_command, NOTMUCH_COMMAND_DATABASE_EARLY, { "reply", notmuch_reply_command, NOTMUCH_COMMAND_DATABASE_EARLY,
"Construct a reply template for a set of messages." }, "Construct a reply template for a set of messages." },
{ "tag", notmuch_tag_command, NOTMUCH_COMMAND_CONFIG_OPEN, { "tag", notmuch_tag_command, NOTMUCH_COMMAND_DATABASE_EARLY | NOTMUCH_COMMAND_DATABASE_WRITE,
"Add/remove tags for all messages matching the search terms." }, "Add/remove tags for all messages matching the search terms." },
{ "dump", notmuch_dump_command, NOTMUCH_COMMAND_DATABASE_EARLY | NOTMUCH_COMMAND_DATABASE_WRITE, { "dump", notmuch_dump_command, NOTMUCH_COMMAND_DATABASE_EARLY | NOTMUCH_COMMAND_DATABASE_WRITE,
"Create a plain-text dump of the tags for each message." }, "Create a plain-text dump of the tags for each message." },

View file

@ -399,4 +399,52 @@ restore_database
restore_config restore_config
test_expect_equal "$output" "OK" test_expect_equal "$output" "OK"
# reset to known state
add_email_corpus
test_begin_subtest "tag with saved query from config file"
backup_config
query_name="test${RANDOM}"
tag_name="tag${RANDOM}"
notmuch count query:$query_name > OUTPUT
printf "\n[query]\n${query_name} = tag:inbox\n" >> notmuch-config
notmuch tag +$tag_name -- query:${query_name}
notmuch count tag:$tag_name >> OUTPUT
cat <<EOF > EXPECTED
0
52
EOF
restore_config
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "tag with saved query from config file (xdg)"
xdg_config
query_name="test${RANDOM}"
tag_name="tag${RANDOM}"
notmuch count query:$query_name > OUTPUT
printf "\n[query]\n${query_name} = tag:inbox\n" >> ${CONFIG_PATH}
notmuch tag +$tag_name -- query:${query_name}
notmuch count tag:$tag_name >> OUTPUT
cat <<EOF > EXPECTED
0
52
EOF
restore_config
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "tag with saved query from config file (xdg+profile)"
query_name="test${RANDOM}"
xdg_config ${query_name}
tag_name="tag${RANDOM}"
notmuch count query:$query_name > OUTPUT
printf "\n[query]\n${query_name} = tag:inbox\n" >> ${CONFIG_PATH}
notmuch tag +$tag_name -- query:${query_name}
notmuch count tag:$tag_name >> OUTPUT
cat <<EOF > EXPECTED
0
52
EOF
restore_config
test_expect_equal_file EXPECTED OUTPUT
test_done test_done