svn.vimをちょっとだけ便利に
svn-diff.vim - Show diff when commiting changes on a subversion repository : vim online
Subversionによるソース管理を行なっているVimmerの多く(?)の方は、svn.vim(svn-diff.vim)を利用されていると思います。
もれなく私も利用していますが、コミット時にsvn diffの結果を表示してくれる非常に便利なプラグインです。
もうちょっとだけ便利に
コミットするファイルの
- svn info情報(コミット先URLだけ)
- 最終コミットログ
も表示するようにしてみました。
以下のように表示されます。
URL: http://svn.com/repos/TestProject/trunk/hoge.pl ------------------------------------------------------------------------ r123 | tekiomo | 2011-01-11 19:43:39 +0900 (火, 11 1月 2011) | 3 lines refs #10 hogeを1個削除 ------------------------------------------------------------------------ URL: http://svn.com/repos/TestProject/trunk/fuga.pl ------------------------------------------------------------------------ r234 | tekiomo | 2011-01-11 19:44:04 +0900 (火, 11 1月 2011) | 3 lines refs #10 fugaを1個追加 ------------------------------------------------------------------------ Index: trunk/hoge.pl =================================================================== --- trunk/hoge.pl (リビジョン 123) +++ trunk/hoge.pl (作業コピー) @@ -12,4 +12,3 @@ hoge hoge -hoge (以下省略)
diff
diffはこんな感じ
$ diff -u svn.vim.org svn.vim --- svn.vim.org 2011-01-11 20:04:36.175583001 +0900 +++ svn.vim 2011-01-11 20:03:31.455583000 +0900 @@ -22,26 +22,33 @@ function! Svn_diff_windows() let i = 0 - let list_of_files = '' + let files = [] while i <= line('$') let line = getline(i) if line =~ '^M' let file = substitute(line, '\v^MM?\s*(.*)\s*$', '\1', '') - let list_of_files = list_of_files . ' '.file + call add(files, file) endif let i = i + 1 endwhile - if list_of_files == "" + if len(files) == 0 return endif + + let list_of_files = join(files, ' ') new silent! setlocal ft=diff previewwindow bufhidden=delete nobackup noswf nobuflisted nowrap buftype=nofile - exe 'normal :r!LANG=C svn diff ' . list_of_files . "\n" + for file in files + execute 'normal :r!LANG=ja_JP.UTF8 svn info ' . file . " | grep 'URL:'\n" + execute 'normal :r!LANG=ja_JP.UTF8 svn log -r PREV:HEAD --limit=1 ' . file . "\n" + endfor + + execute 'normal :r!LANG=ja_JP.UTF8 svn diff ' . list_of_files . "\n" setlocal nomodifiable goto 1 redraw!
svn log部分を直しました
ログを持ってこれないときがあって社長が修正してくださいました。差分は↓です。(上記のdiffは修正済み)
- execute 'normal :r!LANG=ja_JP.UTF8 svn log -r BASE ' . file . "\n" + execute 'normal :r!LANG=ja_JP.UTF8 svn log -r PREV:HEAD --limit=1 ' . file . "\n"
コミット時のミスをちょっとだけ防げるようになるかなーと思います。