Documentation
¶
Overview ¶
Package git は、review.DiffSource の Git 実装を 2 種類提供します。
- GoGit: go-git による純 Go 実装。git バイナリを必要とせず、実行のたびに作業ディレクトリを 破棄するため、サーバーレスのような使い捨て環境に向きます。
- CLI: ローカルの git コマンドを呼ぶ実装。チェックアウトを再利用して差分取得が速いため、 永続的な作業ディレクトリを持てるローカル開発や CI に向きます。
どちらを使うかは呼び出し側が選びます(本パッケージは選択しません)。
Index ¶
Constants ¶
const DefaultContextLines = 10
DefaultContextLines は、CLI 実装が git diff に渡す既定の前後行数です。
Variables ¶
This section is empty.
Functions ¶
func RepoDirName ¶
RepoDirName は、リポジトリURLから作業ディレクトリ名を組み立てる既定の実装です。
スキーム・認証情報・末尾の .git を落とし、パス区切りなど扱いにくい文字をハイフンへ 畳み込みます。同じURLからは常に同じ名前が得られるため、CLI 実装がチェックアウトを 再利用できます。
Types ¶
type CLI ¶
type CLI struct {
// contains filtered or unexported fields
}
CLI は、ローカルの git コマンドを呼び出す review.DiffSource 実装です。
Close で作業ディレクトリを消さず、基準参照へ戻して掃除するだけなので、次回以降は 差分の取得だけで済みます。永続的な作業ディレクトリを持てる環境向けです。
func (*CLI) CheckoutHead ¶ added in v1.2.0
CheckoutHead は、head を作業ツリーへ強制チェックアウトし、そのパスを返します。 review.WorkspaceProvider の実装です。
チェックアウト後に未追跡ファイルも削除します。作業ディレクトリは実行をまたいで 再利用されるため、前回の実行が Close まで到達せず落ちていた場合の残骸が、head の 内容としてレビュアーに読まれるのを防ぎます。
func (*CLI) Close ¶
Close は、基準参照へ強制的に戻したうえで未追跡ファイルを削除します。 作業ディレクトリ自体は次回の実行で再利用するため残します。
★ 掃除を先に、フェッチを後に行います。後始末の先頭にネットワーク I/O を置くと、 レビュー末尾で通信が落ちていたり締切を使い切っていたりしたときに、 **作業ツリーが head のまま・未追跡ファイルも残ったまま**次回へ持ち越されます。 フェッチは次回の参照解決を新しく保つための best-effort なので、失敗しても 後始末そのものは成立させます。
type Factory ¶
type Factory struct {
// contains filtered or unexported fields
}
Factory は、Request ごとに作業ディレクトリを決めて Source を開く review.DiffSourceFactory です。
作業ディレクトリは root/<リポジトリURL由来の名前> です。同じリポジトリからは常に同じ パスが得られるため、CLI 実装はチェックアウトを再利用できます。
同じリポジトリの同時実行について ¶
**既定の命名は URL だけから決まるため、同じリポジトリのレビューを同時に走らせると 同じ作業ディレクトリを共有します。** 本パッケージは排他を行いません。共有されると:
- GoGit: 先に終わった側の Close が、まだ実行中の側の作業ディレクトリごと削除します。
- CLI: 一方が読んでいる最中にもう一方が別ブランチへ checkout するため、 **エラーにならずに別ブランチの内容をレビューします**(気付きにくい壊れ方です)。
同一プロセスで同じリポジトリを並行にレビューする場合は、WithDirNamer で実行ごとに 異なる名前を返してください(例: RepoDirName の結果へ実行 ID を足す)。 チェックアウトの再利用は諦めることになりますが、使い捨ての環境では元々効きません。
func NewCLIFactory ¶
NewCLIFactory は、CLI を開く Factory を生成します。
func NewGoGitFactory ¶
NewGoGitFactory は、GoGit を開く Factory を生成します。
type GoGit ¶
type GoGit struct {
// contains filtered or unexported fields
}
GoGit は、go-git による review.DiffSource 実装です。
git バイナリを必要としません。Close で作業ディレクトリごと削除するため、実行のたびに クローンし直す使い捨ての環境に向きます。
単一の実行(Prepare → Diff → Close)で使う前提で、並行利用は想定していません。
func (*GoGit) CheckoutHead ¶ added in v1.2.0
CheckoutHead は、head を作業ツリーへ強制チェックアウトし、そのパスを返します。 review.WorkspaceProvider の実装です。
go-git のチェックアウトは context を受け取れないため、ctx は取り消しには効かず ログにだけ使います(シグネチャはポート側の統一です)。
type Option ¶
type Option func(*settings) error
Option はアダプターおよび Factory の任意設定です。
生成時にだけ適用し、以降アダプターの設定は変わりません。セッターで後から書き換え られると、実行中に設定が変わりうる状態になります。検証が必要な値を扱えるよう error を返す形にしています。
func WithBase ¶
WithBase は、後始末の際に戻る基準参照を設定します(CLI 実装が使用します)。 Factory 経由で利用する場合は Request.Base が自動的に設定されます。
func WithContextLines ¶
WithContextLines は、差分に含める前後の行数を設定します(CLI 実装のみ有効)。 負の値はエラーになります。
func WithDirNamer ¶
WithDirNamer は、リポジトリURLから作業ディレクトリ名を決める関数を差し替えます (Factory のみ有効)。
func WithSSHKey ¶
WithSSHKey は、SSH 認証に使う秘密鍵のパスを設定します。 未設定の場合、SSH 形式のリポジトリURLに対する認証は行われません。