"DO" == Dan Ohnesorg <dan@ohnesorg.cz> writes:
DO> I am also triing to upgrade to never version and I have this DO> troubles: DO> Mailman.Errors.NotAMemberError: fickman@atlas.cz DO> and it is alo true, that this user is listed only in section | 'user_options': { '3zsmost@schoolnet.cz': 8, | 'fickman@atlas.cz': 8, DO> of dump_db. DO> Sure, the database is corrupt, but it is not fatal, i think DO> the upgrage should run OK. I don't remember why, but I think it is possible in MM2.0.something for an address to get stuck in user_options but not be in members or digest_members. Here's a patch that I think I'm going to check in that does two things: - it puts a membership check for the keys in usr_options and if that fails, it removes the key from user_options. - it sets a `fence' in the list's attributes so that once CanonicalizeUserOptions() has been run on a list, it won't be run again. Comments are welcome, -Barry Index: versions.py =================================================================== RCS file: /cvsroot/mailman/mailman/Mailman/versions.py,v retrieving revision 2.21 diff -u -r2.21 versions.py --- versions.py 7 Mar 2002 22:24:03 -0000 2.21 +++ versions.py 9 Mar 2002 17:32:42 -0000 @@ -329,6 +329,10 @@ def CanonicalizeUserOptions(l): """Fix up the user options.""" + # I want to put a flag in the list database which tells this routine to + # never try to canonicalize the user options again. + if getattr(l, 'useropts_version', 0) > 0: + return # pre 1.0rc2 to 1.0rc3. For all keys in l.user_options to be lowercase, # but merge options for both cases options = {} @@ -346,10 +350,15 @@ # get/setDeilveryStatus(). This must be done after the addresses are # canonicalized. for k, v in l.user_options.items(): + if not l.isMember(k): + # There's a key in user_options that isn't associated with a real + # member address. This is likely caused by an earlier bug. + del l.user_options[k] if l.getMemberOption(k, mm_cfg.DisableDelivery): # Convert this flag into a legacy disable l.setDeliveryStatus(k, UNKNOWN) l.setMemberOption(k, mm_cfg.DisableDelivery, 0) + l.useropts_version = 1