[Pkg-mailman-hackers] Pkg-mailman commit - rev 111 - branches/pkg-split/core/debian
Bernd S. Brentrup
bsb@haydn.debian.org
Wed, 05 May 2004 15:00:30 -0600
Author: bsb
Date: 2004-05-05 15:00:21 -0600 (Wed, 05 May 2004)
New Revision: 111
Added:
branches/pkg-split/core/debian/mailman-en.config
branches/pkg-split/core/debian/mailman-en.preinst
branches/pkg-split/core/debian/mailman-en.templates
Modified:
branches/pkg-split/core/debian/mailman-en.dirs
branches/pkg-split/core/debian/mailman-en.postinst
Log:
Maintainer scripts for mailman-en.
Added: branches/pkg-split/core/debian/mailman-en.config
===================================================================
--- branches/pkg-split/core/debian/mailman-en.config 2004-05-05 18:59:50 UTC (rev 110)
+++ branches/pkg-split/core/debian/mailman-en.config 2004-05-05 21:00:21 UTC (rev 111)
@@ -0,0 +1,89 @@
+#! /bin/sh -e
+# $URL$
+# $Id$
+
+. /usr/share/debconf/confmodule
+
+crontab=/etc/cron.d/mailman
+
+get_used_languages ()
+{
+ # Python being non-essential it may not be available at preconfigure
+ # time, but then no languages are used either.
+ if python </dev/null 2>/dev/null ; then
+ # list_lists may fail if mm_cfg is not yet installed
+ ( for ml in $(/usr/sbin/list_lists -b 2>/dev/null); do
+ ( /usr/sbin/config_list -o - ${ml} 2>/dev/null
+ cat <<EOF
+try: print '\n'.join(available_languages)
+except: pass
+EOF
+ ) | python -W ignore::DeprecationWarning
+ done
+ ) | sort | uniq
+ fi
+}
+
+# This script will be invoked by apt-get 2 times in a row, once when
+# preconfiguring the package and a second time just before running the
+# postinst script. OTOH when installing the package with dpkg or when
+# reconfiguring the package, it runs only once.
+#
+# It scans all mailing lists on a system for used languages which may
+# be quite time consuming on systems with many lists; hence we better
+# avoid to run that scan twice in a row.
+#
+# The debconf template mailman/used_languages holds the result of the
+# scan but is never presented to the user, instead its scanned flag
+# indicates if it holds a fresh value and is reset by the postinst,
+# while its seen flag is mainly used for cosmetical reasons to mark
+# processed values in debconf-show output.
+
+db_get mailman/used_languages || true
+used_languages="${RET}"
+db_fget mailman/used_languages scanned || true
+scanned="${RET}"
+
+if [ ! -z "$2" ] && dpkg --compare-versions $2 lt 2.1 ; then
+ # list_lists will fail when upgrading from pre 2.1; but with those
+ # versions not supporting i18n, english was the only used language.
+ db_set mailman/site_languages "en"
+ db_set mailman/used_languages "en"
+ db_fset mailman/used_languages scanned false
+elif [ ! -x "/usr/sbin/list_lists" ] ; then
+ # For 1st time installers there is no used language.
+ db_set mailman/site_languages "en"
+ db_set mailman/used_languages ""
+ db_fset mailman/used_languages scanned false
+else
+ if [ "${scanned}" != "true" ] ; then
+ echo -n "Looking for enabled languages (this may take some time) ..."
+ unset used_languages
+ for l in $(get_used_languages); do
+ used_languages=${used_languages:+${used_languages} }$l
+ done
+ db_set mailman/used_languages "${used_languages}"
+ db_fset mailman/used_languages scanned true
+ db_fset mailman/used_languages seen false
+ echo " done."
+ fi
+ # Install only languages selected by the administrator
+ # forcing used languages to be always available.
+ db_get mailman/site_languages
+ site_languages="$(echo $RET | sed -e 's/, */ /g')"
+ need_languages="${site_languages}"
+ for lang in ${used_languages} ; do
+ if echo " ${site_languages} " | grep -v -q " ${lang} " ; then
+ need_languages="${lang} ${need_languages}"
+ fi
+ done
+ if [ "${need_languages}" != "${site_languages}" ]; then
+ db_set mailman/site_languages "$(echo ${need_languages} | sed -e 's/ */, /g')"
+ fi
+fi
+
+if [ "${need_languages}" != "en" ] ; then
+ db_input critical mailman/other_languages || true
+ db_go || true
+ exit 1
+fi
Property changes on: branches/pkg-split/core/debian/mailman-en.config
___________________________________________________________________
Name: svn:keywords
+ Id URL
Modified: branches/pkg-split/core/debian/mailman-en.dirs
===================================================================
--- branches/pkg-split/core/debian/mailman-en.dirs 2004-05-05 18:59:50 UTC (rev 110)
+++ branches/pkg-split/core/debian/mailman-en.dirs 2004-05-05 21:00:21 UTC (rev 111)
@@ -1,3 +1,2 @@
etc/mailman/templates
-etc/mailman/templates/en
Modified: branches/pkg-split/core/debian/mailman-en.postinst
===================================================================
--- branches/pkg-split/core/debian/mailman-en.postinst 2004-05-05 18:59:50 UTC (rev 110)
+++ branches/pkg-split/core/debian/mailman-en.postinst 2004-05-05 21:00:21 UTC (rev 111)
@@ -1,5 +1,143 @@
-#! /bin/sh -e
+#!/usr/bin/python -O
+#
# $URL$
# $Id$
+#
-#DEBHELPER#
+"""
+
+Fooling lintian that complains about not sourcing confmodule:
+. /usr/share/debconf/confmodule
+"""#
+
+
+import sys, os
+
+
+# Argl, if the debconf Python interface were well designed, sth like
+# from debconf import instance as db
+# should be sufficient here. As it is, must work around it's flaws.
+def get_debconf_interface(title=''):
+ """Get an debconf interface instance, starting a frontend if
+ none is available.
+ """#
+ from debconf import Debconf, _frontEndProgram
+ try: junk = os.environ['DEBIAN_HAS_FRONTEND']
+ except KeyError: os.execv(_frontEndProgram, [_frontEndProgram]+sys.argv)
+ return Debconf(title)
+db = get_debconf_interface() ; del get_debconf_interface
+# Exception class and convenience constants
+from debconf import DebconfError, LOW, MEDIUM, HIGH, CRITICAL
+
+
+PACKAGE='mailman-i18n'
+MM_HOME = '/var/lib/mailman'
+
+sys.path.insert(0, MM_HOME)
+
+from Mailman.Debian import DebuggingLogger, cfdb, mm_languages
+
+from errno import EEXIST, ENOTEMPTY
+#from errno import *
+
+mm_etc='/etc/mailman'
+mm_tmpl=os.path.join(mm_etc, 'templates')
+mm_dist='/usr/share/mailman/templates'
+
+
+def setup():
+ """
+ """#
+
+ # Install only languages selected by the administrator
+ # forcing used languages to be always available.
+ site_languages = db.get('mailman/site_languages').split(', ')
+ site_languages = [ s.strip() for s in site_languages if s.strip() ]
+ need_languages = site_languages
+ used_languages = db.get('mailman/used_languages').split()
+ db.fset('mailman/used_languages', 'seen', 'true')
+ db.fset('mailman/used_languages', 'scanned', 'false')
+
+ log('DEBCONF: used_languages=%(used_languages)r' % locals(), lvl=2)
+ log('DEBCONF: site_languages=%(site_languages)r' % locals(), lvl=2)
+
+ for lang in used_languages:
+ if lang not in site_languages:
+ need_languages.append(lang)
+ if need_languages != site_languages:
+ db.set('mailman/site_languages', ', '.join(need_languages))
+ site_languages = need_languages
+
+ log('SETUP: need_languages=%(need_languages)r' % locals(), lvl=2)
+
+ remove_templates(need_languages)
+ install_templates(need_languages)
+
+ run_debhelper_additions()
+
+ db.fset('mailman/site_languages', 'seen', 'false')
+
+
+def remove_templates(site_languages):
+ """
+ """#
+ old_languages = os.listdir(mm_tmpl)
+
+ for lang in old_languages:
+ if lang not in site_languages:
+ langdir = os.path.join(mm_tmpl, lang)
+ log('Removing unmodified files from %(langdir)s ' % locals(),
+ nl='')
+ def cb(*args):
+ log('.', nl='')
+ cfdb.remove_unmod(lang, dst=mm_tmpl, callback=cb)
+ cfdb.sync()
+ log(' done.')
+ try:
+ os.rmdir(langdir)
+ except OSError,err:
+ if err.errno == ENOTEMPTY:
+ log('Directory %(langdir)s not empty so not removed.' % locals())
+ else: raise
+
+
+def install_templates(site_languages):
+ """
+ """#
+ for lang in site_languages:
+ log('Installing site language %(lang)s ' % locals(), nl='')
+ try:
+ os.mkdir(os.path.join(mm_tmpl, lang))
+ except OSError, err:
+ if err.errno != EEXIST: raise
+
+ for fn in os.listdir(os.path.join(mm_dist, lang)):
+ log('.', nl='')
+ langfile='%(lang)s/%(fn)s' % locals()
+ msg = cfdb.update(langfile, src=mm_dist, dst=mm_tmpl)
+ log(msg, lvl=9, nl='\n ')
+ # TBD: remove templates no longer distributed
+ cfdb.sync()
+ log(' done.')
+
+def run_debhelper_additions():
+ runit = os.popen('/bin/sh -e', 'w')
+ runit.write("""\
+#DEBHELPER#""")
+ if runit.close() is not None:
+ raise SystemExit(1)
+
+if __name__ == '__main__':
+ log = DebuggingLogger('MM_MAINT')
+ try:
+ op = sys.argv[1]
+ if op == 'configure':
+ setup()
+ elif op in ('abort-upgrade','abort-remove','abort-deconfigure'):
+ pass
+ else:
+ log("postinst called with unknown argument \`%s'" % op)
+ raise SystemExit(1)
+ finally:
+ # When things break, this information might be useful
+ log.sys_info()
Added: branches/pkg-split/core/debian/mailman-en.preinst
===================================================================
--- branches/pkg-split/core/debian/mailman-en.preinst 2004-05-05 18:59:50 UTC (rev 110)
+++ branches/pkg-split/core/debian/mailman-en.preinst 2004-05-05 21:00:21 UTC (rev 111)
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+# $URL$
+# $Id$
+
+mm_etc=/etc/mailman
+mm_tmpl=${mm_etc}/templates
+
+mm_languages="big5 ca cs da de en es et eu fi fr gb hr hu it ja ko lt nl no pl pt pt_BR ro ru sl sr sv uk"
+
+if [ "$1" = "install" ] ; then
+ for lang in $(cd ${mm_etc} ; find * -maxdepth 0 -type d); do
+ if echo " ${mm_languages} " | grep -q " ${lang} " ; then
+ [ -d ${mm_tmpl} ] || mkdir -p ${mm_tmpl}
+ mv -f ${mm_etc}/${lang} ${mm_tmpl}
+ fi
+ done
+fi
+
+#DEBHELPER#
+
+exit 0
Property changes on: branches/pkg-split/core/debian/mailman-en.preinst
___________________________________________________________________
Name: svn:keywords
+ Id URL
Added: branches/pkg-split/core/debian/mailman-en.templates
===================================================================
--- branches/pkg-split/core/debian/mailman-en.templates 2004-05-05 18:59:50 UTC (rev 110)
+++ branches/pkg-split/core/debian/mailman-en.templates 2004-05-05 21:00:21 UTC (rev 111)
@@ -0,0 +1,14 @@
+# $URL$
+# $Id$
+Template: mailman/other_languages
+Type: note
+_Description: Unsupported languages used
+ The mailman-en package
+ supports only english mailing lists while this installation has
+ support for multiple languages enabled.
+ .
+ Before retrying to install this package, please make sure all mailing
+ lists use english only before disabling all non-english site
+ languages in mailman-i18n.
+
+
\ No newline at end of file
Property changes on: branches/pkg-split/core/debian/mailman-en.templates
___________________________________________________________________
Name: svn:keywords
+ Id URL