[Mailman-Developers] User feedback on www.lists.apple.com (round one)

Barry A. Warsaw barry@wooz.org
Mon, 30 Oct 2000 15:38:29 -0500 (EST)


>>>>> "CVR" == Chuq Von Rospach <chuqui@plaidworks.com> writes:

    CVR> it's monday, so users are starting to weigh in on the
    CVR> ugpraded server. For the most part, it's pretty positive.

Cool!

    CVR> with one exception. they hate the text digest format. And in
    CVR> fact, one user pointed out (correctly, it seems) that it's
    CVR> not conformant with the digest RFC:

    CVR> 	<http://www.rfc-editor.org/rfc/rfc1153.txt>

    CVR> Looks like mailman as it's set up doesn't use a conformant
    CVR> separator, and doesn't order header lines properly to the
    CVR> RFC.

Right on both counts.

    CVR> Also, I've had a number of requests to bump the volume
    CVR> number. That one is pretty badly hidden (it seems to be in
    CVR> Mailman/MailList.py).  That really needs to be made
    CVR> configurable through Defaults.PY, as should (IMHO) the
    CVR> separator (which is hidden in Handers/ToDigest.py as
    CVR> MIME_NONSEPARATOR.

    CVR> it'd be Really Nice, also, if there were some programmatic
    CVR> way to bump the volume, so it could be stuffed into cron and
    CVR> run at 0:00 1/1/*. And, to be honest, volume numbers need to
    CVR> (eventually) be per-list...

Actually, they are per-list.  The attributes are mlist.volume and
mlist.next_digest_number.  It's easier at this point to add a small
cron script to do the bumping, which I've attached below, and will
include in 2.0 final.

As far as fixing the plain text digest format to be RFC 1153
compliant, I agree it should be done.  But to do it right requires
more changes than I'm comfortable with for 2.0 final.  I've put it on
the TODO list and will fix it for 2.1.

[Aside: I use XEmacs/VM as my primary MUA and it groks the plain
digest format just fine, so I've never seen this problem!  Think you
can get all your users to "upgrade" their MUAs? :) ]

-Barry

-------------------- snip snip --------------------cron/bumpdigests
#! /usr/bin/env python
#
# Copyright (C) 1998,1999,2000 by the Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software 
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

"""Increment the digest volume number and reset the digest number to zero.

Usage: %(PROGRAM)s [options] [listname ...]

Options:

    --help/-h
        Print this message and exit.

The lists named on the command line are bumped.  If no list names are given,
all lists are bumped.
"""

import sys
import getopt

import paths
from Mailman import MailList
from Mailman import Utils
from Mailman import Errors

# Work around known problems with some RedHat cron daemons
import signal
signal.signal(signal.SIGCHLD, signal.SIG_DFL)

PROGRAM = sys.argv[0]



def usage(code, msg=''):
    print __doc__ % globals()
    if msg:
        print msg
    sys.exit(code)



def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'h', ['help'])
    except getopt.error, msg:
        usage(1, msg)

    for opt, arg in opts:
        if opt in ('-h', '--help'):
            usage(0)

    if args:
        listnames = args
    else:
        listnames = Utils.list_names()

    if not listnames:
        print 'Nothing to do.'
        sys.exit(0)

    for listname in listnames:
        try:
            # be sure the list is locked
            mlist = MailList.MailList(listname)
        except Errors.MMListError, e:
            usage(1, 'No such list: %s' % listname)
        try:
            mlist.volume = mlist.volume + 1
            mlist.next_digest_number = 1
        finally:
            mlist.Save()
            mlist.Unlock()



if __name__ == '__main__':
    main()