maildev@lists.thunderbird.net

Thunderbird email developers

View all threads

Downloading log files by command from try-comm-central by command

I
ISHIKAWA,chiaki
Fri, Mar 19, 2021 3:34 AM

Hi,

Is there a way to download log files of a job on try-comm-central,
specifically, say, the log of mochitest and xpcshell tests of linux64
opt build by command line typed from console?

Background:
I want to check some detailed runtime condition of a patch (see
https://bugzilla.mozilla.org/show_bug.cgi?id=617945
esp. comment 23
https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c23
(https://treeherder.mozilla.org/jobs?repo=try-comm-central&revision=8b5c84053a12524b0e2b0013f71823d9e70ebd0a
https://treeherder.mozilla.org/jobs?repo=try-comm-central&revision=8b5c84053a12524b0e2b0013f71823d9e70ebd0a
to create the data in comment 25 , I downloaded the logs manually by
clicking many times and dealing with download dialogs.
https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c25
)

Problem is that maybe in the last 24 months, try-comm-server has decided
to split the log from mochitest into 5 log files, and xpcshell tests
into 4 files. This adds to the manual interaction.

Over the weekend, I try to produce some patches to fix the issues
mentioned in
https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c18
and check the TRUE/FALSE of |if (mDatabase)| inthe code.
I expect to generate about a dozen  independent small patches and want
to monitor the
change of |if (mDatabase)| guard operation (TRUE/FALSE changes).

 Running tests on my PC locally is like 3 hours job or longer. A
dozen's such runs with each patch independently installed will consume
more than a full day on my PC and actually, including the compilation,
will not finish on the weekend. With try-comm-central build farm, I
believe I can. But then I hit upon the issue of  how I can download the
logs easily without mistakes.
I need the logfiles to create the statistics. (raw log files. Initially,
I downloaded unrelated HTML files by mistake. Duh.)

If I have to manually download the logs r of close to a dozen jobs or s
, downloading 9 log files per a job,  each download requiring 5 or more
mouse click operations and dialog to save the files under different
names,  that would be so error prone.
I shudder to think how many times I have to do that.

So an automated command from a console (from linux, or from windows)
would be ideal.

TIA

Chiaki

Hi, Is there a way to download log files of a job on try-comm-central, specifically, say, the log of mochitest and xpcshell tests of linux64 opt build by command line typed from console? Background: I want to check some detailed runtime condition of a patch (see https://bugzilla.mozilla.org/show_bug.cgi?id=617945 esp. comment 23 https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c23 (https://treeherder.mozilla.org/jobs?repo=try-comm-central&revision=8b5c84053a12524b0e2b0013f71823d9e70ebd0a <https://treeherder.mozilla.org/jobs?repo=try-comm-central&revision=8b5c84053a12524b0e2b0013f71823d9e70ebd0a> to create the data in comment 25 , I downloaded the logs manually by clicking many times and dealing with download dialogs. https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c25 ) Problem is that maybe in the last 24 months, try-comm-server has decided to split the log from mochitest into 5 log files, and xpcshell tests into 4 files. This adds to the manual interaction. Over the weekend, I try to produce some patches to fix the issues mentioned in https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c18 and check the TRUE/FALSE of |if (mDatabase)| inthe code. I expect to generate about a dozen  independent small patches and want to monitor the change of |if (mDatabase)| guard operation (TRUE/FALSE changes).  Running tests on my PC locally is like 3 hours job or longer. A dozen's such runs with each patch independently installed will consume more than a full day on my PC and actually, including the compilation, will not finish on the weekend. With try-comm-central build farm, I believe I can. But then I hit upon the issue of  how I can download the logs easily without mistakes. I need the logfiles to create the statistics. (raw log files. Initially, I downloaded unrelated HTML files by mistake. Duh.) If I have to manually download the logs r of close to a dozen jobs or s , downloading 9 log files per a job,  each download requiring 5 or more mouse click operations and dialog to save the files under different names,  that would be so error prone. I shudder to think how many times I have to do that. So an automated command from a console (from linux, or from windows) would be ideal. TIA Chiaki
RL
Rob Lemley
Fri, Mar 19, 2021 4:35 AM

It's possible, but there's some scripting to do...

You'll need to get the TaskIDs for the jobs you want the log files for.

In this case, that is "aulbc06s.......ugg".

Then construct a URL with it:

https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/${taskId}/runs/0/artifacts/public/logs/live_backing.log

That "0" is red because 99% of the time, you want run #0. If you've
rerun that particular job again for whatever reason, it increments.
Don't worry about it too much unless you rerun test jobs in Treeherder.
I am including the info for completeness' sake.

I don't recall exactly why or where this is broken, but wget does does
gunzip the data. Curl won't either. But "curl -L $URL | gunzip -c"
will print the log on your terminal. You can redirect to a file or
however from there. IIRC there is a way to get wget to decompress
properly with some archaic option, combined with -O <outputfile> that
would probably work as well.

Since you want fully automatic, you'll need to go to the Decsion task
in Treeherder. Using the same URL pattern, download "task-graph.json".
With some JSON reading tool (jq will do the job but the syntax is
🙀), iterate through the taskIDs and look for labels matching
"test-linux64/opt-mochitest*". Then you have your 5 taskIds.

There are some Taskcluster client APIs that help with this stuff, but
you still need to understand the data structure underneath it all and
it's just HTTP GETs and some JSON parsing.

Have fun!

-Rob

PS (everyone) - I am happy to help with little script tools or
additional CI jobs/tests like Firefox runs and such. In general, I
prefer that someone requests such things so I know it will be used. I
also don't always know what is needed! If there's something in
Treeherder/Taskcluster you'd like, ping me in Matrix or send me an
email. There might be a bug waiting for attention already and if not we
can create some. I get bored way too easily writing release notes all
the time! 😺

On 3/18/21 23:34, ISHIKAWA,chiaki wrote:

Hi,

Is there a way to download log files of a job on try-comm-central,
specifically, say, the log of mochitest and xpcshell tests of linux64
opt build by command line typed from console?

Background:
I want to check some detailed runtime condition of a patch (see
https://bugzilla.mozilla.org/show_bug.cgi?id=617945
esp. comment 23
https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c23
(https://treeherder.mozilla.org/jobs?repo=try-comm-central&revision=8b5c84053a12524b0e2b0013f71823d9e70ebd0a

https://treeherder.mozilla.org/jobs?repo=try-comm-central&revision=8b5c84053a12524b0e2b0013f71823d9e70ebd0a

to create the data in comment 25 , I downloaded the logs manually by
clicking many times and dealing with download dialogs.
https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c25
)

Problem is that maybe in the last 24 months, try-comm-server has
decided to split the log from mochitest into 5 log files, and xpcshell
tests into 4 files. This adds to the manual interaction.

Over the weekend, I try to produce some patches to fix the issues
mentioned in
https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c18
and check the TRUE/FALSE of |if (mDatabase)| inthe code.
I expect to generate about a dozen  independent small patches and
want to monitor the
change of |if (mDatabase)| guard operation (TRUE/FALSE changes).

 Running tests on my PC locally is like 3 hours job or longer. A
dozen's such runs with each patch independently installed will consume
more than a full day on my PC and actually, including the compilation,
will not finish on the weekend. With try-comm-central build farm, I
believe I can. But then I hit upon the issue of  how I can download
the logs easily without mistakes.
I need the logfiles to create the statistics. (raw log files.
Initially, I downloaded unrelated HTML files by mistake. Duh.)

If I have to manually download the logs r of close to a dozen jobs or
s , downloading 9 log files per a job,  each download requiring 5 or
more mouse click operations and dialog to save the files under
different names,  that would be so error prone.
I shudder to think how many times I have to do that.

So an automated command from a console (from linux, or from windows)
would be ideal.

TIA

Chiaki


Maildev mailing list -- maildev@lists.thunderbird.net
To unsubscribe send an email to maildev-leave@lists.thunderbird.net

--
Rob Lemley
Thunderbird Release Engineer
rob@thunderbird.net - :rjl
-- #thereisonlyxul --

It's possible, but there's some scripting to do... You'll need to get the TaskIDs for the jobs you want the log files for. In this case, that is "aulbc06s.......ugg". Then construct a URL with it: https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/${taskId}/runs/0/artifacts/public/logs/live_backing.log That "0" is red because 99% of the time, you want run #0. If you've rerun that particular job again for whatever reason, it increments. Don't worry about it too much unless you rerun test jobs in Treeherder. I am including the info for completeness' sake. I don't recall exactly why or where this is broken, but wget does does gunzip the data. Curl won't either. But "*curl -L $URL | gunzip -c*" will print the log on your terminal. You can redirect to a file or however from there. IIRC there is a way to get wget to decompress properly with some archaic option, combined with -O <outputfile> that would probably work as well. Since you want fully automatic, you'll need to go to the *Decsion* task in Treeherder. Using the same URL pattern, download "task-graph.json". With some JSON reading tool (*jq* will do the job but the syntax is 🙀), iterate through the taskIDs and look for labels matching "test-linux64/opt-mochitest*". Then you have your 5 taskIds. There are some Taskcluster client APIs that help with this stuff, but you still need to understand the data structure underneath it all and it's just HTTP GETs and some JSON parsing. Have fun! -Rob *PS (everyone) - I am happy to help with little script tools or additional CI jobs/tests like Firefox runs and such. In general, I prefer that someone requests such things so I know it will be used. I also don't always know what is needed! If there's something in Treeherder/Taskcluster you'd like, ping me in Matrix or send me an email. There might be a bug waiting for attention already and if not we can create some. I get bored way too easily writing release notes all the time! 😺* On 3/18/21 23:34, ISHIKAWA,chiaki wrote: > Hi, > > Is there a way to download log files of a job on try-comm-central, > specifically, say, the log of mochitest and xpcshell tests of linux64 > opt build by command line typed from console? > > Background: > I want to check some detailed runtime condition of a patch (see > https://bugzilla.mozilla.org/show_bug.cgi?id=617945 > esp. comment 23 > https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c23 > (https://treeherder.mozilla.org/jobs?repo=try-comm-central&revision=8b5c84053a12524b0e2b0013f71823d9e70ebd0a > > <https://treeherder.mozilla.org/jobs?repo=try-comm-central&revision=8b5c84053a12524b0e2b0013f71823d9e70ebd0a> > > to create the data in comment 25 , I downloaded the logs manually by > clicking many times and dealing with download dialogs. > https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c25 > ) > > Problem is that maybe in the last 24 months, try-comm-server has > decided to split the log from mochitest into 5 log files, and xpcshell > tests into 4 files. This adds to the manual interaction. > > Over the weekend, I try to produce some patches to fix the issues > mentioned in > https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c18 > and check the TRUE/FALSE of |if (mDatabase)| inthe code. > I expect to generate about a dozen  independent small patches and > want to monitor the > change of |if (mDatabase)| guard operation (TRUE/FALSE changes). > >  Running tests on my PC locally is like 3 hours job or longer. A > dozen's such runs with each patch independently installed will consume > more than a full day on my PC and actually, including the compilation, > will not finish on the weekend. With try-comm-central build farm, I > believe I can. But then I hit upon the issue of  how I can download > the logs easily without mistakes. > I need the logfiles to create the statistics. (raw log files. > Initially, I downloaded unrelated HTML files by mistake. Duh.) > > If I have to manually download the logs r of close to a dozen jobs or > s , downloading 9 log files per a job,  each download requiring 5 or > more mouse click operations and dialog to save the files under > different names,  that would be so error prone. > I shudder to think how many times I have to do that. > > So an automated command from a console (from linux, or from windows) > would be ideal. > > TIA > > Chiaki > _______________________________________________ > Maildev mailing list -- maildev@lists.thunderbird.net > To unsubscribe send an email to maildev-leave@lists.thunderbird.net -- *Rob Lemley* Thunderbird Release Engineer rob@thunderbird.net - :rjl -*- #thereisonlyxul -*-
I
ISHIKAWA,chiaki
Sun, Mar 21, 2021 4:52 AM

Dear Rob,

Thank you.

It is not quite intuitive that the log files for mochitest
have totally different (hashed?) name strings. But I will try to do with
the json file.

But there comes another question.
I have realized that mochitest log can be downloaded this manner for my
purpose,
but downloaded xpcshell tests logs do not have the necessary information
for me.
It is too terse. I should have realized this when I wrote  the original
e-mail on Friday.

Question: Does any know how to run TB xpcshell tests basically with the
following additional options to |mach|  on try-com-central tryserver?

--verbose --sequential

--verbose is to take a look at the debug output. This is necessary to
take a look at the
asan or valgrind  diagnostics. Without this option, xpcshell test
framework does not print out
anything (even errors leading to fatal error). Only the result of test
is printed.
I believe FF asan (or valgrind) jobs are available.  But I have no idea
how to do that on try-comm-central.

--sequential is to disable the parallel execution of the tests so that
the outputs from different test processes won't get interspersed. It is
essential to parse the error/warning messages sanely.

I suspect both --verbose and --sequential are enabled for FF asan or
valgrind jobs on mozilla build/test farm, but I have no idea how to use
that on try-comm-central.

Locally, I have checked the detailed log files of xpcshell tests and
found a few
uninitialized  memory issues so far.

Again, although running xpcshell test is much shorter than running
mochitest locally, but
I cannot test patches at all during xpcshell test time since my local
setup basically replaces the running binary with the newly created
patched TB if I recompile TB with a new set of patches (I only specify a
single MOZOBJ.: I suppose all do.)
So I prefer to check the series of patches I am contemplating.

I have created a patch for saving/restoring mDatabase surrounding the
invocation of UpdateNewMessages()  for now, but
then I realized I could obtain the desired detailed info from
tree-comm-central, but not for xpcshell test. Oh well. Trying to run one
locally for now.
But this is time consuming. (I plan to produce many about 10 other
patches...)

TIA

Chiaki

On 2021/03/19 13:35, Rob Lemley wrote:

It's possible, but there's some scripting to do...

You'll need to get the TaskIDs for the jobs you want the log files for.

In this case, that is "aulbc06s.......ugg".

Then construct a URL with it:

https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/${taskId}/runs/0/artifacts/public/logs/live_backing.log

That "0" is red because 99% of the time, you want run #0. If you've
rerun that particular job again for whatever reason, it increments.
Don't worry about it too much unless you rerun test jobs in
Treeherder. I am including the info for completeness' sake.

I don't recall exactly why or where this is broken, but wget does does
gunzip the data. Curl won't either. But "curl -L $URL | gunzip -c"
will print the log on your terminal. You can redirect to a file or
however from there. IIRC there is a way to get wget to decompress
properly with some archaic option, combined with -O <outputfile> that
would probably work as well.

Since you want fully automatic, you'll need to go to the Decsion
task in Treeherder. Using the same URL pattern, download
"task-graph.json". With some JSON reading tool (jq will do the job
but the syntax is 🙀), iterate through the taskIDs and look for labels
matching "test-linux64/opt-mochitest*". Then you have your 5 taskIds.

There are some Taskcluster client APIs that help with this stuff, but
you still need to understand the data structure underneath it all and
it's just HTTP GETs and some JSON parsing.

Have fun!

-Rob

PS (everyone) - I am happy to help with little script tools or
additional CI jobs/tests like Firefox runs and such. In general, I
prefer that someone requests such things so I know it will be used. I
also don't always know what is needed! If there's something in
Treeherder/Taskcluster you'd like, ping me in Matrix or send me an
email. There might be a bug waiting for attention already and if not
we can create some. I get bored way too easily writing release notes
all the time! 😺

On 3/18/21 23:34, ISHIKAWA,chiaki wrote:

Hi,

Is there a way to download log files of a job on try-comm-central,
specifically, say, the log of mochitest and xpcshell tests of linux64
opt build by command line typed from console?

Background:
I want to check some detailed runtime condition of a patch (see
https://bugzilla.mozilla.org/show_bug.cgi?id=617945
esp. comment 23
https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c23
(https://treeherder.mozilla.org/jobs?repo=try-comm-central&revision=8b5c84053a12524b0e2b0013f71823d9e70ebd0a

https://treeherder.mozilla.org/jobs?repo=try-comm-central&revision=8b5c84053a12524b0e2b0013f71823d9e70ebd0a

to create the data in comment 25 , I downloaded the logs manually by
clicking many times and dealing with download dialogs.
https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c25
)

Problem is that maybe in the last 24 months, try-comm-server has
decided to split the log from mochitest into 5 log files, and
xpcshell tests into 4 files. This adds to the manual interaction.

Over the weekend, I try to produce some patches to fix the issues
mentioned in
https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c18
and check the TRUE/FALSE of |if (mDatabase)| inthe code.
I expect to generate about a dozen  independent small patches and
want to monitor the
change of |if (mDatabase)| guard operation (TRUE/FALSE changes).

 Running tests on my PC locally is like 3 hours job or longer. A
dozen's such runs with each patch independently installed will
consume more than a full day on my PC and actually, including the
compilation, will not finish on the weekend. With try-comm-central
build farm, I believe I can. But then I hit upon the issue of  how I
can download the logs easily without mistakes.
I need the logfiles to create the statistics. (raw log files.
Initially, I downloaded unrelated HTML files by mistake. Duh.)

If I have to manually download the logs r of close to a dozen jobs or
s , downloading 9 log files per a job,  each download requiring 5 or
more mouse click operations and dialog to save the files under
different names,  that would be so error prone.
I shudder to think how many times I have to do that.

So an automated command from a console (from linux, or from windows)
would be ideal.

TIA

Chiaki


Maildev mailing list -- maildev@lists.thunderbird.net
To unsubscribe send an email to maildev-leave@lists.thunderbird.net

--
Rob Lemley
Thunderbird Release Engineer
rob@thunderbird.net - :rjl
-- #thereisonlyxul --

Dear Rob, Thank you. It is not quite intuitive that the log files for mochitest have totally different (hashed?) name strings. But I will try to do with the json file. But there comes another question. I have realized that mochitest log can be downloaded this manner for my purpose, but downloaded xpcshell tests logs do not have the necessary information for me. It is too terse. I should have realized this when I wrote  the original e-mail on Friday. Question: Does any know how to run TB xpcshell tests basically with the following additional options to |mach|  on try-com-central tryserver? --verbose --sequential --verbose is to take a look at the debug output. This is necessary to take a look at the asan or valgrind  diagnostics. Without this option, xpcshell test framework does not print out anything (even errors leading to fatal error). Only the result of test is printed. I believe FF asan (or valgrind) jobs are available.  But I have no idea how to do that on try-comm-central. --sequential is to disable the parallel execution of the tests so that the outputs from different test processes won't get interspersed. It is essential to parse the error/warning messages sanely. I suspect both --verbose and --sequential are enabled for FF asan or valgrind jobs on mozilla build/test farm, but I have no idea how to use that on try-comm-central. Locally, I have checked the detailed log files of xpcshell tests and found a few uninitialized  memory issues so far. Again, although running xpcshell test is much shorter than running mochitest locally, but I cannot test patches at all during xpcshell test time since my local setup basically replaces the running binary with the newly created patched TB if I recompile TB with a new set of patches (I only specify a single MOZOBJ.: I suppose all do.) So I prefer to check the series of patches I am contemplating. I have created a patch for saving/restoring mDatabase surrounding the invocation of UpdateNewMessages()  for now, but then I realized I could obtain the desired detailed info from tree-comm-central, but not for xpcshell test. Oh well. Trying to run one locally for now. But this is time consuming. (I plan to produce many about 10 other patches...) TIA Chiaki On 2021/03/19 13:35, Rob Lemley wrote: > It's possible, but there's some scripting to do... > > You'll need to get the TaskIDs for the jobs you want the log files for. > > > In this case, that is "aulbc06s.......ugg". > > Then construct a URL with it: > > https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/${taskId}/runs/0/artifacts/public/logs/live_backing.log > > That "0" is red because 99% of the time, you want run #0. If you've > rerun that particular job again for whatever reason, it increments. > Don't worry about it too much unless you rerun test jobs in > Treeherder. I am including the info for completeness' sake. > > I don't recall exactly why or where this is broken, but wget does does > gunzip the data. Curl won't either. But "*curl -L $URL | gunzip -c*" > will print the log on your terminal. You can redirect to a file or > however from there. IIRC there is a way to get wget to decompress > properly with some archaic option, combined with -O <outputfile> that > would probably work as well. > > Since you want fully automatic, you'll need to go to the *Decsion* > task in Treeherder. Using the same URL pattern, download > "task-graph.json". With some JSON reading tool (*jq* will do the job > but the syntax is 🙀), iterate through the taskIDs and look for labels > matching "test-linux64/opt-mochitest*". Then you have your 5 taskIds. > > > > There are some Taskcluster client APIs that help with this stuff, but > you still need to understand the data structure underneath it all and > it's just HTTP GETs and some JSON parsing. > > Have fun! > > -Rob > > *PS (everyone) - I am happy to help with little script tools or > additional CI jobs/tests like Firefox runs and such. In general, I > prefer that someone requests such things so I know it will be used. I > also don't always know what is needed! If there's something in > Treeherder/Taskcluster you'd like, ping me in Matrix or send me an > email. There might be a bug waiting for attention already and if not > we can create some. I get bored way too easily writing release notes > all the time! 😺* > > On 3/18/21 23:34, ISHIKAWA,chiaki wrote: >> Hi, >> >> Is there a way to download log files of a job on try-comm-central, >> specifically, say, the log of mochitest and xpcshell tests of linux64 >> opt build by command line typed from console? >> >> Background: >> I want to check some detailed runtime condition of a patch (see >> https://bugzilla.mozilla.org/show_bug.cgi?id=617945 >> esp. comment 23 >> https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c23 >> (https://treeherder.mozilla.org/jobs?repo=try-comm-central&revision=8b5c84053a12524b0e2b0013f71823d9e70ebd0a >> >> <https://treeherder.mozilla.org/jobs?repo=try-comm-central&revision=8b5c84053a12524b0e2b0013f71823d9e70ebd0a> >> >> to create the data in comment 25 , I downloaded the logs manually by >> clicking many times and dealing with download dialogs. >> https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c25 >> ) >> >> Problem is that maybe in the last 24 months, try-comm-server has >> decided to split the log from mochitest into 5 log files, and >> xpcshell tests into 4 files. This adds to the manual interaction. >> >> Over the weekend, I try to produce some patches to fix the issues >> mentioned in >> https://bugzilla.mozilla.org/show_bug.cgi?id=617945#c18 >> and check the TRUE/FALSE of |if (mDatabase)| inthe code. >> I expect to generate about a dozen  independent small patches and >> want to monitor the >> change of |if (mDatabase)| guard operation (TRUE/FALSE changes). >> >>  Running tests on my PC locally is like 3 hours job or longer. A >> dozen's such runs with each patch independently installed will >> consume more than a full day on my PC and actually, including the >> compilation, will not finish on the weekend. With try-comm-central >> build farm, I believe I can. But then I hit upon the issue of  how I >> can download the logs easily without mistakes. >> I need the logfiles to create the statistics. (raw log files. >> Initially, I downloaded unrelated HTML files by mistake. Duh.) >> >> If I have to manually download the logs r of close to a dozen jobs or >> s , downloading 9 log files per a job,  each download requiring 5 or >> more mouse click operations and dialog to save the files under >> different names,  that would be so error prone. >> I shudder to think how many times I have to do that. >> >> So an automated command from a console (from linux, or from windows) >> would be ideal. >> >> TIA >> >> Chiaki >> _______________________________________________ >> Maildev mailing list -- maildev@lists.thunderbird.net >> To unsubscribe send an email to maildev-leave@lists.thunderbird.net > > -- > *Rob Lemley* > Thunderbird Release Engineer > rob@thunderbird.net - :rjl > -*- #thereisonlyxul -*-