Firefox 贡献者快速参考¶
此过程的某些部分,包括克隆和编译,即使在现代硬件上也可能需要很长时间。如果在任何时候遇到问题,请随时在 https://chat.mozilla.org 的 #introduction 频道中提问。
请随时查看 设置参与 Firefox 代码库的工作 以获取更详细的教程。
开始前¶
请注册并为以下平台创建您的帐户:
Bugzilla:基于 Web 的通用错误跟踪系统。要注册 Phabricator,请确保在 Bugzilla 中启用双因素身份验证(我的资料 >> 编辑资料和偏好设置 >> 双因素身份验证)。
Phabricator:基于 Web 的软件开发协作工具,主要用于代码审查。请获取 API 令牌(设置 >> Conduit API 令牌)
Windows 依赖项¶
您需要 支持的 Windows 版本。
下载 MozillaBuild 软件包。 安装目录应为
$ c:\mozilla-build\
在继续下一步之前,请确保已满足 Windows 先决条件
注意
本教程中的所有命令都必须在 MozillaBuild 软件包提供的 shell 中运行(start-shell.bat)
引导 Firefox 源代码副本¶
您可以下载源代码,并让 Firefox 自动下载并安装其需要的其他依赖项。以下命令根据您的操作系统,将下载大量数据(Firefox 历史记录的数年!)然后引导您完成交互式设置过程。
下载可能需要 40 分钟到两个小时(取决于您的连接),并且存储库的大小应小于 5GB(构建后约 20GB)。
**建议使用默认选项。**如果您不打算编写 C++ 或 Rust 代码,请选择 工件模式,并在引导程序末尾按照说明创建 mozconfig 文件。
在 Windows 上设置 Firefox¶
$ cd c:/
$ mkdir mozilla-source
$ cd mozilla-source
$ wget https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py
# To use Git as your VCS
$ python3 bootstrap.py --vcs=git
# To use Mercurial as your VCS
$ python3 bootstrap.py
有关 为 Windows 构建 Firefox 的更多信息。
在 macOS 和 Linux 上设置 Firefox¶
$ curl https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py -O
# To use Git as your VCS
$ python3 bootstrap.py --vcs=git
# To use Mercurial as your VCS
$ python3 bootstrap.py
有关 为 Linux 构建 Firefox 和 为 MacOS 构建 Firefox 的更多信息。
为 Android 设置 Firefox¶
$ curl https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py -O
# To use Git as your VCS
$ python3 bootstrap.py --vcs=git
# To use Mercurial as your VCS
$ python3 bootstrap.py
有关 为 Android 构建 Firefox 的更多信息
设置编辑器¶
注意
Visual Studio Code 是推荐的 Firefox 开发编辑器。并非因为它比其他编辑器更好,而是因为我们决定将精力集中在一个编辑器上。
设置编辑器是贡献过程的重要组成部分。集成 lint 和其他功能可以节省您的时间,并有助于减少构建和审查周期。
请参阅我们的 编辑器页面,了解有关如何设置您喜欢的编辑器的更多信息。
构建和运行¶
系统引导完成后,运行
$ cd mozilla-unified
$ ./mach build
这将检查依赖项并开始构建。这将需要一段时间;几分钟到几个小时,具体取决于您的硬件。
注意
如果您经常构建 Firefox,请将 ac_add_options --with-ccache=sccache 添加到 .mozconfig 中。sccache 通过缓存编译结果来显著加快构建速度。Firefox 构建系统将自动下载 sccache。
注意
默认构建是带有优化的编译构建。查看 mozconfig 文件文档 以查看其他构建选项。如果您不打算更改 C++ 或 Rust 代码,则 工件构建 会更快。
运行它
$ ./mach run
此命令将在新窗口中打开您本地构建的 Firefox。
有关在 Linux 上构建 Firefox 的更多信息 / 有关在 MacOS 上构建 Firefox 的更多信息
如果您遇到构建错误,请参考您特定操作系统的“构建 Firefox”的更详细文档,特别是“故障排除”部分。
编写补丁¶
在代码库中进行所需的更改。您可以查找 Searchfox 中的 UI 文本以找到正确的文件。
注意
如果您不确定需要进行哪些更改,或需要错误指导者的帮助,请随时使用 Bugzilla 上的 needinfo 功能(“请求信息”)以引起指导者的注意。
进行更改后,可视化您的更改以确保包含所有必要的工作
# Mercurial
# For files changed/added/removed
$ hg status
# For detailed line changes
$ hg diff
# Git
# For files changed/added/removed
$ git status
# For detailed line changes
$ git diff
然后提交您的更改
# Mercurial
$ hg commit
# Git
$ git commit
提交消息应如下所示:
Bug xxxx - Short description of your change. r?reviewer
Optionally, a longer description of the change.
确保您以这种格式包含错误编号和至少一位审查者(或审查者组)。
例如,以下是一个良好的提交消息示例:“Bug 123456 - 对演示 shell 进行空检查,以便在按钮在其自己的 onclick 处理程序期间自行移除时不会崩溃。r=person”
要 查找审查者或审查组,最简单的方法是在相关文件上运行 hg log <modified-file>
(或 git log <modified-file>
,如果您使用的是 git),并查看通常是谁在审查实际更改(即不是重新格式化、变量重命名等)。
要在存储库中可视化您的补丁,请运行
# Mercurial
$ hg wip
# Git
$ git show
确保更改符合编码风格¶
要检测编码风格违规,请使用 mach lint
$ ./mach lint path/to/the/file/or/directory/you/changed
# To get the autofix, add --fix:
$ ./mach lint path/to/the/file/or/directory/you/changed --fix
本地测试更改¶
要运行测试,请使用 mach test 以及路径。但是,解析结果并不总是很容易。
$ ./mach test dom/serviceworkers
要运行基于 GTest(基于 C/C++ 的单元测试)的测试,请运行
$ ./mach gtest 'QuotaManager.*'
远程测试更改¶
运行 Firefox 的所有测试需要很长时间,并且需要在具有各种配置的多个操作系统上进行。要构建 Firefox 并将其测试运行在持续集成服务器 (CI) 上,有多种 选择任务的选项 可用。
要自动选择最有可能受您的更改影响的任务,请运行
$ ./mach try auto
要使用模糊搜索界面手动选择任务,请运行
$ ./mach try fuzzy
要重新运行相同的任务
$ ./mach try again
从 Treeherder(我们的持续集成系统)也可以附加新作业。由于每个审查都有关联的 try CI 运行,这使得这项工作更容易。有关更多信息,请参阅 try 构建的分析器符号。
提交补丁¶
要提交补丁以供审查,我们使用一个名为 moz-phab 的工具。要安装它,请运行
$ ./mach install-moz-phab
一旦您想提交补丁(请确保您 使用了正确的提交消息),请运行
$ moz-phab
它会将所有当前应用的补丁发布到 Phabricator 并通知审查者。
如果您在彼此之上编写了多个补丁
$ moz-phab submit <first_revision>::<last_revision>
更新工作目录¶
如果您已完成一个补丁并希望返回到顶端以创建新的补丁
$ hg pull central
$ hg up central
更新已提交的补丁¶
审查者很少会接受补丁的第一个版本。此外,由于代码审查机器人可能会建议一些改进,因此可能需要更改您的补丁。
如果您的补丁未加载到您的工作目录中,则首先需要重新应用它
$ moz-phab patch D<revision_id>
# Or you can use the URL of the revision on Phabricator
$ moz-phab patch https://phabricator.services.mozilla.com/D<revision_id>
在工作文件夹中进行更改并运行
# Or, if you need to pass arguments, e.g., changing the commit message:
$ hg commit --amend
# Git
$ git commit --amend
修改补丁后,您需要再次使用 moz-phab 提交它。
警告
不要使用hg commit --amend -m
或git commit --amend -m
。
Phabricator 通过在创建修订时编辑提交消息来跟踪修订,以添加一个特殊的Differential Revision: <url>
行。
当使用--amend -m
时,该行将丢失,导致在重新提交时创建新的修订,这不是期望的结果。
如果您进行了许多更改,您可以使用以下命令压缩或编辑提交
# Mercurial
$ hg histedit
# Git
$ git rebase -i
提交步骤与初始补丁相同。
从存储库中检索新的更改¶
要从存储库中拉取更改,请运行
# Mercurial
$ hg pull --rebase
# Git
$ git pull --rebase
在代码库中推送更改¶
一旦更改被接受,并且您修复了审查者发现的任何剩余问题,审查者应该合并该补丁。
如果补丁几天后没有合并到“自动合并”(集成分支)中,请随时联系审查者和/或在#introduction频道上联系@Aryx或@Sylvestre。
合并过程将自动关闭审查和错误。
为 GeckoView 贡献代码¶
请注意,GeckoView 的设置和贡献流程与 Firefox 不同;GeckoView 的设置和贡献文档位于geckoview.dev。
有关贡献的更多文档¶
https://mozilla-version-control-tools.readthedocs.io/en/latest/devguide/contributing.html
https://moz-conduit.readthedocs.io/en/latest/phabricator-user.html
https://mikeconley.github.io/documents/How_mconley_uses_Mercurial_for_Mozilla_code