git hooksでMilkodeとctagsを自動的に設定

Milkode

最近Milkodeというソースコード検索ツールを使ってる。
Rubyで書かれてるし早いっぽいしお気に入り。
Milkode - 行指向のソースコード検索エンジン

git hooksで自動更新

githubからcloneしたコードは基本的にmilkodeに登録したいので、git hooks使ってclone時に追加/pull時に更新したい。

git hooks置き場

template directoryに置いておくことで、新しいgitリポジトリ生成時に勝手にコピーしてくれる。
template directoryの探索順は以下参照。
git-init(1)
デフォルトの/usr/share/git-core/templatesは触りたくないので以下を実行。

$ mkdir -p ~/.git_template/hooks
$ git config --global init.templatedir '~/.git_template' #hooksはつけない

これで~/.git_template以下に置いたhookスクリプトが使われる。

使うgit hooks

git help hooksにいろいろ書いてある。
man page githooks section 5
post-checkoutでclone(ついでにブランチ切り替え)、post-mergeでpullをフックできるっぽい。
~/.git_templateに以下を置いて実行権限つけておく。

~/.git_template/hooks/post-checkout
echo "[hook]milkode add"
milk add .
~/.git_template/hooks/post-merge
echo "[hook]milkode update"
milk update

これで動作する感じ。
ただ、フックのタイミング完全に把握してないので意図しないタイミングで動作する可能性があるし、意図しないリポジトリ(NeoBundleで入れたプラグインとか)も登録される。
工夫すれば解決できると思う。

ctagsも更新

ctagsの生成はvim pluginのvim-tagsでやっている。
https://github.com/szw/vim-tags
タグの生成にはvim上で:TagsGenerateコマンドを実行する必要があるんだけど、git clone後にいちいちvim開きたくないのでこれもgit hooksで更新したい。
vim自体は開かずにvimのコマンドを実行するには起動プションに -c を駆使すればできるっぽい。
Vim documentation: starting

vim -c TagsGenerate -c q

ただし"Vim: Warning: Input is not from a terminal"という警告が出てしまう。
vimの標準入力がターミナルからの入力以外だと出るとのこと、フックスクリプトがどう実行されているのかわからないのでとりあえず放置。
気になるようなら普通に

ctags -R -f .git/tags

あたりを書いておけばいい気がする。

参考にさせていただいた記事

http://qiita.com/quattro_4/items/59fdf8b9aa9ef48ecbdf/