pipermail
it's in perl
(no, mhonarc doesn't count - the guts are funky)
it does Template Toolkit
it's name is Jose
(or lists have to come in threes)
It too has a stack of dependencies
my $build = Siesta::Build->new(
module_name => "Mariachi",
dynamic_config => 1,
license => 'perl',
script_files => [ 'mariachi' ],
requires => {
'AppConfig' => '1.55',
'Email::Folder' => '0.5',
'Module::Build' => '0.18',
'Mail::Thread' => '2.2',
'Mail::Thread::Chronological' => '1.22',
'Email::Thread' => 0,
'Template' => 0,
'Template::Plugin::Page' => 0,
'Date::Parse' => 0,
'Class::Accessor' => 0,
'Email::Find' => 0,
'Memoize' => 0,
'URI::Find::Schemeless::Stricter' => 0,
'Test::More' => 0,
'Storable' => 0,
'Time::HiRes' => 0,
'File::Find::Rule' => 0,
'File::Path' => 0,
'File::Copy' => 0,
'File::Basename' => 0,
},
sign => 1,
create_makefile_pl => 'passthrough',
);
CPANPLUS is still your friend
% cpanp --prereqs i Mariachi
time passes
% time mariachi -i threadtest -o london.pm --name london.pm reticulating splines 0.000 elapsed 0.000 total load 37 0.434 elapsed 0.434 total dropped 0 duplicate messages dedupe 0.007 elapsed 0.441 total thread 0.042 elapsed 0.483 total sanity 0.010 elapsed 0.493 total order 0.010 elapsed 0.503 total sanity 0.008 elapsed 0.511 total copy files 0.110 elapsed 0.621 total tt init 0.078 elapsed 0.699 total lurker output 0.998 elapsed 1.697 total strand 0.009 elapsed 1.705 total splicing threads in 1 places deep threads split up 0.010 elapsed 1.716 total sanity 0.008 elapsed 1.724 total order 0.011 elapsed 1.734 total regular thread indexes 0.270 elapsed 2.004 total date indexes 0.263 elapsed 2.267 total messages 1.928 elapsed 4.195 total
You'll have a london.pm folder, not unlike this one
Pulls all the messages from the source folder.
Email::Folder buys us some flexibility here - we didn't have to do any special handling for mboxes as opposed to maildirs.
Drop things with duplicate message-ids. This is because some mboxes are dirty (and Mail::Thread will choke else)
Call out to Mail::Thread, which implements jwz's message threading algorithm.
Check every message that we had after discarding is reachable via the thread tree. We do that a few times just to be sure.
Sort the threads datewise
Traditional Lurker a a--+ |- b | b--+ | |- c e | | | `- d c | `- e d
Date order: a b e c d
Wander the tree setting up the prev and next relations of the messages.
Folds over-deep thread cascades
a *
`-b |-a
`-c | `-b
`-d | `-c
`-e `-d
`-e
If we declare point d to be too deep we transform the tree.
Output generation.
Speedups.
In adding features we've been consistently getting slower.
comparative benchmarks
Write some documentation on how to install with your existing mailman system