dovecot: Changed mail_keywords creation APIs to take mailbox/ind...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Sep 8 03:29:17 EEST 2007
details: http://hg.dovecot.org/dovecot/rev/8476d665530f
changeset: 6354:8476d665530f
user: Timo Sirainen <tss at iki.fi>
date: Sun Sep 02 07:44:50 2007 +0300
description:
Changed mail_keywords creation APIs to take mailbox/index instead of
transaction.
diffstat:
17 files changed, 65 insertions(+), 75 deletions(-)
src/deliver/deliver.c | 4 -
src/imap/cmd-append.c | 4 -
src/imap/cmd-copy.c | 9 ++-
src/imap/cmd-store.c | 4 -
src/lib-index/mail-index-sync.c | 4 -
src/lib-index/mail-index-transaction.c | 9 +--
src/lib-index/mail-index.h | 8 +--
src/lib-storage/index/dbox/dbox-sync-file.c | 4 -
src/lib-storage/index/dbox/dbox-sync-rebuild.c | 2
src/lib-storage/index/index-storage.c | 46 +++++++++-----------
src/lib-storage/index/index-storage.h | 6 --
src/lib-storage/index/maildir/maildir-sync-index.c | 4 -
src/lib-storage/index/mbox/mbox-sync.c | 6 +-
src/lib-storage/mail-storage-private.h | 5 --
src/lib-storage/mail-storage.c | 13 ++---
src/lib-storage/mail-storage.h | 7 +--
src/plugins/convert/convert-storage.c | 5 --
diffs (truncated from 445 to 300 lines):
diff -r 23c9ac999578 -r 8476d665530f src/deliver/deliver.c
--- a/src/deliver/deliver.c Sun Sep 02 06:10:54 2007 +0300
+++ b/src/deliver/deliver.c Sun Sep 02 07:44:50 2007 +0300
@@ -142,10 +142,10 @@ int deliver_save(struct mail_namespace *
t = mailbox_transaction_begin(box, MAILBOX_TRANSACTION_FLAG_EXTERNAL);
kw = strarray_length(keywords) == 0 ? NULL :
- mailbox_keywords_create_valid(t, keywords);
+ mailbox_keywords_create_valid(box, keywords);
if (mailbox_copy(t, mail, flags, kw, NULL) < 0)
ret = -1;
- mailbox_keywords_free(t, &kw);
+ mailbox_keywords_free(box, &kw);
if (ret < 0)
mailbox_transaction_rollback(&t);
diff -r 23c9ac999578 -r 8476d665530f src/imap/cmd-append.c
--- a/src/imap/cmd-append.c Sun Sep 02 06:10:54 2007 +0300
+++ b/src/imap/cmd-append.c Sun Sep 02 07:44:50 2007 +0300
@@ -292,7 +292,7 @@ static bool cmd_append_continue_parsing(
return cmd_append_cancel(ctx, nonsync);
if (keywords_list == NULL)
keywords = NULL;
- else if (mailbox_keywords_create(ctx->t, keywords_list,
+ else if (mailbox_keywords_create(ctx->box, keywords_list,
&keywords) < 0) {
client_send_storage_error(cmd, ctx->storage);
return cmd_append_cancel(ctx, nonsync);
@@ -327,7 +327,7 @@ static bool cmd_append_continue_parsing(
ctx->input, FALSE, &ctx->save_ctx);
if (keywords != NULL)
- mailbox_keywords_free(ctx->t, &keywords);
+ mailbox_keywords_free(ctx->box, &keywords);
if (ret < 0) {
/* save initialization failed */
diff -r 23c9ac999578 -r 8476d665530f src/imap/cmd-copy.c
--- a/src/imap/cmd-copy.c Sun Sep 02 06:10:54 2007 +0300
+++ b/src/imap/cmd-copy.c Sun Sep 02 07:44:50 2007 +0300
@@ -26,7 +26,7 @@ static void client_send_sendalive_if_nee
}
}
-static int fetch_and_copy(struct client *client,
+static int fetch_and_copy(struct client *client, struct mailbox *destbox,
struct mailbox_transaction_context *t,
struct mail_search_arg *search_args,
const char **src_uidset_r,
@@ -62,11 +62,11 @@ static int fetch_and_copy(struct client
keywords_list = mail_get_keywords(mail);
keywords = strarray_length(keywords_list) == 0 ? NULL :
- mailbox_keywords_create_valid(t, keywords_list);
+ mailbox_keywords_create_valid(destbox, keywords_list);
if (mailbox_copy(t, mail, mail_get_flags(mail),
keywords, NULL) < 0)
ret = mail->expunged ? 0 : -1;
- mailbox_keywords_free(t, &keywords);
+ mailbox_keywords_free(destbox, &keywords);
msgset_generator_next(&srcset_ctx, mail->uid);
}
@@ -132,7 +132,8 @@ bool cmd_copy(struct client_command_cont
t = mailbox_transaction_begin(destbox,
MAILBOX_TRANSACTION_FLAG_EXTERNAL |
MAILBOX_TRANSACTION_FLAG_ASSIGN_UIDS);
- ret = fetch_and_copy(client, t, search_arg, &src_uidset, ©_count);
+ ret = fetch_and_copy(client, destbox, t, search_arg,
+ &src_uidset, ©_count);
if (ret <= 0)
mailbox_transaction_rollback(&t);
diff -r 23c9ac999578 -r 8476d665530f src/imap/cmd-store.c
--- a/src/imap/cmd-store.c Sun Sep 02 06:10:54 2007 +0300
+++ b/src/imap/cmd-store.c Sun Sep 02 07:44:50 2007 +0300
@@ -90,7 +90,7 @@ bool cmd_store(struct client_command_con
MAILBOX_TRANSACTION_FLAG_HIDE);
if (keywords_list == NULL && modify_type != MODIFY_REPLACE)
keywords = NULL;
- else if (mailbox_keywords_create(t, keywords_list, &keywords) < 0) {
+ else if (mailbox_keywords_create(box, keywords_list, &keywords) < 0) {
/* invalid keywords */
mailbox_transaction_rollback(&t);
client_send_storage_error(cmd, mailbox_get_storage(box));
@@ -108,7 +108,7 @@ bool cmd_store(struct client_command_con
mail_free(&mail);
if (keywords != NULL)
- mailbox_keywords_free(t, &keywords);
+ mailbox_keywords_free(box, &keywords);
if (mailbox_search_deinit(&search_ctx) < 0) {
failed = TRUE;
diff -r 23c9ac999578 -r 8476d665530f src/lib-index/mail-index-sync.c
--- a/src/lib-index/mail-index-sync.c Sun Sep 02 06:10:54 2007 +0300
+++ b/src/lib-index/mail-index-sync.c Sun Sep 02 07:44:50 2007 +0300
@@ -79,7 +79,7 @@ static void mail_index_sync_add_keyword_
t_push();
keyword_names[0] = t_strndup(u + 1, u->name_size);
keyword_names[1] = NULL;
- keywords = mail_index_keywords_create(ctx->sync_trans, keyword_names);
+ keywords = mail_index_keywords_create(ctx->index, keyword_names);
size = (ctx->hdr->size - uidset_offset) / sizeof(uint32_t);
for (i = 0; i < size; i += 2) {
@@ -101,7 +101,7 @@ static void mail_index_sync_add_keyword_
struct mail_keywords *keywords;
uint32_t uid;
- keywords = mail_index_keywords_create(ctx->sync_trans, NULL);
+ keywords = mail_index_keywords_create(ctx->index, NULL);
for (i = 0; i < size; i++) {
for (uid = u[i].uid1; uid <= u[i].uid2; uid++) {
mail_index_update_keywords(ctx->sync_trans, uid,
diff -r 23c9ac999578 -r 8476d665530f src/lib-index/mail-index-transaction.c
--- a/src/lib-index/mail-index-transaction.c Sun Sep 02 06:10:54 2007 +0300
+++ b/src/lib-index/mail-index-transaction.c Sun Sep 02 07:44:50 2007 +0300
@@ -1131,10 +1131,9 @@ void mail_index_update_ext(struct mail_i
}
struct mail_keywords *
-mail_index_keywords_create(struct mail_index_transaction *t,
+mail_index_keywords_create(struct mail_index *index,
const char *const keywords[])
{
- struct mail_index *index = t->view->index;
struct mail_keywords *k;
unsigned int src, dest, i, count;
@@ -1168,7 +1167,7 @@ mail_index_keywords_create(struct mail_i
}
struct mail_keywords *
-mail_index_keywords_create_from_indexes(struct mail_index_transaction *t,
+mail_index_keywords_create_from_indexes(struct mail_index *index,
const ARRAY_TYPE(keyword_indexes)
*keyword_indexes)
{
@@ -1179,14 +1178,14 @@ mail_index_keywords_create_from_indexes(
indexes = array_get(keyword_indexes, &count);
if (count == 0) {
k = i_new(struct mail_keywords, 1);
- k->index = t->view->index;
+ k->index = index;
return k;
}
/* @UNSAFE */
k = i_malloc(sizeof(struct mail_keywords) +
(sizeof(k->idx) * (count-1)));
- k->index = t->view->index;
+ k->index = index;
/* copy but skip duplicates */
for (src = dest = 0; src < count; src++) {
diff -r 23c9ac999578 -r 8476d665530f src/lib-index/mail-index.h
--- a/src/lib-index/mail-index.h Sun Sep 02 06:10:54 2007 +0300
+++ b/src/lib-index/mail-index.h Sun Sep 02 07:44:50 2007 +0300
@@ -359,17 +359,17 @@ void mail_index_keyword_lookup_or_create
mail_index_keywords_create() or mail_index_sync_begin(). */
const ARRAY_TYPE(keywords) *mail_index_get_keywords(struct mail_index *index);
-/* Create a keyword list structure. It's freed automatically at the end of
- the transaction. */
+/* Create a keyword list structure. */
struct mail_keywords *
-mail_index_keywords_create(struct mail_index_transaction *t,
+mail_index_keywords_create(struct mail_index *index,
const char *const keywords[]);
struct mail_keywords *
-mail_index_keywords_create_from_indexes(struct mail_index_transaction *t,
+mail_index_keywords_create_from_indexes(struct mail_index *index,
const ARRAY_TYPE(keyword_indexes)
*keyword_indexes);
/* Free the keywords. */
void mail_index_keywords_free(struct mail_keywords **keywords);
+
/* Update keywords for given message. */
void mail_index_update_keywords(struct mail_index_transaction *t, uint32_t seq,
enum modify_type modify_type,
diff -r 23c9ac999578 -r 8476d665530f src/lib-storage/index/dbox/dbox-sync-file.c
--- a/src/lib-storage/index/dbox/dbox-sync-file.c Sun Sep 02 06:10:54 2007 +0300
+++ b/src/lib-storage/index/dbox/dbox-sync-file.c Sun Sep 02 07:44:50 2007 +0300
@@ -47,8 +47,8 @@ dbox_sync_update_metadata(struct dbox_sy
(old_value != NULL && *old_value != '\0' &&
array_count(&keyword_indexes) == 0)) {
str_truncate(value, 0);
- keywords = mail_index_keywords_create_from_indexes(ctx->trans,
- &keyword_indexes);
+ keywords = mail_index_keywords_create_from_indexes(
+ ctx->mbox->ibox.index, &keyword_indexes);
dbox_mail_metadata_keywords_append(ctx->mbox, value, keywords);
mail_index_keywords_free(&keywords);
diff -r 23c9ac999578 -r 8476d665530f src/lib-storage/index/dbox/dbox-sync-rebuild.c
--- a/src/lib-storage/index/dbox/dbox-sync-rebuild.c Sun Sep 02 06:10:54 2007 +0300
+++ b/src/lib-storage/index/dbox/dbox-sync-rebuild.c Sun Sep 02 07:44:50 2007 +0300
@@ -48,7 +48,7 @@ static void dbox_sync_index_metadata(str
value = dbox_file_metadata_get(file, DBOX_METADATA_KEYWORDS);
if (value != NULL) {
t_push();
- keywords = mail_index_keywords_create(ctx->trans,
+ keywords = mail_index_keywords_create(ctx->mbox->ibox.index,
t_strsplit_spaces(value, " "));
mail_index_update_keywords(ctx->trans, seq, MODIFY_REPLACE,
keywords);
diff -r 23c9ac999578 -r 8476d665530f src/lib-storage/index/index-storage.c
--- a/src/lib-storage/index/index-storage.c Sun Sep 02 06:10:54 2007 +0300
+++ b/src/lib-storage/index/index-storage.c Sun Sep 02 07:44:50 2007 +0300
@@ -504,7 +504,7 @@ int index_mailbox_keyword_is_valid(struc
}
static struct mail_keywords *
-index_keywords_create_skip(struct index_transaction_context *t,
+index_keywords_create_skip(struct index_mailbox *ibox,
const char *const keywords[])
{
ARRAY_DEFINE(valid_keywords, const char *);
@@ -514,46 +514,42 @@ index_keywords_create_skip(struct index_
t_push();
t_array_init(&valid_keywords, 32);
for (; *keywords != NULL; keywords++) {
- if (index_mailbox_keyword_is_valid(t->ibox, *keywords, &error))
+ if (index_mailbox_keyword_is_valid(ibox, *keywords, &error))
array_append(&valid_keywords, keywords, 1);
}
(void)array_append_space(&valid_keywords); /* NULL-terminate */
- kw = mail_index_keywords_create(t->trans, keywords);
+ kw = mail_index_keywords_create(ibox->index, keywords);
t_pop();
return kw;
}
-int index_keywords_create(struct mailbox_transaction_context *_t,
- const char *const keywords[],
+int index_keywords_create(struct mailbox *_box, const char *const keywords[],
struct mail_keywords **keywords_r, bool skip_invalid)
{
- struct index_transaction_context *t =
- (struct index_transaction_context *)_t;
+ struct index_mailbox *ibox = (struct index_mailbox *)_box;
const char *error;
unsigned int i;
for (i = 0; keywords[i] != NULL; i++) {
- if (!index_mailbox_keyword_is_valid(t->ibox, keywords[i],
- &error)) {
- if (skip_invalid) {
- /* found invalid keywords, do this the slow
- way */
- *keywords_r =
- index_keywords_create_skip(t, keywords);
- return 0;
- }
- mail_storage_set_error(t->ibox->box.storage,
- MAIL_ERROR_PARAMS, error);
- return -1;
- }
- }
-
- *keywords_r = mail_index_keywords_create(t->trans, keywords);
+ if (index_mailbox_keyword_is_valid(ibox, keywords[i], &error))
+ continue;
+
+ if (skip_invalid) {
+ /* found invalid keywords, do this the slow
+ way */
+ *keywords_r =
+ index_keywords_create_skip(ibox, keywords);
+ return 0;
+ }
+ mail_storage_set_error(_box->storage, MAIL_ERROR_PARAMS, error);
+ return -1;
+ }
+
+ *keywords_r = mail_index_keywords_create(ibox->index, keywords);
return 0;
}
-void index_keywords_free(struct mailbox_transaction_context *t __attr_unused__,
- struct mail_keywords *keywords)
+void index_keywords_free(struct mail_keywords *keywords)
{
mail_index_keywords_free(&keywords);
}
diff -r 23c9ac999578 -r 8476d665530f src/lib-storage/index/index-storage.h
--- a/src/lib-storage/index/index-storage.h Sun Sep 02 06:10:54 2007 +0300
+++ b/src/lib-storage/index/index-storage.h Sun Sep 02 07:44:50 2007 +0300
@@ -111,11 +111,9 @@ bool index_storage_is_inconsistent(struc
int index_mailbox_keyword_is_valid(struct index_mailbox *ibox,
const char *keyword, const char **error_r);
-int index_keywords_create(struct mailbox_transaction_context *t,
- const char *const keywords[],
+int index_keywords_create(struct mailbox *box, const char *const keywords[],
struct mail_keywords **keywords_r, bool skip_invalid);
-void index_keywords_free(struct mailbox_transaction_context *t,
- struct mail_keywords *keywords);
+void index_keywords_free(struct mail_keywords *keywords);
More information about the dovecot-cvs
mailing list