[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