著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 因为工作的原因,需要给chromium提些patch,搞了很久才搞定,记录一下。
其实提patch本身是比较简单的,但关键是国内坑爹的墙,让我耽误很久。
最后亲自跑到国外去提才搞定····
大家可以在https://cs.chromium.org/chromium/src/AUTHORS看到我的id
debugwang,哈哈,id是不是很拉风……
整个过程参考http://www.chromium.org/developers/contributing-code
首先,你需要把整个chromium包括git的历史记录都拉取下来。
先下载他的depot_tools, 丢到一个英文路径,注意路径别有空格。然后把路径加到path系统变量的最前面 , 这个比较关键。
然后fetch chromium就可以直接下载了。但这步是最坑爹的,因为墙的存在,必须得上V**。但git是不能断点续传的!我拉了N次,每次都在快下好的是断掉了。最后实在没办法了,刚好有机会去泰国旅游。就把笔记本带上,在酒店里通宵开着下。没想到居然成功了,当场差点泪流满面……
chromium的patch分成修复bug和实现features。我第一次提,肯定不敢提太多东西。就找了些bug来提。所以首先你得到https://code.google.com/p/chromium/issues/list 去找找,你的bug有没在最新版上修复。如果没有的话,在上面提出issue。然后等他们回复。
同时你还得在上面和他们讨论,并确保你的issue能让他们的测试人员重现。否则不会给你立issue。
一旦issue被确认,Chromium的测试人员会将issue的状态置为Assigned。如果你有解决方案,需要先和你需要提patch的文件的owner沟通,确认你的解决思路可行。同时,将你的patch作为附件贴到issue讨论串中,owner会去看。
如果Owner接受你的解决思路,就可以开始提patch了。
如果你是第一次提交代码,要去签署CLA:https://developers.google.com/open-source/cla/individual。我用的是公司的CLA,这步省略了。签署时,要用和你的google账户一致的邮箱地址。
然后开始在git上操作。
首先checkout一个分支。假如你需要修复bug1,则在chromium根目录下执行
git checkout -b bug1 origin/master
然后
git commit -a
然后会弹出一个记事本,写入日志。chromium对日志格式有严格要求,如下:
标题 (空行) 正文 (空行) BUG=(issue的编号) R=(owner的邮箱)
如果你修的不是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/trunk/src/AUTHORS
了
提交完成后,你可以git checkout origin/master回去,然后git pull origin master更新下代码。这是因为chromium的更新非常频繁。你下次提的时候肯定很多代码又变了。