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