备忘下:如何给chromium提交patch

综合编程 2016-10-16

因为工作的原因,需要给chromium提些patch,搞了很久才搞定,记录一下。

其实提patch本身是比较简单的,但关键是国内坑爹的墙,让我耽误很久。

最后亲自跑到国外去提才搞定····

大家可以在 https:// cs.chromium.org/chromiu m/src/AUTHORS 看到我的id

debugwang,哈哈,id是不是很拉风……

整个过程参考 http://www. chromium.org/developers /contributing-code

首先,你需要把整个chromium包括git的历史记录都拉取下来。

先下载他的depot_tools, 丢到一个英文路径,注意路径别有空格。然后把路径加到path系统变量的 最前面 , 这个比较关键。

然后fetch chromium就可以直接下载了。但这步是最坑爹的,因为墙的存在,必须得上VPN。但git是不能断点续传的!我拉了N次,每次都在快下好的是断掉了。最后实在没办法了,刚好有机会去泰国旅游。就把笔记本带上,在酒店里通宵开着下。没想到居然成功了,当场差点泪流满面……

chromium的patch分成修复bug和实现features。我第一次提,肯定不敢提太多东西。就找了些bug来提。所以首先你得到 https:// code.google.com/p/chrom ium/issues/list 去找找,你的bug有没在最新版上修复。如果没有的话,在上面提出issue。然后等他们回复。

同时你还得在上面和他们讨论,并确保你的issue能让他们的测试人员重现。否则不会给你立issue。

一旦issue被确认,Chromium的测试人员会将issue的状态置为Assigned。如果你有解决方案,需要先和你需要提patch的文件的owner沟通,确认你的解决思路可行。同时,将你的patch作为附件贴到issue讨论串中,owner会去看。

如果Owner接受你的解决思路,就可以开始提patch了。

如果你是第一次提交代码,要去签署CLA: https:// developers.google.com/o pen-source/cla/individual 。我用的是公司的CLA,这步省略了。签署时,要用和你的google账户一致的邮箱地址。

然后开始在git上操作。

首先checkout一个分支。假如你需要修复bug1,则在chromium根目录下执行

git checkout -b bug1 origin/master

然后

git commit

然后会弹出一个记事本,写入日志。chromium对日志格式有严格要求,如下:

标题

(空行)

正文

(空行)

R=(owner的邮箱)

BUG=(issue的编号)

如果你修的不是bug,比如是简单改些不良编程习惯,最后一行可以写BUG=nobug

如果你是第一次提交patch,你需要同时修改根目录下的AUTHORS文件。

然后再运行

git cl upload --send-mail

命令。这个cl不是一般的git的东西,是depot_tools里的git的。

执行完这句,就会把你的修改提交到Chromium强大的reviewer系统:Rietveld。

执行这句的时候,cl会检查是否有warning。有的话是通不过的。同时还会打开google的一个网页,然后用你的邮箱去登录。

CL成功后你将会在

https://codereview.chromium.org/all?limit=20&closed=0&offset=0

看到你的Outgoing reviews一项有了新的条目,然后就是等待reviewer们反馈。

然后根据reviewer的回复继续修改你的patch。

代码的修改必须在你先前建立的分支上。每次修改完并提交后,运行“git cl upload”重新提交patch。

然后reviewer会回复"LGTM" (Looks Good To Me)。注意需要评论的reviewer们作为OWNER覆盖所有修改的文件。

此时你可以点选 Rietveld 上对应的issue页面的“commit”项 。你的patch会被提交到CommitQueue,稍后 Rietveld 会运行大量trybot验证你的修改没有引入新的问题。

成功提交后,你的名字就会出现在

http:// src.chromium.org/svn/tr unk/src/AUTHORS

您可能感兴趣的

Git Submodule简单使用 Git Submodule 近期用到了这个命令,主要是为了实现在一个git仓库中,引入其他git仓库,这种适用于你想在主工程中引入其他library库,主工程以 submodule 的形式包含子工程,子工程可以有自己的git操作,比如commit、push、rebase等。 这里笔者用一...
域名已成功加入 Chromium HSTS Preload List 2015-9-1vibbow 关于 HSTS (HTTP Strict Transport Security) : https://www.chromium.org/hsts
Introducing Facade: An Easy Way to Track Git Repo ... One of the great things about open source is that (most of the time), source code repositories are easily accessible. They can be great sources of dia...
Git 存储格式与运用 GIT 存储格式与运用 在 GIT 的实现规范中,存储格式是非常简单而且高效的,一个代码托管平台通常需要基于这些特性实现一非常有意思的功能。 在本文中,将介绍基于 GIT 存储库格式实现的仓库体积限制与大文件检查。 存储库的布局 正常的 GIT 存储库布局应当遵循 GIT 规范 Git...
GIT for the Scared Java Dev: Trusting Your IDE One of the main issues some developers have when it comes to Git is trusting their IDE integration because... who knows what the IDE is doing? So bett...