| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
| |
written by Ben Gertzfield, ported to MM2.1 by Marc MERLIN.
Specifically,
Instead of using LIST_DATA_DIR directly, instantiate a MailList object
and use its fullpath() method.
|
| |
|
|
| |
converted to the Site module abstractions.
|
| | |
|
| |
|
|
|
|
| |
Don't use PUBLIC_ARCHIVE_FILE_DIR and PRIVATE_ARCHIVE_FILE_DIR
directly, use the archive_dir() method or the Site module methods
instead.
|
| |
|
|
|
| |
Utils.list_exists(), Utils.list_names(): Don't use LIST_DATA_DIR
directly, instead use Site.get_listpath() and Site.get_listnames().
|
| |
|
|
|
|
|
| |
- use fullpath() instead of _full_path directly
- Don't os.path.join() up the list path, instead use
Site.get_listpath()
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
Translators: please update your templates.
|
| |
|
|
| |
Translators: please update your templates.
|
| |
|
|
|
|
|
|
|
|
|
| |
written by Ben Gertzfield, ported to MM2.1 by Marc MERLIN.
Specifically,
process(): Add the X-Mailman-Copy: header if we're personalizing
messages and this recipient has decided to not to filter out dups. As
far as the public is concerned, "copies" are good, "duplicates" are
bad. :)
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
written by Ben Gertzfield, ported to MM2.1 by Marc MERLIN.
Specifically,
This module handles filtering out duplicates for explicit recipients.
Rewritten by Barry to remove the dup filtering on cross posted
messages (Ben may re-port those changes separately).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
written by Ben Gertzfield, ported to MM2.1 by Marc MERLIN.
(Note: this patch was rewritten by Barry; parts of it was originally
in GUIBase, but that wasn't the right place for it.)
Specifically,
GetConfigInfo(): Add support for the new_member_options attribute,
which is a checkbox that the list owner can use to select the initial
values for the member options fields.
_setValue(): Handle setting the new_member_options attribute by
converting it from a list of option names to a bitfield.
|
| |
|
|
|
|
|
|
|
| |
written by Ben Gertzfield, ported to MM2.1 by Marc MERLIN.
Specifically,
main(), options_page(), global_options(): Added support for the
nodupes option, including setting nodupes globally.
|
| |
|
|
|
|
|
|
|
|
| |
written by Ben Gertzfield, ported to MM2.1 by Marc MERLIN.
Specifically,
OPTCOLUMNS: Let's parameterize this.
membership_options(): Add a column for the nodupes field.
|
| |
|
|
|
|
|
|
| |
written by Ben Gertzfield, ported to MM2.1 by Marc MERLIN.
Specifically,
NewVars(): Pick up the new_member_options attribute.
|
| |
|
|
|
|
|
|
| |
written by Ben Gertzfield, ported to MM2.1 by Marc MERLIN.
Specifically,
DATA_FILE_VERSION: Bump to pick up the new_member_options attribute.
|
| |
|
|
|
|
|
|
|
| |
written by Ben Gertzfield, ported to MM2.1 by Marc MERLIN.
Specifically,
addNewMember(): Set the member's initial user_options to the list's
new_member_options value (if it's non-zero).
|
| |
|
|
|
|
|
|
|
|
| |
written by Ben Gertzfield, ported to MM2.1 by Marc MERLIN.
Specifically,
InitVars(): Add the new_member_options attribute.
(Also, untabbification)
|
| |
|
|
|
|
|
|
|
|
| |
written by Ben Gertzfield, ported to MM2.1 by Marc MERLIN.
Specifically,
NODUPES: Description of the nodupes option.
option_desc, option_info, options: Add nodupes.
|
| |
|
|
|
| |
X-Mailman-Approved-At: and remove the address of the approver (it's
always going to be some alias for the list's moderators or admins).
|
| |
|
|
|
|
|
|
|
|
|
| |
written by Ben Gertzfield, ported to MM2.1 by Marc MERLIN.
Specifically,
FormatOptionButton(): Add DontReceiveDuplicates to the list of
options names.
(Also, untabbification)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
written by Ben Gertzfield, ported to MM2.1 by Marc MERLIN.
Specifically,
GLOBAL_PIPELINE: Add the AvoidDuplicates handler module.
DEFAULT_NEW_MEMBER_OPTIONS: The default value as a bitfield for the
new "new_member_options" attribute, which specifies the intial values
for various member-specific option flags.
DontReceiveDuplicates: Flag for control of the duplicate suppression
feature.
|
| |
|
|
|
| |
from the subscription confirmation form. The potential for mischief
seems high.
|
| |
|
|
|
|
|
|
| |
extraction of the process() method into the constructor. I don't
think it's too much of a burden to have to restart the OutgoingRunner
if you want to change the DELIVERY_MODULE (and I suspect it won't
change that much anyway). This also seems to help control memory
growth in the OutgoingRunner.
|
| | |
|
| |
|
|
|
|
|
| |
specializing the queue directory, make QDIR a class attribute and have
Runner's ctor use that instead of an __init__() argument. This lets
us get rid of most of the __init__()'s in the derived classes.
(OutgoingRunner still needs one though.)
|
| |
|
|
| |
No problem guy! :)
|
| |
|
|
| |
has agreed to let us distribute them.
|
| |
|
|
| |
for Python!
|
| |
|
|
|
|
|
| |
users to think they'll get only one digest per day. On busy lists,
it's possible to get more than one digest per day.
Sorry translators! This means I'll need updates to options.html.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
being able to free cycles containing MailList objects (see the gc
module's documentation under the gc.garbage attribute for details).
AFAICT, this has no effect on operations currently, because I believe
we are pretty rigorous about unlocking MailList objects explicitly.
This has a dramatic effect on memory leakage too, since there were/are
cycles containing these fairly heavyweight objects that previously,
the garbage collector couldn't free.
We'll need to watch carefully for stale locks being left around,
because I believe the MailList objects were at least being finalized
during process shutdown, but maybe not, and it's a very dubious
practice to be depending on anyway.
Note: this doesn't completely eliminate the unbounded memory growth,
although this in conjunction with shutting off the archiver appears to
improve the steady state of memory usage (and perhaps not
coincidentally greatly improves performance).
|
| |
|
|
|
|
|
| |
__dispatch table in the constructor, as this creates some circular
references that are unnecessary most of the time. Only when
ParseMailCommands() is run and the dispatch table is empty do we
create the table. This should only happen in the CommandRunner.
|
| | |
|
| |
|
|
| |
MailList object instead of instantiating one explicitly.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
the admin message in other checkins; specifically, we use set_type()
to set the Content-Type:
|
| |
|
|
|
| |
up the admin message in __sendAdminBounceNotice(); specifically, we
use set_type() to set the Content-Type:
|
| | |
|
| | |
|