redmine 0.9 の git の挙動
せっかくなので、もう少しまとめよう。
0.9 で、ブランチ・タグ対応が、なされたのだが・・・
- 0.9.2 までは、リポジトリからの取得時に「全件」読んでいた。
- これと、DB上のものを比較して無いものは削除、あるものは追加という処理をしている。
- これが、NOT IN 句で比較している。
- 当然、重い。
- 17分だそうだ。Defect #4716: Git repository performance fall on parsing new commits after 0.9.1 update - Redmine
これが、0.9.3 で、DB上に保存されているものから1週間前のものを git から読むという処理に変わった。
なので、件数が多ければ、毎回重いってことは変わらない。
あと、コミットと push のタイミングは違うはずだから・・・
あと、0.9.3 でインデックスがついたんで、マイグレートすれば、速くなるかもしれない。
トランザクションが付いた。これが重要。
つまり、0.9.2 までは、初回も含め、途中でこけたものは、全く保存されていない。
あと、これは未だ変わっていないが、ディレクトリツリーは表示されるのに、リポジトリタブの下に、リビジョンが表示されない場合がある。
これは、表示のたびに git コマンドをたたいて、DBにあるものだけ、つまりブランチにあるものだけ表示させているので、DBが最新のものでない場合、何も表示されない。
追記:
結構トラックバックで来ているみたいで、元のを消しちゃったみたいなんで、送り直し。
http://d.hatena.ne.jp/n314/20100302/1267520236