Package: offlineimap
Version: 6.1.1
--- Please enter the report below this line. ---
I can confirm this behavior in version 6.1.1.
The problem comes from the data structure used to save the queue of
folders to be synced. Replacing the dict by a list of lists fixes the
problem, by obviously keeping the order of the folder list (patch is
attached).
--- System information. ---
Architecture: amd64
Kernel: Linux 2.6.30
Debian Release: squeeze/sid
500 unstable-i386 emacs.orebokech.com
500 unstable-i386 debian.lcs.mit.edu
500 unstable emacs.orebokech.com
500 unstable debian.lcs.mit.edu
500 testing-i386 security.debian.org
500 testing-i386 debian.lcs.mit.edu
500 testing security.debian.org
500 testing debian.lcs.mit.edu
500 squeeze-i386 debathena.mit.edu
500 squeeze debathena.mit.edu
1 experimental-i386 debian.lcs.mit.edu
1 experimental debian.lcs.mit.edu
--- Package information. ---
Depends (Version) | Installed
==============================-+-============
python (>= 2.5) | 2.5.4-2
python-support (>= 0.90.0) | 1.0.3
Package's Recommends field is empty.
Suggests (Version) | Installed
==============================-+-===========
python-kerberos |
--- offlineimap.orig/accounts.py 2009-03-19 15:11:28.000000000 -0400
+++ offlineimap/accounts.py 2009-07-04 05:56:01.000000000 -0400
@@ -37,9 +37,9 @@
# folders haven't yet been added, or this account is once-only; drop signal
return
elif self.folders:
- for folder in self.folders:
+ for foldernr in range(len(self.folders)):
# requeue folder
- self.folders[folder] = True
+ self.folders[foldernr][1] = True
self.quick = False
return
# else folders have already been cleared, put signal...
@@ -49,22 +49,22 @@
def addfolders(self, remotefolders, autorefreshes, quick):
self.folderlock.acquire()
try:
- self.folders = {}
+ self.folders = []
self.quick = quick
self.autorefreshes = autorefreshes
for folder in remotefolders:
# new folders are queued
- self.folders[folder] = True
+ self.folders.append([folder, True])
finally:
self.folderlock.release()
def clearfolders(self):
self.folderlock.acquire()
try:
- for folder in self.folders:
- if self.folders[folder]:
+ for folder, queued in self.folders:
+ if queued:
# some folders still in queue
return False
- self.folders.clear()
+ self.folders[:] = []
return True
finally:
self.folderlock.release()
@@ -74,10 +74,10 @@
dirty = True
while dirty:
dirty = False
- for folder in self.folders:
- if self.folders[folder]:
+ for foldernr, (folder, queued) in enumerate(self.folders):
+ if queued:
# mark folder as no longer queued
- self.folders[folder] = False
+ self.folders[foldernr][1] = False
dirty = True
quick = self.quick
self.folderlock.release()