![]()
From: Jose Kahan (jose.kahan@w3.org)
Date: Thu Jun 05 2003 - 09:56:05 CDT
Problem description
--------------------
I noticed that in the latest hypermail, the messages in an archive
don't start with the same message number, depending on which
option you use. Starting with a brand new archive:
hypermail -d dirname -u -m /path/to/mailbox
starts messages at number one (0001.html).
However if I invoke it as:
hypermail -d dirname -m /path/to/mailbox
starts messages with number zero (0000.html).
This is a big problem, because it breaks down the archives. For example,
I'm using the -u option to to add new messages to the archive as they
arrive to the mailing list, on the fly.
However, if I want to rebuild the archives and use the second option,
all my messages will skip by one.
Source of the problem
---------------------
It happens in hypermail.c:593:
-------------
/*
* Let's do it.
*/
if (set_uselock)
lock_archive(set_dir);
if (set_increment) {
int num_displayable;
if (set_linkquotes)
replylist = NULL;
num_displayable = loadoldheaders(set_dir);
amount_old = max_msgnum + 1; /* counts gaps as messages */
/* start numbering at this number */
amount_new = num_displayable + parsemail(set_mbox,
use_stdin, set_readone, set_increment, set_dir, set_inlinehtml,
amount_old);
-----------------
max_msgnum gets incremented when calling loadoldheaders. However,
it's initial value is 0. So, when doing the:
mount_old = max_msgnum + 1; /* counts gaps as messages */
we automatically get one message skip if the archive was initially
empty.. If we initialize max_msgnum to -1 before invoking loadoldheaders,
then we don't have the skip anymore. And if there are any previous
messages, max_msgnum gets updated correctly.
This problem doesn't happen when not using the -u option.
Proposed patches
--------------
1. Fix the problem.
if (set_increment) {
int num_displayable;
if (set_linkquotes)
replylist = NULL;
max_msgnum = -1;
^^^ just initialize it before calling loadoldheaders.
2. Add a backwards compatibility option, so that people who need to
rebuild their archives can precise if they want them to start with 1 or
0.
Something like:
start_num_is_0
And initialize max_msgnum accordingly (another patch is required when
not using -u, to change max_msgnum accordingly. I tested it and it works
ok too.)
---- Any comments? In all cases, this is an awkward bug. -jose
![]()