cogito で使われるツール群。こちらは C で書かれている。さすがに各操作は高速だが、 とりあえずまともに動いているのかさえ確認できてない、だからここにメモ。
まず read-tree/write-tree と commit-tree の関係と、ファイルの履歴、各バージョンの取得、 差分のとりかたを調べないと・・・。
参考:
$ time git-init-db real 0m0.017s user 0m0.001s sys 0m0.015s $ time git-read-tree real 0m0.446s user 0m0.000s sys 0m0.012s $ cat ../git-add-script #!/bin/sh if [ "$1" ]; then git-update-cache --add -- "$@" else find * -type f | xargs git-update-cache --add -- fi $ time ../git-add-script real 0m45.154s user 0m27.406s sys 0m8.127s $ cat ../git-commit-script #!/bin/sh oldheadstr= if [ -s ".git/HEAD" ]; then oldhead=$(cat .git/HEAD) oldheadstr="-p $oldhead" fi treeid=$(git-write-tree) [ "$treeid" ] || exit 1 LOG=$(tempfile) echo "message." >> $LOG newhead=$(git-commit-tree $treeid $oldhead <$LOG) if [ "$newhead" ]; then echo $newhead > .git/HEAD fi rm $LOG $ time ../git-commit-script real 0m0.687s user 0m0.260s sys 0m0.303s # gcc-3.3.2 で上書き。 # 追加ファイルを登録。 $ time ../git-add-script `cat ../add1.txt` real 0m0.835s user 0m0.057s sys 0m0.064s # 削除されたファイルを反映。 $ time git-update-cache --remove `cat ../del1.txt` real 0m0.070s user 0m0.021s sys 0m0.020s # 差分を取得。 $ time git-diff-cache HEAD real 0m2.094s user 0m0.258s sys 0m0.198s # commit。 $ time ../git-commit-script real 0m3.177s user 0m0.136s sys 0m0.454s # gcc-3.3.4 で上書き。 # 追加ファイルを登録。 $ time ../git-add-script `cat ../add2.txt` real 0m1.256s user 0m0.372s sys 0m0.098s # 削除ファイルを反映。 $ time git-update-cache --remove -- `cat ../del2.txt` real 0m1.066s user 0m0.919s sys 0m0.035s # commit。 $ time ../git-commit-script real 0m3.757s user 0m0.088s sys 0m0.389s