简 述: 记录如何给上游的 QT 组织提 Bug (or Suggesstion),和给提交代码贡献 Patch(代码合并请求)的经验;给读者以参考;修改内容不重要,重要的熟悉如给 Qt 提交 Bug 反馈和 代码贡献 Patch;

[TOC]


本文初发于 “偕臧的小站“,同步转载于此。


向 Qt 提交反馈 Bug:

向上游的 Qt 组织反馈你所发现的 bug,或者是你想提的建议 Suggesstion;


步骤流程:

注册 Qt 账号:

登录 login.qt.io 网站,注册一个属于你的 Qt 账号;


提交 Bug 前准备:

登录 bugreports.qt.io ,先在下面链接处的 Bug 库里面查询一下, 你想要提交的 bug (or Suggesstion)是否已经被人提了,若是重复,则不必再提;


创建 Bug 单:

若是之前没有人填写你想提的这个 Bug, 则可以放心的开始创建你的 Bug 单号了,点击上面的 新建 按钮,然后按照页面的提交,进行填写,其中带有 * 的为必填项;其中通常 默认为 Qt (QTBUG)Bug ,若是 Linux 上面的平台,则可以选择为 Linux/x11 ; 在然后就是下面的详细描述:越详细越好, 最好可以在下面的附件可以带上你写的能够复现的实例程序最佳;都完成之后,就可以点击有下家的 新建 按钮

若是创建成功,则会在首页看到一个显示, 点击即可以看到这个 Bug 单号,注意它生成的一个 Bug 编号是很重要且唯一的;


查看创建的 Bug 单

点击 QTBUG-85477 进去,可以查看刚创建好的 Bug 单;沟通得知该问题的属于第三方的问题,的需要在上游去修改(后面已在上游提交 pr);


其他:

可以修改该网站语言为中文;想不到吧!!! 使用 Qt 的 Bug 反馈网站,居然是有语言这一栏的设置的 ,点击右上角的 profile-Preferences- pen 图标 (头像-个人信息- 参数配置-笔), 在弹出来的语言中选择 中文(中国)后,点击更新保存。

体验了一把,中文的翻译也不算很过关,可以勉强使用,随后使用 中文、English, 由你自己体验选择;还是推荐英文;










向 Qt 提交贡献 Code:

除了给 Qt 提交 Bug 或 Suggesstion,我们也可以依靠自己的动手能力,给 Qt 提交代码请求他们进行合并,从而帮助 Qt 的代码更加完善;


提交步骤:

注册 Qt 账号:

注册一个 Qt(codereview) 的账号;


登录 Code Review:

登录 codereview.qt-project.org 网站,这是 Qt 组织的官方“代码审核”平台(不同于 GitLab 和 GitHub),其主要功能是代码审查很是方便;

配置邮件:在 Email 中填写邮箱;

到个人信息中, 在 “Agreements-New Contributor Agreement” 中, 允许一个贡献协议。通常个人是提交

注意:  邮箱是必填的,且要和后面提交的署名的邮箱是同一个邮箱;且若不签署此协议,是不能被 push 的, 也是不会被合并的。


输入 ssh:

和 GitHub、 GitLab 这种相似,本机创建好自己的 git 账号后,在终端执行 cat ~/.ssh/id_rsa.pub 后将显示的公钥字符串,进行复制,点击网页的右上角的 “settings-SSHKeys-SSH keys” 页面,将其粘贴到里面,然后点击 “ADD NEW SSH KEY” 几可以创建成功

注意: 使用 commit 的时候,生成 git 的 user.name 必须和 user.email 中 @ 的前缀是一样的;且 必须是首字母大写,且 之间使用用空格隔开;否则可能是不被合并改代码的,或者修改的话也是很麻烦的; eg: Xmuli Tech <xmulitech@gmail.com>

下载仓库的代码

点击主页的 “BROWSE-Repositiories”,然后在搜索栏 “Fileter:” 的右侧,输入你想要查找的仓库,eg:qtbase

然后点击该仓库链接, 可以看到,一共提供了三种下载方式:你也可以使用如下任意一种方式下载;但是由于某种神秘的原因,直接下载可能会很慢(有 434.7 M, 2020-07-08),哪怕是使用 TZ 依旧耗时很久,请耐心等待

  • **[方式一] ANONYMOUS HTTP **

    # Clone with commit-msg hook
    git clone "https://codereview.qt-project.org/qt/qtbase" && (cd "qtbase" && mkdir -p .git/hooks && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg https://codereview.qt-project.org/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg)
    
    # Clone with commit-msg hook
    git clone "https://codereview.qt-project.org/qt/qtbase"

  • [方式二] HTTP

    # Clone with commit-msg hook
    git clone "https://xmuli@codereview.qt-project.org/a/qt/qtbase" && (cd "qtbase" && mkdir -p .git/hooks && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg https://xmuli@codereview.qt-project.org/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg)
    
    # Clone with commit-msg hook
    git clone "https://xmuli@codereview.qt-project.org/a/qt/qtbase"

  • [方式三] SSH

    # Clone with commit-msg hook
    git clone "ssh://xmuli@codereview.qt-project.org:29418/qt/qtbase" && scp -p -P 29418 xmuli@codereview.qt-project.org:hooks/commit-msg "qtbase/.git/hooks/"
    
    # Clone
    git clone "ssh://xmuli@codereview.qt-project.org:29418/qt/qtbase"

//附 qtbase[2020-07-08].rar 百度云盘备份
链接: https://pan.baidu.com/s/1gLPjqXL7vbRhp6oqGIeMlg 密码: knag


设置 git hooks:

执行如下,配置的是 commit msg和commit hook,它能自动生成一个changeid,也就是将来标示你这个修改的id。后面若是需要修改的话,就使用 git commit --amend 来修改,避免 Change-Id 发生了改变,生成了一个新的提交;

gitdir=$(git rev-parse --git-dir); scp -P 29418 codereview.qt-project.org:hooks/commit-msg ${gitdir}/hooks/

修改代码和 commit:

若是在 Linux 上,下载源码包之后,执行 sudo apt build-dep qtbase5-dev 安装编译依赖;源码切换到 dev 分支, 进行代码修改后,进行 commit 提交信息;

在本地, 现在本地修改好代码,

注意的的是,Qt 的提交规范是很严格的:一开始一句简短的描述,然后一行空行,再然后就是详细的描述;如果提交的 commit 不符合规范的话,机器人🤖是会指出来错误的;一直到你提交正确为止;


提交贡献:

当代码修改通过之后,且能够成功编译之后,且 commit 信息也正确的就可以准备提交了;且一般每个贡献代码是需要在提交信息结束的时候,将附带的 Qt-Bug 编号给带上去;

也可以参考官方的提交模板:.commit-template

附上一个他人提交的例子 qtbase/+/306765 作为参考,摘录如下:

Fix handling of Suzhou numbering system

This only arises when the system locale tells us to use its zero as
our zero digit, since no CLDR locale uses it by default. Adapt an
MS-specific QLocale::system() test to use Suzhou numbering, so as to
test this.

Fixes: QTBUG-85409
Change-Id: I343324bb563ee0e455dfe77d4825bf8c3082ca30

若是第一次 commit, 执行 git commit -a,会显示你加上的信息和自动加上的 Change-Id 号作为本次记录:

注意:  不按照此规范写 commit 信息,也是不会被合并的


推送贡献 Patch:

执行 git push origin HEAD:refs/for/dev 将修改的文件进行推送到 gerrit 上,进行代码审查,这里推送可能需要等待的时间比较长:


添加审核:

查看本文件的修改者 git log --pretty=oneline src/3rdparty/libpng/png.c ,选取其中出现评率最高的人,添加即可;

f2ce5b9136882fb315cb524fd9037bc06bff7830 (HEAD -> dev) Add spaces around '/*' and '*/'
2e8005765d6513c4743a939aea97c68427f6ab2c Update bundled libpng to version 1.6.37
5d8b01468e8bd752dad090aaef4ccf3a83a58a0d Update bundled libpng to version 1.6.36
0d7c049e4407bf0db8d1eca1ea248c6d6b739c8c Update bundled libpng to version 1.6.35
b084837ffc34439710552cb6ed31054c60f6b2d4 Update bundled libpng to version 1.6.34
e51dbda0677d9ff4419c9dc70e6209fae194ee02 Update bundled libpng to version 1.6.32
9369eca108cc509ed651c0dbab6fa54de83727fc Update bundled libpng to version 1.6.28
714cb4020e12e078e8ba8c2c5493d138d515f46d Update bundled libpng to version 1.6.20
ad5c768fc8b93e22201fb557561b2edd4fcdc26b Update bundled libpng to version 1.6.19
68c137cc725ceadec68c455e0e3e365ecb00f2c1 Update bundled libpng to version 1.6.17
1fa1ce36288e3e537e9e4db1cfa42b338b5b7e58 Upgrading libpng: Adding clean copy of libpng 1.5.10
38be0d13830efd2d98281c645c3a60afe05ffece Initial import from the monolithic Qt.
(END)

添加完成之后,等待即可:

注意: 和常规的 gitlab、 github 不同,若是不指定审查者,那么该修改一万年也不会有机会被合并进去;必须在网页 gerrit 上指定几个该 commit 的审查者


合并结果:

若是没有问题,则会被批准进入仓库;或者按照指导意见来修改,符合标准之后,依旧可以被合并;或许因为某些原因可能不被合并;好运~~


总结:

本次重在熟悉流程,为后面的为 Qt 提交贡献 Patch 做准备;

本次提交 Bug 为 QTBUG-85477 和 对应的修改 +307241 ;因为此修改实际为 Qt 的第三方库,需要从它的上游进行提交修改,而非此处的 qtbase 修改; 于是在对应的第三方的存储库 glennrp/libpng 补上了这个提交 #337


参考: