summaryrefslogtreecommitdiff
path: root/bin
Commit message (Collapse)AuthorAgeFilesLines
* Basic buildout infrastructure.Barry Warsaw2008-12-1812-2458/+0
| | | | | | Added a NEWS file. Move old bin scripts to the attic.
* Remove some obsolete command line scripts:Barry Warsaw2007-07-216-417/+0
| | | | | | | | | | | | | | | | | | | - bin/check_dbs because there are no more pickles - bin/convert because in MM3 everything will use $-strings and we'll do the conversion on import of the old list data - bin/mmshell because setuptools provides its own equivalent - bin/qrunner and bin/mailmanctl because the files were empty There are a bunch of scripts still left in bin/ which will eventually get removed. I'm leaving them for now because they're either helpers generally tangential to Mailman (msgfmt, po2template, pygettext, templ2pot, transcheck), or are using old interfaces that will go away soon (clone_member, convert, discard, fix_url, list_admins, remove_members, reset_pw, sync_members). Also moved bin/cleanarch into Mailman/bin/cleanarch.py and updated it to use optparse. Also added a small patch to genalias to standardize its help printing.
* The start of a setuptools conversion. All the Makefile.in and autoconfBarry Warsaw2007-07-131-93/+0
| | | | artifacts are removed, as is the C files which we will no longer need.
* Update copyright years.bwarsaw2007-01-195-5/+5
|
* Merged revisions 8113-8121 via svnmerge from bwarsaw2006-12-292-306/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | https://mailman.svn.sourceforge.net/svnroot/mailman/branches/tmp-sqlalchemy-branch ................ r8114 | bwarsaw | 2006-12-06 00:16:54 -0500 (Wed, 06 Dec 2006) | 44 lines Initial take on using SQLAlchemy to store list data in lieu of Python pickles. While all the list data (including OldStyleMemberships attributes) are stored in the database, many attributes are stored as PickleTypes binary data. This isn't idea but it gets things working until a more sophisticated schema can be developed. MailList class is now a new-style class, as is required by SQLAlchemy. This makes several things, er, interesting. Rip out all the low-level pickle reading and writing stuff. Hook SA transaction events into Lock() and Unlock(). Move the hooking of the _memberadaptor into InitTempVars(), which gets called by the SQLAlchemy hooks (MailList.__init__() never is). Add an initialize.py module which centralizes all the initialization bits that command line scripts have to do, including configuration, logging, and atabase initialization. This change also converts bin/withlist to mmshell wrapper. Update to SQLAlchemy 0.3.1. Revamp paths.py.in considerably. There were several problems with the old way. We no longer disable default loading of site-packages so we don't need to add Python's site-packages back to sys.path. Also, because site.addsitedir() causes things like .pth paths to be /appended/ to sys.path, they actually won't override any site-installed packages. E.g. if SQLAlchemy is installed in the system Python, our version will not override. IIUC, setuptools-based packages can be configured to work properly in the face of package versions, however not all packages we currently depend on are setuptools-based. So instead, we steal a bit of stuff from site.py but change things so the prepend .pth stuff to sys.path. Update several modules to use True/False and whitespace normalization. Convert from mm_cfg to config object. Modernize a few coding constructs. Add a couple of exceptions to handle database problems. In the export script, include the widget type in the elements. This helped in my stupid little throw away conversion script, but I think it will be more generally useful. Add an interact.py module which refactors interactive interpreter access. Mostly this is used by withlist -i, but it lets us import Mailman.interact and drop into a prompt just about anywhere (e.g. debugging). ................ r8115 | bwarsaw | 2006-12-07 09:13:56 -0500 (Thu, 07 Dec 2006) | 22 lines Start to flesh out more of the SQLAlchemy mechanisms. Added a MailList.__new__() which hooks instantiation to use a query on dbcontext to get an existing mailing list. A 'no-args' call means we're doing a Create(), though eventually that will change too. For now, disable the CheckVersion() call. Eventually this will be folded into schema migration. list_exists(): Rewrite to use the dbcontext query to determine if the named mailing list exists or not. Requires the fqdn_listname. Eradicate two failed member adaptors: BDBMemberAdaptor and SAMemberships. Change the way the DBContext holds onto tables. It now keeps a dictionary mapping the table's name to the SA Table instance. This makes it easier to look up and use the individual tables. Add 'web_page_url' as an attribute managed by SA, and remove a debugging print. ................ r8116 | bwarsaw | 2006-12-11 07:27:47 -0500 (Mon, 11 Dec 2006) | 29 lines Rework the whole dbcontext and transaction framework. SA already handles nested transactions so we don't have to worry about them. However, we do have the weird situation where some transactions are tied to MailList .Lock()/.Unlock()/.Save() and some are tied to non-mlist actions. So now we use an @txn decorator to put methods in a session transaction, but then we also hook into the above MailList methods as possibly sub-transactions. We use a weakref subclass to manage the MailList interface, with a dictionary mapping MailList fqdn_listnames against transactions. The weakrefs come in by giving us a callback when a MailList gets derefed such that we're guaranteed to rollback any outstanding transaction. Also, we have one global DBContext instance but rather than force the rest of Mailman to deal with context objects, instead we expose API methods on that object into the Mailman.database module, which the rest of the code will use. Such methods must be prepended with 'api_' to get exposed this way. bin/rmlist now works with the SA-backend. I refactored the code here so that other code (namely, the test suite) can more easily and consistently remove a mailing list. This isn't the best place for it ultimately, but it's good enough for now. New convenience functions Utils.split_listname(), .fqdn_listname(). Convert testall to use Mailman.initialize.initialize(). Not all tests work, but I'm down to only 8 failures and 7 errors. Also, do a better job of recovering from failures in setUp(). MailList.__new__() now takes keyword arguments. ................ r8117 | bwarsaw | 2006-12-11 22:58:06 -0500 (Mon, 11 Dec 2006) | 7 lines Unit test repairs; even though the unit tests are still pretty fragile, everything now passes with the SQLAlchemy storage of list data. Added missing 'personalize' column. Converted mailmanctl and qrunner to initialize() interface. Fixed _cookie_path() to not fail if SCRIPT_NAME is not in the environment. ................ r8118 | bwarsaw | 2006-12-27 18:45:41 -0500 (Wed, 27 Dec 2006) | 21 lines Utils.list_names(): Use a database query to get all the list names. dbcontext.py: Added api_get_list_names() to support Utils.list_names(). listdata.py: Added two additional MailList attributes which need to be stored in the database. The first is 'admin_member_chunksize' which isn't modifiable from the web. The second is 'password' which holds the list's password. HTMLFormatObject: item strings can now be unicodes. bin/list_lists.py: Must call initialize() to get the database properly initialized, not just config.load(). This will be a common theme. SecurityManager.py: - Remove md5 and crypt support - Added mailman.debug logger, though it will be only used during debugging. - The 'secret' can be a unicode now. - A few coding style updates; repr() instead of backticks, 'key in dict' instead of 'dict.has_key(key)' ................ r8119 | bwarsaw | 2006-12-27 19:13:09 -0500 (Wed, 27 Dec 2006) | 2 lines genaliases.py: config.load() -> initialize() ................ r8120 | bwarsaw | 2006-12-27 19:17:26 -0500 (Wed, 27 Dec 2006) | 9 lines Blocked revisions 8113 via svnmerge ........ r8113 | bwarsaw | 2006-12-05 23:54:30 -0500 (Tue, 05 Dec 2006) | 3 lines Initialized merge tracking via "svnmerge" with revisions "1-8112" from https://mailman.svn.sourceforge.net/svnroot/mailman/branches/tmp-sqlalchemy-branch ........ ................ r8121 | bwarsaw | 2006-12-28 23:34:52 -0500 (Thu, 28 Dec 2006) | 20 lines Remove SIGTERM handling from all the CGI scripts. This messes with HTTPRunner because when you issue "mailmanctl stop" after the signal handler has been installed, the process will get a SIGTERM, the signal handler will run, and the process will exit with a normal zero code. This will cause mailmanctl to try to restart the HTTPRunner. I don't think we need that stuff at all when running under wsgi with a SQLAlchemy backend. If mailmanctl kills the HTTPRunner in the middle of the process, I believe (but have not tested) that the transaction should get properly rolled back at process exit. We need to make sure about this, and also we need to test the signal handling functionality under traditional CGI environment (if we even still want to support that). Also, make sure that we don't try to initialize the loggers twice in qrunner. This was the cause of all the double entries in logs/qrunner. Fix a coding style nit in mailmanctl.py. De-DOS-ify line endings in loginit.py. ................
* Convert dumpdb to mmshell and configuration object. Convert htmlformat.pybwarsaw2006-11-043-139/+2
| | | | | | | | | from mm_cfg to the configuration object. In the config object, add an add_runner() function for extending the QRUNNERS variable. De-DOS-line-ending-ify configuration.py
* Whitespace normalization and copyright years.bwarsaw2006-10-201-5/+6
|
* fix_url.py updated to use config object.mindlace232006-10-191-5/+5
|
* More work on the WSGI support. So far, I've tested most of the admin.py linksbwarsaw2006-10-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | and some of the admindb.py links. There may still be breakage in other parts of the interface and I haven't gone back to verify that traditional CGI still works. Changes: - Add wsgiref-0.1.2-py2.4.egg so that we can still do WSGI in Python 2.4, which doesn't come with wsgiref. Of course this means we /also/ have to add setuptools-0.5c3 because eggs require setuptools. - Style cleanups in HTTPRunner.py and wsgi_app.py. Also, use cStringIO instead of StringIO. - All internal links within the listinfo and admin pages are (or at least should be ;) relative now. This should make other things better, such as running Mailman over https or alternative ports. It does kind of mean that web_page_url is obsolete, but I haven't looked at whether we can completely eradicate it. - ValidateEmail(): Use ' ' in s instead of s.count(' ') > 0. - GetPathPieces(): When path is false, return the empty list instead of None, so we can still len() it. - ScriptURL(): Much simpler. To support relative urls as the default, we change the API so that it only takes a 'target' argument (i.e. the script we want to link to). It no longer takes 'absolute' or 'web_page_url', and it constructs its link from GetPathPieces(), the target, and the cgi extension. - GetRequestURI(): code style updates. - Mailman/bin/show_config.py: De-DOS-line-ending-ification. - export.py: A few modifications, although this is likely still not final (I'm still working on the import script). First, for <option> elements, don't put the value in an attribute, put it in the text body of the element. Second, put the list <option> tags in a <configuration> element. Third, put the preferred language on an <option> tag with a 'preferred_language' name attribute value. - SecurityManager: Make sure that MakeCookie() and ZapCookie() use the same 'path' cookie value by refactoring that into a separate method. That method now returns just the SCRIPT_NAME and the full listname. web_page_url doesn't enter into it. - loginit.py: Add a 'debug' logger since it's just too useful to have :) - admin.py: Remove the extra / right before the query string in ?VARHELP urls. That extra / turns out to be problematic with the relative url scheme we're using now. - Auth.py: whitespace normalization and copyright years update. Also, remove a couple of unnecessary imports. Also, make sure that the actionurl is relative. - create.py: Typo. - private.py: mm_cfg -> config object - In MailList.py: GetScriptURL() can be written in terms of Utils.ScriptURL() now.
* - bin/show_mm_cfg.py renamed to bin/show_config.py.msapiro2006-10-121-1/+1
| | | | | | - added a -C/--config option to bin/show_config.py and made a few other changes. - MailList.py - r8040 broke Mailman/bin/update.py situate_list. Fixed it with this change.
* First crack at an XML exporter of a mailing list's configuration andbwarsaw2006-10-082-367/+6
| | | | | | | | | | | | | | | | membership. The next step is to write an XML importer that reads this file. I'm not 100% sure that all the import data is included yet, but the intent is that this will be the official way to move mailing lists. A few notes: member passwords are not included by default, the idea being that if we enable XML dumping from the web, we don't want the clear text user passwords to be leaked. A command line option includes the member passwords. Also, the various substitutable texts (i.e. those that include %-strings) will be autoconverted to $-strings. In Mailman 2.2, we'll only have $-strings, although this is not yet enforced in other parts of the code yet. Convert config_list.py to mmshell, $-strings, and optparse.
* Convert genaliases to mmshell, optparse, and configuration.configbwarsaw2006-09-253-121/+8
| | | | | | | | | | | | | | | | bin/withlist: If there's no '@' in the listname, append the DEFAULT_EMAIL_HOST so we always get a fully qualified list name. bin/mmsitepass: plumb through -C/--config switch and be sure to call config.load(). Convert Mailman/MTA/Postfix.py to configuration.config, and update MTA/Manual. In mailman/Cgi/create, we can't convert straight from a string to a bool, because bool('0') is True. We need to go through int first. MailList.InitTempVars(): The logic here looked weird because we could get 'name' = None and that would break. Assume name is never None.
* Convert check_perms to mmshell symlink, configuration object, and optparsebwarsaw2006-09-242-398/+5
| | | | usage.
* First crack at real virtual domain support, i.e. mailing lists with the samebwarsaw2006-07-081-6/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | name in more than one domain. - Totally eradicate MAILMAN_SITE_LIST, and in fact the entire need for a site list. The functions that the site list previously performed are either removed or supported in other ways. For example, instead of forwarding owner bounces to the site list, we now have a SITE_OWNER_ADDRESS which should point to a human, and such bounces are sent there instead. There's also a "no reply" email address that should be set up to go to devnull. For any message that never expects a reply, the sender is set to this address. - Remove the Site.py module. It was an experimental approach to trying to support virtual domains, and we're going to do it so much better now that this module is no longer necessary. Site._makedirs() -> Utils.makedir(). - VIRTUAL_HOST_OVERVIEW is completely removed, since now virtual hosts are always enabled. Virtual domains should be added to mailman.cfg by using the new add_domain() function. add_virtualhost() is gone. If no virtual domains are added explicitly, we add the default one that configure guessed (but we never add that if domains are added explicitly). - Utils.get_domain() -> Utils.get_request_domain() - withlist code cleanup and make sure that we load etc/mailman.cfg - A new base exception called MailmanException is added, from which all exceptions defined in Errors.py ultimately derive. MailmanError is retained and derives from MailmanException. - BadDomainSpecificationError is added. - Remove the -V/--virtual-host-overview option from list_lists and add instead -d/--domain and -f/--full. - bin/update probably works but needs more testing. - bin/newlist and bin/rmlist take fqdn list names, but default to the default domain if @whatever isn't given. newlist's -u/--urlhost and -e/--emailhost options are removed. The domain that the list is being added to must already exist. - Minor code cleanup in Message.py - Bump version to 2.2.0a1 - The Configuration object grows a .domain dictionary which maps email hosts to url hosts. The reverse mapping is supported, but not directly; use Configuration.get_email_host() instead. - Mailman/Cgi/create is converted from mm_cfg to config, and some minor code cleanup is performed. Also, convert to __i18n_templates__ = True. - New MailList APIs: + property .fqdn_listname + GetNoReplyEmail() + Create() API changes and refactoring.
* Massive conversion process so that Mailman can be run from a user specifiedbwarsaw2006-07-084-1634/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | configuration file. While the full conversion is not yet complete, everything that seems to be required to run mailmanctl, qrunner, rmlist, and newlist have been updated. Basically, modules should no longer import mm_cfg, but instead they should import Mailman.configuration.config. The latter is an object that's guaranteed to exist, but not guaranteed to be initialized until some top-level script calls config.load(). The latter should be called with the argument to -C/--config which is a new convention the above scripts have been given. In most cases, where mm_cfg.<variable> is used config.<variable> can be used, but the exceptions are where the default value must be available before config.load() is called. Sometimes you can import Mailman.Default and get the variable from there, but other times the code has to be changed to work around this limitation. Take each on a case-by-case basis. Note that the various directories calculated from VAR_PREFIX, EXEC_PREFIX, and PREFIX are now calculated in config.py, not in Defaults.py. This way a configuration file can override the base directories and everything should work correctly. Other changes here include: - mailmanctl, qrunner, and update are switched to optparse and $-strings, and changed to the mmshell architecture - An etc directory has been added to /usr/local/mailman and a mailman.cfg.sample file is installed there. Sites should now edit an etc/mailman.cfg file to do their configurations, although the mm_cfg file is still honored. The formats of the two files are identical. - list_lists is given the -C/--config option - Some coding style fixes in bin/update, but not extensive - Get rid of nested scope hacks in qrunner.py - A start on getting EmailBase tests working (specifically test_message), although not yet complete.
* Added a call to loginit.initialize() so invoked modules can do their logging.msapiro2006-06-111-2/+8
|
* - show_mm_cfg.pymsapiro2006-06-041-113/+91
| | | | | | | | Added pretty printing. - dumpdb Fixed to once again dump marshals. Converted to use optparse. Did not convert to mmshell framework because it's not compatible with 'interactive' usage.
* Added a new show_mm_cfg command line script to show the actual valuesmsapiro2006-06-021-1/+1
| | | of variables imported from mm_cfg.
* Reorganize the unit test infrastructure, so that tests live inside thebwarsaw2006-05-181-1/+1
| | | | | | | | | | | | | | | | | Mailman top level package. Rewrote the test runner and stuck it in bin (as an mmshell symlink). bin/testall now autodetects tests and allows running a subset of tests via regular expression filtering. I also fixed all the tests so they all pass now, with the exception of test_message.py tests. These still doesn't work because of coordination issues between its smtpd-based reader and SMTPDirect, but... I have a plan (mwah, ha, ha! :) I also fixed a code update bug in Decorate.py
* find_member converted.bwarsaw2006-05-082-188/+4
|
* Convert add_members.bwarsaw2006-05-022-258/+4
|
* Convert list_ownersbwarsaw2006-05-022-123/+3
|
* Convert bin/inject and bin/version to Mailman.bin modules. Remove rb-archfix.bwarsaw2006-05-014-246/+5
|
* Convert change_pw and show_qfiles to Mailman.bin package. Note thatbwarsaw2006-05-013-308/+4
| | | | | after this commit, I have to fix the filename of Mailman/bin/show_qfiles because of silly svn restrictions.
* Copyright years should be spelled out fully.bwarsaw2006-04-301-1/+1
|
* Use re module to pick up filename. Thanks Mark!tkikuchi2006-04-301-3/+7
|
* Move list_lists and list_members over to Mailman.bin package and rewrite tobwarsaw2006-04-293-411/+3
| | | | | | | | | | | | | | | | | use $-strings and optparse. A side effect of the rewrite is that list_members -d and -n now require their argument, whereas before they were optional (but that is counter to command line parsing standards and not supported by optparse). Now, instead of bare -n use '-n any' and instead of bare -d use '-d any'. Fix ReopenableFileHandler.emit() to ensure that all lines end in a newline. In i18n.py, create and use a subclass of string.Template so that dotted attribute paths are legal in $-strings. So for example, if you have an object 'foo' in one of the namespaces and that has an attribute 'bar', you can say "$foo.bar" to print the value of foo.bar. Should reduce the number of extraneous local variables just to do the attribute path traversal.
* Move arch, mmsitepass, and unshunt to the Mailman.bin package and rewrite tobwarsaw2006-04-285-494/+6
| | | | | | | | | | use optparse. Update newlist and rmlist to get their version string entirely from mm_cfg.MAILMAN_VERSION instead of having to build that string up each time. Fix the symlink source in the Makefile.in. Remove b4b5-archfix entirely.
* The start of the conversion of the bin and cron scripts to modules invoked bybwarsaw2006-04-274-410/+60
| | | | | | | | | | | | | | an uber-shell (called mmshell for now for lack of a better name). The reason I'm doing this is because while I understand and still accept the reason for it, I really hate having to re-run configure (or config.status) every time I make a change to a bin script. mmshell looks at argv[0] to figure out which Mailman.bin module to run. Move newlist and rmlist to the new framework, but also, rewrite newlist to use optparse instead of getopt. Much nicer. Also convert it to use $variables for i18n even though the i18n._() function hasn't yet been updated to handle these (it will soon). rmlist hasn't yet been optparse-ified, but that's soon too. :)
* - Fixes to further remove the old Syslog from bin and cron scripts. Note thatbwarsaw2006-04-242-36/+32
| | | | | | | | | | | I didn't update cron/mailpasswds because that is going away. cron/disabled and cron/gate_news are only minimally tested. - Instead of using the RotatingFileHandler for our logs, use our own ReopenableFileHandler, which only minimally derives from FileHandler and implements a reopen() method. I think it's generally better to leave file rotation to external tools such as logrotate. - Remove some Python 2.1 compatibility stuff. - Ignore .mo files in messages/vi/LC_MESSAGES
* - Convert all logging to Python's standard logging module. Get rid of allbwarsaw2006-04-171-19/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | traces of our crufty old Syslog. Most of this work was purely mechanical, except for: 1) Initializing the loggers. For this, there's a new module Mailman/loginit.py (yes all modules from now on will use PEP 8 names). We can't call this 'logging.py' because that will interfere with importing the stdlib module of the same name (can you say Python 2.5 and absolute imports?). If you want to write log messages both to the log file and to stderr, pass True to loginit.initialize(). This will turn on propagation of log messages to the parent 'mailman' logger, which is set up to print to stderr. This is how bin/qrunner works when not running as a subprocess of mailmanctl. 2) The driver script. I had to untwist the StampedLogger stuff and implement differently printing exceptions and such to log/error because standard logging objects don't have a write() method. So we write to a cStringIO and then pass that to the logger. 3) SMTPDirect.py because of the configurability of the log messages. This required changing SafeDict into a dict subclass (which is better than using UserDicts anyway -- yay Python 2.3!). It's probably still possible to flummox things up if you change the name of the loggers in the SMTP_LOG_* variables in mm_cfg.py. However, the worst you can do is cause output to go to stderr and not go to a log file. Note too that all entry points into the Mailman system must call Mailman.loginit.initialize() or the log output will go to stderr (which may occasionally be what you want). Currently all CGIs and qrunners should be working properly. I wish I could have tested all code paths that touch the logger, but that's infeasible. I have tested this, but it's possible that there were some mistakes in the translation. - Mailman.Bouncers.BounceAPI.Stop is a singleton, but not a class instance any more. - True/False code cleanup, PEP 8 import restructuring, whitespace normalization, and copyright year updates, as appropriate.
* Now that Python 2.3 is the minimum requirement for Mailman 2.2:bwarsaw2006-04-151-8/+1
| | | | | | | | | | | - Remove True/False binding cruft - Remove __future__ statements for nested scopes - Remove ascii_letters import hack from Utils.py - Remove mimetypes.guess_all_extensions import hack from Scrubber.py - In Pending.py, set _missing to object() (better than using []) Also, update copyright years where appropriate, and re-order imports more to my PEP 8 tastes. Whitespace normalize.
* Now that we've converted from CVS to Subversion, remove CVS cruft frombwarsaw2006-04-151-2/+0
| | | | | the trunk. This serves also to test write permission to the svn repository, and tests email notifications.
* Fixed show_qfiles for case where queue entry contains an unparsed message.msapiro2006-03-091-1/+22
| | | | Bug 1444447.
* Set default umask for qrunners to 007.msapiro2006-02-051-4/+5
|
* Fixed bad escape '\0176' in re.msapiro2006-01-221-3/+4
|
* http://mail.python.org/pipermail/mailman-developers/2006-January/018548.htmltkikuchi2006-01-191-4/+12
| | | | | | Before we startup qrunners, we redirect the stderr to mailman syslog. We assume !AS_SUBPROC is running for debugging purpose and don't log errors in mailman logs/error but keep printing to stderr.
* templ2po.py normalization of '\r\n' to '\n'.tkikuchi2006-01-082-5/+9
| | | | | templ2pot.py ... associated change. templ2po.py ... bug fix.
* Port cleaning changes forward from 2.1-maint branch.bwarsaw2005-12-302-4/+5
|
* Whitespace normalization.bwarsaw2005-12-301-1/+4
|
* Added copyright notice and a few other style changes.bwarsaw2005-12-301-33/+63
|
* Fix bug in generating the last file.tkikuchi2005-12-061-3/+12
|
* Add helper script for extract pot from templates/en/* and generatetkikuchi2005-12-063-1/+161
| | | | templates/*/* files from messages/*/LC_MESSAGES/mailman.po.
* Arg checking too agressive - didn't allow 0 args with --fromall and --file=msapiro2005-12-021-4/+4
|
* Add mm_cfg.String in the i18n output, and copyright.tkikuchi2005-11-041-2/+2
|
* config_list i18n. Add PEP 263 charset and restructure output a bit.tkikuchi2005-11-011-15/+28
|
* back port from 2.1.6 / adding new files.tkikuchi2005-08-2812-120/+667
|
* FSF office has moved. chdcking in for MAIN branch.tkikuchi2005-08-2733-33/+33
|
* Disable bin/update on the head of cvs.bwarsaw2004-03-081-1/+3
|
* intermediatebwarsaw2003-08-291-0/+120
|