Identify and fix messages with FMD5 inconsistencies
Introduce the '--migrate-fmd5-using-nametrans' option which migrates the
FMD5 hashes from versions prior to 6.3.5.
It seems that commit 'Apply nametrans to all Foldertypes' (6b2ec956cf
)
introduced a regression because it changed the FMD5 part of the filename
calculated by OfflineIMAP. Thus, OfflineIMAP believes that the messages
has been removed and adds them back.
For more information, see:
http://www.offlineimap.org/configuration/2016/02/12/debian-upgrade-from-jessie-to-stretch.html
Bug-Debian: https://bugs.debian.org/812108
Reported-by: François <francois@avalenn.eu>
Signed-off-by: Ilias Tsitsimpis <i.tsitsimpis@gmail.com>
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
This commit is contained in:

committed by
Nicolas Sebrecht

parent
334571038e
commit
c84d23b656
@ -25,11 +25,12 @@ import logging
|
||||
from optparse import OptionParser
|
||||
|
||||
import offlineimap
|
||||
from offlineimap import accounts, threadutil, syncmaster
|
||||
from offlineimap import accounts, threadutil, syncmaster, folder
|
||||
from offlineimap import globals
|
||||
from offlineimap.ui import UI_LIST, setglobalui, getglobalui
|
||||
from offlineimap.CustomConfig import CustomConfigParser
|
||||
from offlineimap.utils import stacktrace
|
||||
from offlineimap.repository import Repository
|
||||
|
||||
import traceback
|
||||
import collections
|
||||
@ -50,6 +51,8 @@ class OfflineImap:
|
||||
options, args = self.__parse_cmd_options()
|
||||
if options.diagnostics:
|
||||
self.__serverdiagnostics(options)
|
||||
elif options.migrate_fmd5:
|
||||
self.__migratefmd5(options)
|
||||
else:
|
||||
return self.__sync(options)
|
||||
|
||||
@ -120,6 +123,10 @@ class OfflineImap:
|
||||
help="specifies an alternative user interface"
|
||||
" (quiet, basic, syslog, ttyui, blinkenlights, machineui)")
|
||||
|
||||
parser.add_option("--migrate-fmd5-using-nametrans",
|
||||
action="store_true", dest="migrate_fmd5", default=False,
|
||||
help="migrate FMD5 hashes from versions prior to 6.3.5")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
globals.set_options (options)
|
||||
|
||||
@ -427,3 +434,21 @@ class OfflineImap:
|
||||
for account in allaccounts:
|
||||
if account.name not in activeaccounts: continue
|
||||
account.serverdiagnostics()
|
||||
|
||||
def __migratefmd5(self, options):
|
||||
activeaccounts = self.config.get("general", "accounts")
|
||||
if options.accounts:
|
||||
activeaccounts = options.accounts
|
||||
activeaccounts = activeaccounts.replace(" ", "")
|
||||
activeaccounts = activeaccounts.split(",")
|
||||
allaccounts = accounts.AccountListGenerator(self.config)
|
||||
|
||||
for account in allaccounts:
|
||||
if account.name not in activeaccounts:
|
||||
continue
|
||||
localrepo = Repository(account, 'local')
|
||||
if localrepo.getfoldertype() != folder.Maildir.MaildirFolder:
|
||||
continue
|
||||
folders = localrepo.getfolders()
|
||||
for f in folders:
|
||||
f.migratefmd5(options.dryrun)
|
||||
|
Reference in New Issue
Block a user