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