Fixing a Bug
Tutorial on how to fix a bug from beginning to end.
Last updated
Was this helpful?
Tutorial on how to fix a bug from beginning to end.
Last updated
Was this helpful?
All the issues, bugs, work in progress patches, or updates related to Thunderbird, are listed on , and are properly organized per Product, Component, and Status.
Creating an account is necessary in order to submit patches, leave comments, and interact with any other aspect of Bugzilla. If you're currently using a username in one of our Matrix chat rooms (e.g. ), we recommend saving your profile name with the current format Firstname Lastname (:username)
in order to be easily searchable and allow the Thunderbird team to offer better support.
Use the section to find bugs you want to take care of, and be sure that the bug doesn't currently have any user listed as Assignee and the Status is set to NEW
.
Making sense of the Thunderbird source code, and knowing where to look, will take some time. The code base is pretty big and if you never worked with XBL
or Custom Elements
it can be overwhelming at first. We recommend using our code search engine, , to inspect the source code and find snippets and references to help you out while investigating a bug.
JavaScript code can be debugged using the built-in . Debugging core C++ code requires .
To ensure your work is correctly attributed to you, and to make the reviewer's task easier, these options should be set in your Mercurial configuration file (Mecurial.ini
on Windows, $HOME/.hgrc
elsewhere).
Using standard forms for commit messages not only looks better when looking at the revision logs, it also helps various automation tools parse the messages.
Commit messages should be of the form:
For follow-up commits that fix a problem with a lint test or other failure, the suggested form is:
When fixing a bug caused by a change made to mozilla-central, often referred to as "porting" a fix to Thunderbird, mention the upstream bug in the commit message like below. Doing so helps identify bugs that need uplifting to beta or release when the ported mozilla-central bug is uplifted.
Prefixing the first line of the commit message with "WIP:
" marks the patch as a work-in-progress. moz-phab
(see below) will pick that up and mark it as "Changes Planned".
All changes need to be reviewed before acceptance into the codebase. It can be pretty tricky to figure out who to ask for a review.
There is a command line tool, moz-phab
, which makes it easy to submit local changesets as patches.
With moz-phab
you can submit local mercurial changeset(s) like this:
The start/end changesets are optional. If omitted, moz-phab
will guess which one(s) you mean.
It'll ask for confirmation before uploading, so don't worry too much about accidental submissions.
moz-phab
will pick the bug number out of the commit message (Bug xxxx
), and link back to the bugzilla bug. If there is a reviewer (r=...
), it will automatically assign them and send them a notification. You can leave the reviewer out, but then one will have to be manually assigned via the phabricator web page. If the commit message starts with "WIP:
", the patch will be marked "Changes Planned".
It's very common for patches to require some updates before being accepted. Locally, you can use hg commit --amend
to update a changeset.
Phabricator tracks uploaded patches by adding a line to the commit message:
When you submit the patch again with moz-phab
, it will see that line and realise that you're updating an existing revision rather than creating a brand new one.
If you're juggling and merging local changesets with hg histedit
, make sure you preserve the Differential Revision:
line in the commit message for any patches you're planning to resubmit!
Mercurial is pretty flexible in terms of allowing writing your own code and keeping it separate from the main code base. See for more information.
Thunderbird code is divided into modules, each with an owner and peers. Generally, these are the best people to review your changes. Here's . and modules have separate lists.
Scanning through the recent commits in mercurial should also give you an idea of who is active in various areas of the code. Failing that you can always .
The way to submit a patch is via .
See the docs.
You can find more details in the moz-phab
.