Repo sync 出問題?
自從放出了 Android-x86 kernel 2.6.32 供測試之後,陸續有人反應 repo sync 出問題。其實當初在整合 2.6.32 時我也遇過這情況,只是後來問題又消失了,就未再理會。不過既然有幾個人同時遇到這現象,可見問題的確存在,值得探究一下。
到 Repo and Gerrit Discussion group 上詢問,得到 repo 作者的回應,建議加上 –trace 參數來 debug。我照做,得到的結果是:
$ repo --trace sync kernel : unpickle /home/cwhuang/.gitconfig : unpickle /home/cwhuang/git/android-x86-2.0/.repo/repo/.git/config : unpickle /home/cwhuang/git/android-x86-2.0/.repo/manifests.git/config : export GIT_DIR=/home/cwhuang/git/android-x86-2.0/.repo/manifests.git : git fetch origin : load refs /home/cwhuang/git/android-x86-2.0/.repo/manifests.git : unpickle /home/cwhuang/git/android-x86-2.0/.repo/projects/kernel.git/config : export GIT_DIR=/home/cwhuang/git/android-x86-2.0/.repo/projects/kernel.git : git fetch x86 : load refs /home/cwhuang/git/android-x86-2.0/.repo/projects/kernel.git : load refs /home/cwhuang/git/android-x86-2.0/.repo/repo/.git : scan refs /home/cwhuang/git/android-x86-2.0/.repo/projects/kernel.git : cd /home/cwhuang/git/android-x86-2.0/kernel : git rev-list ^HEAD e8f75637ed2077464ea1ea1e45e33f298119bcd6 -- 1>| 2>| : git log --pretty=format:%H %ce ^e8f75637ed2077464ea1ea1e45e33f298119bcd6 HEAD -- 1>| 2>| : git var GIT_COMMITTER_IDENT 1>| 2>| Traceback (most recent call last): File "/home/cwhuang/git/android-x86-2.0/.repo/repo/main.py", line 235, in |
追查最後 git log 的輸出,終於發覺,有兩個 commits 的 committer 欄位有問題:
... c7ff91d722e44c98504e6e2c357b47e1988dfbbd Christoph Hellwig 3b826386d376e5545d2e92b2da5ebd965cafae97 Christoph Hellwig ... |
本來應該寫的是 committer 的 name,卻誤寫成 email,導致 repo 的誤判。不過,這兩個 commits 都是出現在 vanilla kernel 2.6.32 中,我也沒辦法修改。
再請教 repo 作者後,他給了一個 workaround 來修正此問題。只要再做一次 repo sync,將 repo 版本升級到 1.6.8.9 版就行了。
不過,即使 repo sync 本身不出錯,最後的結果仍會有問題,不是我們所想要的。這是因為若切換到 2.6.32 時使用 tracking branch,repo sync 時會自動幫我們做 git rebase。但將 2.6.32 rebase 到 2.6.29 上顯然是沒有意義的,也不會成功。
解決的方法是切換到 2.6.32 時使用 non-tracking branch:
$ cd kernel $ git checkout x86/android-2.6.32 Previous HEAD position was e8f7563... kconfig: add nonint_oldconfig target from Fedora kernel Checking out files: 100% (18600/18600), done. HEAD is now at 885c27f... kconfig: add nonint_oldconfig target from Fedora kernel $ cd .. $ repo sync kernel/: discarding 36678 commits |
不過 repo sync 會自動將 branch 切回 manifest.xml 中指定的 android-2.6.29,因此會出現那個 discarding 的訊息。這沒關係,只要再手動切換到 2.6.32 就好。
