changeset 22452:566bd6b3b348

pop3-migration: Add pop3_migration_ignore_extra_uidls=yes setting
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 04 Sep 2017 18:32:15 +0300
parents e2b9cadf91e4
children 6eb5a6930614
files src/plugins/pop3-migration/pop3-migration-plugin.c
diffstat 1 files changed, 14 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/pop3-migration/pop3-migration-plugin.c	Mon Sep 04 12:40:49 2017 +0300
+++ b/src/plugins/pop3-migration/pop3-migration-plugin.c	Mon Sep 04 18:32:15 2017 +0300
@@ -56,6 +56,7 @@
 	unsigned int all_mailboxes:1;
 	unsigned int pop3_all_hdr_sha1_set:1;
 	unsigned int ignore_missing_uidls:1;
+	unsigned int ignore_extra_uidls:1;
 	unsigned int skip_size_check:1;
 	unsigned int skip_uidl_cache:1;
 };
@@ -765,6 +766,7 @@
 	}
 	if (missing_uids_count > 0 && !mstorage->all_mailboxes) {
 		string_t *str = t_str_new(128);
+		bool all_imap_mails_found = FALSE;
 
 		str_printfa(str, "pop3_migration: %u POP3 messages have no "
 			    "matching IMAP messages (first POP3 msg %u UIDL %s)",
@@ -773,10 +775,16 @@
 		if (imap_count + missing_uids_count == pop3_count) {
 			str_append(str, " - all IMAP messages were found "
 				"(POP3 contains more than IMAP INBOX - you may want to set pop3_migration_all_mailboxes=yes)");
+			all_imap_mails_found = TRUE;
 		}
-		if (!mstorage->ignore_missing_uidls) {
-			i_error("%s - set pop3_migration_ignore_missing_uidls=yes to continue anyway",
-				str_c(str));
+		if (all_imap_mails_found && mstorage->ignore_extra_uidls) {
+			/* pop3 had more mails than imap. maybe it was just
+			   that a new mail was just delivered. */
+		} else if (!mstorage->ignore_missing_uidls) {
+			str_append(str, " - set pop3_migration_ignore_missing_uidls=yes");
+			if (all_imap_mails_found)
+				str_append(str, " or pop3_migration_ignore_extra_uidls=yes");
+			i_error("%s to continue anyway", str_c(str));
 			return -1;
 		}
 		i_warning("%s", str_c(str));
@@ -1017,6 +1025,9 @@
 	mstorage->ignore_missing_uidls =
 		mail_user_plugin_getenv(storage->user,
 			"pop3_migration_ignore_missing_uidls") != NULL;
+	mstorage->ignore_extra_uidls =
+		mail_user_plugin_getenv(storage->user,
+			"pop3_migration_ignore_extra_uidls") != NULL;
 	mstorage->skip_size_check =
 		mail_user_plugin_getenv(storage->user,
 			"pop3_migration_skip_size_check") != NULL;