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()

Reply via email to