マージとパッチ適用

master ブランチへのパッチ(例えば、重要なバグ修正)があり、それを本番V8ブランチの1つにマージする必要がある場合は、以下をお読みください。

以下の例では、V8のブランチ版2.4を使用します。2.4 をご自身のバージョン番号に置き換えてください。詳細については、V8のリリースプロセスV8のバージョン番号に関するドキュメントをお読みください。

パッチをマージする場合は、ChromiumまたはV8の課題追跡システムに関する関連する課題が必須です。これはマージを追跡するのに役立ちます。マージリクエストの課題を作成するには、テンプレートを使用できます。

マージ候補となるものは? #

詳細については、関連するChromiumのページを参照してください。不明な点がある場合は、v8-dev@googlegroups.comにメールを送信してください。

マージプロセス #

ChromiumとV8のトラッカーにおけるマージプロセスは、次の形式のラベルによって駆動されます。

Merge-[Status]-[Branch]

V8で現在重要なラベルは次のとおりです。

  1. Merge-Request-{Branch} はプロセスを開始し、この修正を {Branch} にマージする必要があることを意味します。{Branch} はV8ブランチの名前/番号です(例:M72の場合は7.2)。
  2. Merge-Review-{Branch} は、Canaryカバレッジが不足しているなどの理由で、{Branch} のマージがまだ承認されていないことを意味します。
  3. Merge-Approved-{Branch} は、Chrome TPMがマージに署名したことを意味します。
  4. マージが完了すると、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を使用する #

このオプションは、パッチがリリースブランチにクリーンに適用される場合にのみ機能することに注意してください。

  1. バックマージするCLを開きます。
  2. 拡張メニュー(右上隅の3つの縦のドット)から「Cherry pick」を選択します。
  3. 宛先ブランチとして「refs/branch-heads/X.X」を入力します(X.X を適切なブランチに置き換えます)。
  4. コミットメッセージを変更します。
    1. タイトルの先頭に「Merged: 」を付けます。
    2. 元のCLに対応するフッターの行(「Change-Id」、「Reviewed-on」、「Reviewed-by」、「Commit-Queue」、「Cr-Commit-Position」)を削除します。「(cherry picked from commit XXX)」の行は、一部のツールでマージを元のCLに関連付けるために必要なので、必ず残してください。
  5. マージの競合が発生した場合は、CLを作成してください。競合を解決するには(ある場合)、gerrit UIを使用するか、メニュー(右上隅の3つの縦のドット)の「パッチのダウンロード」コマンドを使用して、パッチをローカルにプルすることもできます。
  6. レビューのために送信します。

オプション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.orghablich@chromium.org に連絡してください。

要約はありますか? #

  1. 課題追跡システムに課題を作成します.
  2. tools/release/mergeinfo.py で修正のステータスを確認します
  3. 課題に Merge-Request-{Branch} を追加します。
  4. 誰かが Merge-Approved-{Branch} を追加するまで待ちます。
  5. マージします.