[Pkg-mailman-hackers] Pkg-mailman commit - rev 147 - in branches/pkg-split/core/debian: . Debian snippets

Bernd S. Brentrup bsb@haydn.debian.org
Sat, 22 May 2004 03:56:51 -0600


Author: bsb
Date: 2004-05-22 03:56:48 -0600 (Sat, 22 May 2004)
New Revision: 147

Modified:
   branches/pkg-split/core/debian/Debian/templates.py
   branches/pkg-split/core/debian/mailman.postinst
   branches/pkg-split/core/debian/snippets/user_cfg.py
Log:
Upgrade existing mm_cfg.py coping with multiple vhosts.

Modified: branches/pkg-split/core/debian/Debian/templates.py
===================================================================
--- branches/pkg-split/core/debian/Debian/templates.py	2004-05-22 09:19:00 UTC (rev 146)
+++ branches/pkg-split/core/debian/Debian/templates.py	2004-05-22 09:56:48 UTC (rev 147)
@@ -74,11 +74,11 @@
 #   Alias       %(IMAGE_LOGOS)s /usr/share/images/mailman/
 # </VirtualHost>
 #-------------------------------------------------------------
+DEFAULT_URL_PATTERN = %(DEFAULT_URL_PATTERN)r
+IMAGE_LOGOS         = %(IMAGE_LOGOS)r
 DEFAULT_URL_HOST   = %(DEFAULT_URL_HOST)r
 DEFAULT_EMAIL_HOST = %(DEFAULT_EMAIL_HOST)r
-add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
-DEFAULT_URL_PATTERN = %(DEFAULT_URL_PATTERN)r
-IMAGE_LOGOS         = %(IMAGE_LOGOS)r
+add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)%(virtual_hosts)s
 
 #-------------------------------------------------------------
 # Depending on your MTA setup, the MTA configuration variable
@@ -90,7 +90,7 @@
 #             aliases in /etc/aliases or similar.
 # In any case, please read the MTA specific README.* in
 # /usr/share/doc/mailman before setting this.
-MTA=%(MTA)r
+MTA = %(MTA)r
 
 #-------------------------------------------------------------
 # The USE_ENVELOPE_SENDER variable controls the order in which
@@ -123,7 +123,7 @@
 # Variables below are deprecated.  Where applicable, their values are
 # incorporated above.
 ''',
-    'DEFAULT_HOST_NAME' : '''\
+    'DEFAULT_HOST_NAME' : '''
 # Replaced by DEFAULT_EMAIL_HOST
 # DEFAULT_HOST_NAME = %(DEFAULT_HOST_NAME)r
 ''',

Modified: branches/pkg-split/core/debian/mailman.postinst
===================================================================
--- branches/pkg-split/core/debian/mailman.postinst	2004-05-22 09:19:00 UTC (rev 146)
+++ branches/pkg-split/core/debian/mailman.postinst	2004-05-22 09:56:48 UTC (rev 147)
@@ -62,10 +62,19 @@
 def default_mm_cfg():
     """Get default configuration.
     """#
-    gbls = virgin_gbls.copy()
+    gbls = {}
     exec 'from Mailman.Defaults import *' in gbls
+    for k, v in gbls.items():
+        try:
+            hash(v)
+        except TypeError:
+            try:
+                gbls[k] = v.copy()
+            except AttributeError:
+                gbls[k] = v[:]
     return gbls
 
+
 def create_mm_cfg():
     """Create an initial /etc/mailman/mm_cfg.py
 
@@ -91,13 +100,14 @@
         gbls['DEFAULT_SERVER_LANGUAGE'] = server_language
         exec 'from urlparse import urlsplit' in gbls
         exec 'default_url_path = urlsplit(DEFAULT_URL_PATTERN)[2]' in gbls
+        exec 'virtual_hosts = ""' in gbls
         mm_cfg_fl.write(mm_cfg_fillin % gbls)
         mm_cfg_fl.close()
     except DebconfError, exc:
         log.exception()
 
 
-def update_mm_cfg():
+def upgrade_mm_cfg():
     """Update an existing /etc/mailman/mm_cfg.py.
 
     Given upgrade paths from 2.0 MM installations and somewhat
@@ -106,7 +116,7 @@
     """#
     etc_mm_cfg = '/etc/mailman/mm_cfg.py'
     def_gbls = default_mm_cfg()
-    usr_gbls = virgin_gbls.copy()
+    usr_gbls = {}
     sys.modules['Defaults'] = sys.modules['Mailman.Defaults']
     execfile(etc_mm_cfg, usr_gbls)
     os.rename(etc_mm_cfg, etc_mm_cfg+'.dpkg-old')
@@ -118,19 +128,116 @@
         mm_cfg_fl.write(mm_cfg_defaults)
         mm_cfg_fl.flush()
 
-        exec 'from Mailman.Defaults import *' in gbls
-
         email_host = db.get('mailman/email_host')
-        gbls['DEFAULT_EMAIL_HOST'] = email_host
-        log('DEBCONF email_host=%(DEFAULT_EMAIL_HOST)r' % gbls, lvl=2)
+        usr_gbls['DEFAULT_EMAIL_HOST'] = email_host
+        log('DEBCONF email_host=%(DEFAULT_EMAIL_HOST)r' % usr_gbls, lvl=2)
         url_host = db.get('mailman/url_host') or 'www.'+email_host
-        gbls['DEFAULT_URL_HOST']   = url_host
-        log('DEBCONF url_host=%(DEFAULT_URL_HOST)r' % gbls, lvl=2)
+        usr_gbls['DEFAULT_URL_HOST']   = url_host
+        log('DEBCONF url_host=%(DEFAULT_URL_HOST)r' % usr_gbls, lvl=2)
         server_language = db.get('mailman/default_server_language') or 'en'
-        gbls['DEFAULT_SERVER_LANGUAGE'] = server_language
-        exec 'from urlparse import urlsplit' in gbls
-        exec 'default_url_path = urlsplit(DEFAULT_URL_PATTERN)[2]' in gbls
-        mm_cfg_fl.write(mm_cfg_fillin % gbls)
+        usr_gbls['DEFAULT_SERVER_LANGUAGE'] = server_language
+
+        usr_mod  = {}
+        usr_def  = {}
+
+        for var, usr_value in usr_gbls.items():
+            try:
+                if usr_value != def_gbls[var]:
+                    usr_mod[var] = 1
+            except KeyError:
+                # Handle user defined variable here
+                usr_def[var] = 1
+
+        del usr_def['__doc__']
+
+        if usr_mod.keys():
+            log("User modified variables:", lvl=3)
+            for var in usr_mod.keys():
+                log('  %18s: %r\n%20s: %r'
+                    % (var, usr_gbls[var], 'default', def_gbls[var]), lvl=3)
+
+        if usr_def.keys():
+            log("User defined variables:", lvl=3)
+            for var in usr_def.keys():
+                log(' %18s: %r' % (var, usr_gbls[var]), lvl=3)
+
+        from urlparse import urlsplit, urlunsplit
+        def_scheme, def_netloc, def_path = urlsplit(def_gbls['DEFAULT_URL_PATTERN'])[:3]
+        if 'DEFAULT_URL' in usr_mod.keys():
+            usr_scheme, usr_netloc, usr_path = urlsplit(usr_gbls['DEFAULT_URL'])[:3]
+            usr_gbls['DEFAULT_URL_HOST'] = usr_netloc
+            usr_mod['DEFAULT_URL_HOST'] = 1
+            if usr_scheme != def_scheme or usr_path != def_path:
+                usr_gbls['DEFAULT_URL_PATTERN'] = urlunsplit((usr_scheme, def_netloc, usr_path,
+                                                              None, None))
+                usr_mod['DEFAULT_URL_PATTERN'] = 1
+            usr_gbls['default_url_path'] = usr_path
+        elif 'DEFAULT_URL_PATTERN' in usr_mod.keys():
+            usr_scheme, usr_netloc, usr_path = urlsplit(usr_gbls['DEFAULT_URL_PATTERN'])[:3]
+            usr_gbls['default_url_path'] = usr_path
+        else:    
+            usr_gbls['default_url_path'] = def_path
+
+        if 'DEFAULT_HOST_NAME' in usr_mod.keys():
+            exec 'DEFAULT_EMAIL_HOST = DEFAULT_HOST_NAME' in usr_gbls
+            usr_mod['DEFAULT_EMAIL_HOST'] = 1
+        if 'IMAGE_LOGOS' in usr_mod.keys():
+            if usr_gbls['IMAGE_LOGOS'].startswith('/doc/mailman'):
+                exec 'OLD_IMAGE_LOGOS = IMAGE_LOGOS' in usr_gbls
+                usr_def['OLD_IMAGE_LOGOS'] = 1
+                usr_gbls['IMAGE_LOGOS'] = def_gbls['IMAGE_LOGOS']
+        if 'PUBLIC_ARCHIVE_URL' in usr_mod.keys():
+            exec 'OLD_PUBLIC_ARCHIVE_URL = PUBLIC_ARCHIVE_URL' in usr_gbls
+            exec 'PUBLIC_ARCHIVE_URL=%(PUBLIC_ARCHIVE_URL)r' % def_gbls in usr_gbls
+            usr_def['OLD_PUBLIC_ARCHIVE_URL'] = 1
+        exec 'DEFAULT_SEND_REMINDERS = DEFAULT_SEND_REMINDERS and True or False' in usr_gbls
+        exec 'USE_ENVELOPE_SENDER = USE_ENVELOPE_SENDER and True or False' in usr_gbls
+
+        from cStringIO import StringIO
+
+        # Make sure user added virtual hosts are kept in the new mm_cfg
+        vhosts = StringIO()
+        for url_host, email_host in usr_gbls['VIRTUAL_HOSTS'].items():
+            if (url_host, email_host) not in ((usr_gbls['DEFAULT_URL_HOST'], usr_gbls['DEFAULT_EMAIL_HOST']),
+                                              ('localhost', 'localhost')):
+                vhosts.write('\nadd_virtualhost(%(url_host)r, %(email_host)r)' % locals())
+        usr_gbls['virtual_hosts'] = vhosts.getvalue()
+
+        # Generate commented /etc/mailman/mm_cfg.py.dpkg-dist
+        cfl = StringIO()
+        cfl.write(mm_cfg_fillin % usr_gbls)
+
+        # Isolate deprecated variables 
+        from Mailman.Debian import mm_cfg_deprecated
+
+        deprecated = StringIO()
+        deprecated_vars = mm_cfg_deprecated.keys()
+        deprecated_vars.sort()
+        usr_mod.update(usr_def)
+        for v in deprecated_vars:
+            try:
+                usr_mod[v]
+                deprecated.write(mm_cfg_deprecated[v] % usr_gbls)
+                del usr_def[v]
+            except KeyError: pass
+
+        defs = usr_def.keys()
+        if defs:
+            cfl.write('\n#%s\n' % ('-'*71))
+            cfl.write('# The following variables have no defaults defined in '
+                      '%(PREFIX)s/Mailman/Defaults\n' % usr_gbls)
+            defs.sort()
+            for v in defs:
+                fmt = '%(v)s = %%(%(v)s)r\n' % locals()
+                cfl.write(fmt % usr_gbls)
+
+
+        s = deprecated.getvalue()
+        if s:
+                cfl.write(mm_cfg_deprecated[None])
+                cfl.write(s)
+
+        mm_cfg_fl.write(cfl.getvalue())
         mm_cfg_fl.close()
     except DebconfError, exc:
         log.exception()
@@ -242,8 +349,10 @@
 
 def setup():
     compile_modules(MM_INST)
-##     ucf_to_cfdb()
-    create_mm_cfg()
+    if os.path.exists('/etc/mailman/mm_cfg.py'):
+        upgrade_mm_cfg()
+    else:
+        create_mm_cfg()
     update_cron()
     update_lists()
     fix_perms()

Modified: branches/pkg-split/core/debian/snippets/user_cfg.py
===================================================================
--- branches/pkg-split/core/debian/snippets/user_cfg.py	2004-05-22 09:19:00 UTC (rev 146)
+++ branches/pkg-split/core/debian/snippets/user_cfg.py	2004-05-22 09:56:48 UTC (rev 147)
@@ -15,13 +15,22 @@
 else:
     virgin_gbls = globals().copy()
 
+def keep_mutables(d):
+    for k, v in d.items():
+        try:
+            hash(v)
+        except TypeError:
+            try:
+                d[k] = v.copy()
+            except AttributeError:
+                d[k] = v[:]
 
 def upgrade_mm_cfg():
 
-    def_gbls = virgin_gbls.copy()
+    def_gbls = {}
     exec 'from Mailman.Defaults import *' in def_gbls
-    exec 'VIRTUAL_HOSTS = VIRTUAL_HOSTS.copy()' in def_gbls
-    usr_gbls = virgin_gbls.copy()
+    keep_mutables(def_gbls)
+    usr_gbls = {}
     sys.modules['Defaults'] = sys.modules['Mailman.Defaults']
     execfile(USER_MM_CFG, usr_gbls)
 
@@ -37,18 +46,21 @@
             # Handle user defined variable here
             usr_def[var] = 1
 
-    del usr_mod['__doc__']
+    del usr_def['__doc__']
 
-    print "User modified variables:"
-    for var in usr_mod.keys():
-        print '  %s:\t%r was %r' % (var, usr_gbls[var], def_gbls[var])
 
-    print "User defined variables:"
-    for var in usr_def.keys():
-        print '  %s: \t%r' % (var, usr_gbls[var])
+    if usr_mod.keys():
+        log("User modified variables:", lvl=3)
+        for var in usr_mod.keys():
+            log('  %18s: %r\n%20s: %r'
+                % (var, usr_gbls[var], 'default', def_gbls[var]), lvl=3)
 
-    print
+    if usr_def.keys():
+        log("User defined variables:", lvl=3)
+        for var in usr_def.keys():
+            log(' %18s: %r' % (var, usr_gbls[var]), lvl=3)
 
+
     from urlparse import urlsplit, urlunsplit
     def_scheme, def_netloc, def_path = urlsplit(def_gbls['DEFAULT_URL_PATTERN'])[:3]
     if 'DEFAULT_URL' in usr_mod.keys():
@@ -115,4 +127,6 @@
 ##     print "mm_cfg   VIRTUAL_HOSTS=%(VIRTUAL_HOSTS)r" % usr_gbls
 
 if __name__ == '__main__':
+    from Mailman.Debian import DebuggingLogger
+    log = DebuggingLogger('MM_MAINT')
     upgrade_mm_cfg()