<feed xmlns='http://www.w3.org/2005/Atom'>
<title>mailman.git/scripts, branch master</title>
<subtitle>The GNU Mailing List manager.
</subtitle>
<id>https://git.neuromancer.sk/mailman.git/atom?h=master</id>
<link rel='self' href='https://git.neuromancer.sk/mailman.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/'/>
<updated>2009-11-29T17:47:12Z</updated>
<entry>
<title>Clean up the manifest so that the sdist runs and passes all the tests.</title>
<updated>2009-11-29T17:47:12Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2009-11-29T17:47:12Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=bf6073e9aed5536565f0b822b7b0b901b13bde67'/>
<id>urn:sha1:bf6073e9aed5536565f0b822b7b0b901b13bde67</id>
<content type='text'>
</content>
</entry>
<entry>
<title>The start of a setuptools conversion.  All the Makefile.in and autoconf</title>
<updated>2007-07-13T04:19:10Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2007-07-13T04:19:10Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=288ae405b09baa443eb1b39422c48c315fbb2e5a'/>
<id>urn:sha1:288ae405b09baa443eb1b39422c48c315fbb2e5a</id>
<content type='text'>
artifacts are removed, as is the C files which we will no longer need.
</content>
</entry>
<entry>
<title>Update copyright years.</title>
<updated>2007-01-19T04:38:06Z</updated>
<author>
<name>bwarsaw</name>
</author>
<published>2007-01-19T04:38:06Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=25f7d0630bfc73b3fd5c41a584d8eb3a8554f45d'/>
<id>urn:sha1:25f7d0630bfc73b3fd5c41a584d8eb3a8554f45d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Merged revisions 8113-8121 via svnmerge from </title>
<updated>2006-12-29T22:20:25Z</updated>
<author>
<name>bwarsaw</name>
</author>
<published>2006-12-29T22:20:25Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=f4a456a83b630feb294724ab462c87ca1ce1c3ae'/>
<id>urn:sha1:f4a456a83b630feb294724ab462c87ca1ce1c3ae</id>
<content type='text'>
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() -&gt; 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.
................
</content>
</entry>
<entry>
<title>As Mark discovered, we need to load the configuration in the driver script for</title>
<updated>2006-09-24T20:43:56Z</updated>
<author>
<name>bwarsaw</name>
</author>
<published>2006-09-24T20:43:56Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=99a4f0ef16e6dfddafbd396896afb97821528f16'/>
<id>urn:sha1:99a4f0ef16e6dfddafbd396896afb97821528f16</id>
<content type='text'>
the web u/i to work.  This also fixes the use of Utils.list_names() in the
list and admin overviews.  This API now returns a set, but the CGIs want to
sort them, so we need to turn them back into lists.

This change also elaborates an exception so that the list name is reported.
</content>
</entry>
<entry>
<title>Set package name and version number in AC_INIT macro in configure.in.  Also,</title>
<updated>2006-05-15T02:25:21Z</updated>
<author>
<name>bwarsaw</name>
</author>
<published>2006-05-15T02:25:21Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=788d35ff6c31e96069e157a09163bb3faa0914a4'/>
<id>urn:sha1:788d35ff6c31e96069e157a09163bb3faa0914a4</id>
<content type='text'>
require Python to be at least 2.3.0

Convert all scripts/* scripts (except driver) to use the
symlink-to-bin/mmshell trick.

For now (since we're debugging more often than releasing), set STEALTH_MODE to
False in scripts/driver.  We need to remember to turn this back to True when
we start getting closer to releases!

In the various scripts, er, Mailman/bin scripts, convert them to $-strings for
i18n substitution, and clean up imports.  Also, get rid of the crufty Emacs
-*- line, which is no longer needed now that the files end in .py.

Get rid of lots of unnecessary svn:executable properties.

Remove an unnecessary import from Mailman/bin/disabled.py
</content>
</entry>
<entry>
<title>- fixed misspelling of propagate in loginit.initialize call in cron/disabled.</title>
<updated>2006-05-09T18:46:45Z</updated>
<author>
<name>msapiro</name>
</author>
<published>2006-05-09T18:46:45Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=a85372821451461a59dff62886438cebaea56b12'/>
<id>urn:sha1:a85372821451461a59dff62886438cebaea56b12</id>
<content type='text'>
  (should the cron scripts propagate log messages to stderr?)

- updated scripts/* scripts to use new logging rather than stderr writes.</content>
</entry>
<entry>
<title>More logging updates:</title>
<updated>2006-04-28T12:24:15Z</updated>
<author>
<name>bwarsaw</name>
</author>
<published>2006-04-28T12:24:15Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=eeacb00f385181ad546f5e408b13059ac3b25d0e'/>
<id>urn:sha1:eeacb00f385181ad546f5e408b13059ac3b25d0e</id>
<content type='text'>
- Remove the LogStdErr() calls from all the scripts/* scripts.
- Convert the LockFile.py code to use the logging logs.  Also do general code
  cleanup in this module.  Note that the 'withlogging' argument to __init__()
  has been removed, as we can use logging's mechanisms to control how much of
  LockFile will get logged (by default, not much).
- Add the 'mailman.locks' logger to loginit.py
- Remove Mailman/Handlers/Sendmail.py once and for all
- Remove LIST_LOCK_DEBUGGING from Defaults.py.in
</content>
</entry>
<entry>
<title>- Convert all logging to Python's standard logging module.  Get rid of all</title>
<updated>2006-04-17T04:08:17Z</updated>
<author>
<name>bwarsaw</name>
</author>
<published>2006-04-17T04:08:17Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=0ed815a216c7bb6f820cfdf99fc8d31bcfd19fc0'/>
<id>urn:sha1:0ed815a216c7bb6f820cfdf99fc8d31bcfd19fc0</id>
<content type='text'>
  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.

</content>
</entry>
<entry>
<title>Now that we've converted from CVS to Subversion, remove CVS cruft from</title>
<updated>2006-04-15T18:43:58Z</updated>
<author>
<name>bwarsaw</name>
</author>
<published>2006-04-15T18:43:58Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=a0cdfaef2596d08d1abbfc3704efe4ceb72991f0'/>
<id>urn:sha1:a0cdfaef2596d08d1abbfc3704efe4ceb72991f0</id>
<content type='text'>
the trunk.  This serves also to test write permission to the svn
repository, and tests email notifications.
</content>
</entry>
</feed>
