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, &copy_count);
+	ret = fetch_and_copy(client, destbox, t, search_arg,
+			     &src_uidset, &copy_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