aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2020-12-07 19:48:48 -0400
committerDavid Bremner <david@tethera.net>2021-02-06 19:30:20 -0400
commitc56dcea7e2da91ada6b6aa737ec115ef4bc91ba6 (patch)
treef741ef3afd7ac858e0dfd89a0fea43208eb76bc0
parent6c28039ebba0a363320e9b7d194b86b53703015f (diff)
cli/tag: convert to new config framework.
In addition to changing configuration access, change talloc context for allocation.
-rw-r--r--notmuch-tag.c25
-rw-r--r--notmuch.c2
-rwxr-xr-xtest/T035-read-config.sh48
3 files changed, 63 insertions, 12 deletions
diff --git a/notmuch-tag.c b/notmuch-tag.c
index 205f2733..464874b4 100644
--- a/notmuch-tag.c
+++ b/notmuch-tag.c
@@ -187,11 +187,10 @@ tag_file (void *ctx, notmuch_database_t *notmuch, tag_op_flag_t flags,
}
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;
char *query_string = NULL;
- notmuch_database_t *notmuch;
struct sigaction action;
tag_op_flag_t tag_flags = TAG_FLAG_NONE;
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;
int opt_index;
int ret;
+ notmuch_bool_t synchronize_flags;
/* Set up our handler for SIGINT */
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;
}
} else {
- tag_ops = tag_op_list_create (config);
+ tag_ops = tag_op_list_create (notmuch);
if (tag_ops == NULL) {
fprintf (stderr, "Out of memory.\n");
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))
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);
- 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;
if (remove_all)
tag_flags |= TAG_FLAG_REMOVE_ALL;
if (batch)
- ret = tag_file (config, notmuch, tag_flags, input);
+ ret = tag_file (notmuch, notmuch, tag_flags, input);
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);
diff --git a/notmuch.c b/notmuch.c
index 16504fc5..913fd312 100644
--- a/notmuch.c
+++ b/notmuch.c
@@ -157,7 +157,7 @@ static command_t commands[] = {
"Count messages matching the search terms." },
{ "reply", notmuch_reply_command, NOTMUCH_COMMAND_DATABASE_EARLY,
"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." },
{ "dump", notmuch_dump_command, NOTMUCH_COMMAND_DATABASE_EARLY | NOTMUCH_COMMAND_DATABASE_WRITE,
"Create a plain-text dump of the tags for each message." },
diff --git a/test/T035-read-config.sh b/test/T035-read-config.sh
index d015e073..6dc7ccbb 100755
--- a/test/T035-read-config.sh
+++ b/test/T035-read-config.sh
@@ -399,4 +399,52 @@ restore_database
restore_config
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