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を使っているはずなので、そこをデバグすればいいじゃんと思いブレークポイントを置こうとしましたが、なぜか置けず。
というところでいい時間だったので切り上げて終わることに。 また次回かなぁ