備忘下:如何給chromium提交patch
因為工作的原因,需要給chromium提些patch,搞了很久才搞定,記錄一下。
其實提patch本身是比較簡單的,但關鍵是國內坑爹的牆,讓我耽誤很久。
最後親自跑到國外去提才搞定····
debugwang,哈哈,id是不是很拉風……
首先,你需要把整個chromium包括git的歷史記錄都拉取下來。
先下載他的depot_tools, 丟到一個英文路徑,注意路徑別有空格。然後把路徑加到path系統變數的最前面 , 這個比較關鍵。
然後fetch chromium就可以直接下載了。但這步是最坑爹的,因為牆的存在,必須得上VPN。但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了。
然後開始在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的一個網頁,然後用你的郵箱去登入。
然後根據reviewer的回覆繼續修改你的patch。
程式碼的修改必須在你先前建立的分支上。每次修改完並提交後,執行“git cl upload”重新提交patch。
然後reviewer會回覆"LGTM" (Looks Good To Me)。注意需要評論的reviewer們作為OWNER覆蓋所有修改的檔案。
此時你可以點選Rietveld上對應的issue頁面的“commit”項 。你的patch會被提交到CommitQueue,稍後Rietveld會執行大量trybot驗證你的修改沒有引入新的問題。
成功提交後,你的名字就會出現在
了
提交完成後,你可以git checkout origin/master回去,然後git pull origin master更新下程式碼。這是因為chromium的更新非常頻繁。你下次提的時候肯定很多程式碼又變了。