この連休でAndroid Open Source Projectにいくつかパッチを投稿したのですが、そのときに、ちょっと詰まったのでメモ。

AOSPにパッチを投げるには、

  • トピックブランチを作成
  • 変更をローカルにコミット
  • repo upload

と言う手順でやります。詳細はvisible trueに良くまとまっているので、参考にしてください。

そして、一度投稿したパッチを修正するときは、最初に作ったトピックブランチをチェックアウトして、”git commit –amend”でコミットを修正してから、もう一度”repo upload”するわけですが、今回は、パッチを投稿したときのトピックブランチが失われた状態だったのです。

そのパッチを最初に投稿したのは半年以上前で、そのときは4.1が出たての頃でした。それから時は流れ、再び修正することになったのですが。。。

いろいろ試行錯誤をしましたが、下記の手順で修正できました。

ベストプラクティスではないかもしれませんが、参考までに。

> git fetch https://android.googlesource.com/platform/sdk refs/changes/30/49630/3 && git checkout FETCH_HEAD
> git checkout -b [BRANCH_NAME]
> git add [FILE_NAME]
> git commit –amend
> git branch –set-upstream [BRANCH_NAME] aosp/master
> repo upload

 

一行目のgit fetchは、AOSPのreviewサーバーに表示されているcheckout(画像下部、赤線内)をそのまま実行します。

Screen Shot 2013-01-15 at 10.01.18 PM

すると、該当の修正をチェックアウトした状態になります。

その際、一旦branchが外れて(no branch)になるので、もう一度、トピックブランチを作り直します。以後、修正はこのブランチ内で行います。

ファイルを修正して、git addで取り込み、直前のコミットを修正(amend)します。

そして、ここがハマったところなのですが、トピックブランチのupstreamを、手動で設定しなくてはなりません。これをしないと、repo uploadをしたときに、投稿できるブランチがないと言われてしまいます。

upstreamを設定したら、あとは通常通りrepo uploadでパッチを投稿できます。投稿したパッチは、AOSPのreviewサーバーの既存のエントリを上書きする形で表示されます。