この章の答え
パッチを解析し、適用できるかを確認してから実際の変更へ進む。
ファイルを丸ごと書き直す代わりに、どこをどう変えるかを差分で伝えます。apply_patch の読みどころは、文字列のパッチが構造化された変更になり、ファイル操作へ変換される境目です。
01|図でつかむ
解析できること、適用できること、変更内容が正しいことは、それぞれ別の確認。
02|3つのポイントで理解する
1. 文字列から Hunk へ
parse_patch や Hunk の定義から、追加・削除・更新をどう表現するかを見ます。構文が壊れていれば、この段階でファイル操作へ進めないようにする必要があります。
2. 既存ファイルとの対応を確認する
更新する文脈やパスを調べ、パッチの意図を実際の操作へ変えます。構文として正しくても、対象の内容が変わっていれば適用できないことがあります。
3. 権限と結果を最後まで読む
ApplyPatchHandler から実行側へ進み、許可の確認と実際の変更を区別します。適用後は diff を見て意図しない変更がないか確認し、必要な動作検証につなげます。
03|ソースで確かめる
以下の検索は Codex リポジトリのルートで実行します。最初に対象 commit を記録し、検索結果から定義と呼び出し元を一つずつ開いてください。
git rev-parse --short HEAD
rg -n "parse_patch|enum Hunk" codex-rs
読む入口: codex-rs/apply-patch/src/parser.rs 。リンク先は照合に使った固定 commit のファイルです。手元の版と異なる場合は、上の検索語から探し直します。
小さく試す
学習用の小さなファイルで一箇所の変更を読み、パッチの指定箇所と生成された diff を照合します。
04|30秒で復習
- パッチを構造化された変更へ変える。
- 構文・適用条件・権限を分ける。
- 適用後は差分と動作を確認する。