I get tired of reading commit messages in email, only to find out that I forgot to review my commit and I did more than I thought. The following should help out with that. As usual, comments about my awful vim code welcome (the strange bindings are due to finger memory).
noremap ,cd :call SourceReview()" cvs diff noremap ,cc :call SourceCommit() " cvs commit let g:source_reviewed = "no" function! SourceReview() :!cvs diff % | less let g:source_reviewed = "yes" endfunction function! SourceCommit() if g:source_reviewed == "yes" let g:source_reviewed = "no" :!EDITOR=/home/cpoe/bin/vim/bin/vim cvs commit % else echohl WarningMsg echo "You cannot commit source code until you review it" echohl None endif endfunction
Next I want to figure out how to block committing code unless I've run the tests first, but my tests are open in a separate terminal window. Thoughts?
Vim has a buffer-local variable b:changedtick
which counts the number of changes made in that buffer.
So instead of the review setting a boolean flag, it could record the current ticks. Then you could making committing only work if the tick count hasn't increased since then.
(Possibly you need to allow a small increase if reviewing or saving or whatever uses up some ticks.)
Re:Counting Ticks
Ovid on 2007-04-20T09:31:56
Thanks. That solved the problem I discovered with my first attempt. All I had to do was review the code once and hours later, after many changes, I could still commit without a review. The b:changedtick ensures that I can't commit unless I review after every change.
noremap,cd :call SourceReview()<cr> " cvs diff
noremap,cc :call SourceCommit()<cr> " cvs commit
let g:last_tick = 0
function! SourceReview()
:!cvs diff % | less
let g:last_tick = b:changedtick
endfunction
function! SourceCommit()
if g:last_tick == b:changedtick
:!EDITOR=/home/cpoe/bin/vim/bin/vim cvs commit %
let g:last_tick = b:changedtick
else
echohl WarningMsg
echo "You cannot commit source code until you review it"
echohl None
endif
endfunction