マージとパッチ適用
master
ブランチへのパッチ(例えば、重要なバグ修正)があり、それを本番V8ブランチの1つにマージする必要がある場合は、以下をお読みください。
以下の例では、V8のブランチ版2.4を使用します。2.4
をご自身のバージョン番号に置き換えてください。詳細については、V8のリリースプロセスとV8のバージョン番号に関するドキュメントをお読みください。
パッチをマージする場合は、ChromiumまたはV8の課題追跡システムに関する関連する課題が必須です。これはマージを追跡するのに役立ちます。マージリクエストの課題を作成するには、テンプレートを使用できます。
マージ候補となるものは? #
- パッチは深刻なバグを修正します(重要度の順):
- セキュリティバグ
- 安定性バグ
- 正確性バグ
- パフォーマンスバグ
- パッチはAPIを変更しません。
- パッチは、ブランチカット前に存在した動作を変更しません(動作変更がバグを修正する場合を除く)。
詳細については、関連するChromiumのページを参照してください。不明な点がある場合は、v8-dev@googlegroups.comにメールを送信してください。
マージプロセス #
ChromiumとV8のトラッカーにおけるマージプロセスは、次の形式のラベルによって駆動されます。
Merge-[Status]-[Branch]
V8で現在重要なラベルは次のとおりです。
Merge-Request-{Branch}
はプロセスを開始し、この修正を{Branch}
にマージする必要があることを意味します。{Branch}
はV8ブランチの名前/番号です(例:M72の場合は7.2
)。Merge-Review-{Branch}
は、Canaryカバレッジが不足しているなどの理由で、{Branch}
のマージがまだ承認されていないことを意味します。Merge-Approved-{Branch}
は、Chrome TPMがマージに署名したことを意味します。- マージが完了すると、
Merge-Approved-{Branch}
ラベルはMerge-Merged-{Branch}
に置き換えられます。
コミットが既にマージ/リバートされたか、Canaryカバレッジがあるかを確認する方法 #
mergeinfo.py
を使用して、Gitによると $COMMIT_HASH
に関連付けられているすべてのコミットを取得します。
tools/release/mergeinfo.py $COMMIT_HASH
Is on Canary: No Canary coverage
と表示された場合は、修正がまだCanaryビルドにデプロイされていないため、まだマージしないでください。経験則として、修正が適用されてからマージを実施するまでに少なくとも3日間は待つことをお勧めします。
マージCLを作成する方法 #
オプション1:gerritを使用する #
このオプションは、パッチがリリースブランチにクリーンに適用される場合にのみ機能することに注意してください。
- バックマージするCLを開きます。
- 拡張メニュー(右上隅の3つの縦のドット)から「Cherry pick」を選択します。
- 宛先ブランチとして「refs/branch-heads/X.X」を入力します(X.X を適切なブランチに置き換えます)。
- コミットメッセージを変更します。
- タイトルの先頭に「Merged: 」を付けます。
- 元のCLに対応するフッターの行(「Change-Id」、「Reviewed-on」、「Reviewed-by」、「Commit-Queue」、「Cr-Commit-Position」)を削除します。「(cherry picked from commit XXX)」の行は、一部のツールでマージを元のCLに関連付けるために必要なので、必ず残してください。
- マージの競合が発生した場合は、CLを作成してください。競合を解決するには(ある場合)、gerrit UIを使用するか、メニュー(右上隅の3つの縦のドット)の「パッチのダウンロード」コマンドを使用して、パッチをローカルにプルすることもできます。
- レビューのために送信します。
オプション2:自動スクリプトを使用する #
リビジョン af3cf11 をブランチ 2.4 にマージすると仮定します(完全なgitハッシュを指定してください。ここでは説明を簡単にするために略語を使用します)。
tools/release/merge_to_branch.py --branch 2.4 af3cf11
スクリプトを -h
付きで実行して、ヘルプメッセージを表示します。ヘルプメッセージには、より多くのオプションが含まれています(例:パッチを含むファイルを指定したり、パッチを元に戻したり、カスタムのコミットメッセージを指定したり、以前にキャンセルしたマージプロセスを再開したりできます)。スクリプトはV8の一時的なチェックアウトを使用することに注意してください。これはワークスペースには触れません。一度に複数のリビジョンをマージすることもできます。それらをすべてリストしてください。
tools/release/merge_to_branch.py --branch 2.4 af3cf11 cf33f1b sf3cf09
適用後:ブランチウォーターフォールを観察します #
パッチの処理後、いずれかのビルダーが緑色になっていない場合は、すぐにマージを元に戻してください。ボット(AutoTagBot
)が、10分間の待機後、正しいバージョニングを処理します。
Canary/Devで使用されているバージョンにパッチを適用する #
Canary/Devバージョンにパッチを適用する必要がある場合(これは頻繁に発生するべきではありません)、以下の手順に従ってください。Googleの社員の場合:CLを作成する前に、内部サイトを確認してください。
ステップ1:ロールブランチにマージする #
使用されるバージョンの例は 5.7.433
です。
tools/release/roll_merge.py --branch 5.7.433 af3cf11
ステップ2:Chromiumに修正を認識させる #
使用されるChromiumブランチの例は 2978
です。
git checkout chromium/2978
git merge 5.7.433.1
git push
ステップ3:完了 #
Chrome/Chromiumは、自動的にビルドすると変更を認識するはずです。
FAQ #
マージ中にタグ付けに関連するエラーが発生します。どうすればよいですか? #
2人が同時にマージしていると、マージスクリプトで競合状態が発生する可能性があります。この場合は、machenbach@chromium.org と hablich@chromium.org に連絡してください。
要約はありますか? #
- 課題追跡システムに課題を作成します.
tools/release/mergeinfo.py
で修正のステータスを確認します- 課題に
Merge-Request-{Branch}
を追加します。 - 誰かが
Merge-Approved-{Branch}
を追加するまで待ちます。 - マージします.