gitをソースレベルで読む話(2)

前回 の続きですが、読まなくても今回の内容は追えます。

今回はgit add の挙動確認を目的に、add.cのcmd_addを読みました。 そもそも、git addとは、indexファイルにファイル名やらblobを書き込む処理をしている認識です。 あとblob自体の生成もかな。

それで、ここらへんの前提知識はscrapboxにおすすめサイト一覧があるのでそちらにおまかせします!! 僕が書いても薄味にしかならないので...

さて、cmd_addを読んだ感想にいきましょう。 最初なので、git add の中でも blob を生成している箇所を探そうと思っていましたが、全然探せませんでした。 最初にconfigをリロードしているのですが、そちらに時間を取られすぎて全然読めなかった... ただ、add.c:606 で既に addするファイル名は確保しているっぽいです。

(gdb) p pathspec
$12 = {nr = 1, has_wildcard = 0, recursive = 0, recurse_submodules = 0, magic = 0, max_depth = 0, items = 0x5555559f68a0}
(gdb) p pathspec.items 
$13 = (struct pathspec_item *) 0x5555559f68a0
(gdb) p *pathspec.items 
$14 = {match = 0x5555559f26a0 "hoge", original = 0x5555559f63f0 "hoge", magic = 0, len = 4, prefix = 0, nowildcard_len = 4, flags = 0, attr_match_nr = 0, attr_match = 0x0, attr_check = 0x0}
(gdb) 

あと、add.c:474に add_file_to_index という関数を発見。 ただ、そこまでを追った感じだと blob をどこで作っているのかわからなかった。

ここで、blob生成時にSHA1とzlibを使っているはずなので、そこをデバグすればいいじゃんと思いブレークポイントを置こうとしましたが、なぜか置けず。

というところでいい時間だったので切り上げて終わることに。 また次回かなぁ