+ bzr.vim
git-svn-id: https://vimsuite.svn.sourceforge.net/svnroot/vimsuite/trunk@173 eb2d0018-73a3-4aeb-bfe9-1def61c9ec69
This commit is contained in:
parent
9b3a2bef4b
commit
e357163cb5
232
vimfiles.stefan/plugin/bzr.vim
Normal file
232
vimfiles.stefan/plugin/bzr.vim
Normal file
@ -0,0 +1,232 @@
|
||||
" ===========================================================================
|
||||
" File: bzr.vim
|
||||
" Author: Stefan Liebl (S.Liebl@gmx.de)
|
||||
" Description: handles version controlling with subversion
|
||||
" ===========================================================================
|
||||
|
||||
if !exists('g:bzr')
|
||||
let g:bzr = 'bzr '
|
||||
endif
|
||||
|
||||
let g:BZRlogfile = fnamemodify(tempname(),':h') . '/BZRmessage.log'
|
||||
|
||||
" --------
|
||||
" commands
|
||||
" --------
|
||||
command -nargs=? BZRdiff silent call s:BZRdiff('<args>')
|
||||
command -nargs=? BZRcommit call s:BZRcommit('<args>')
|
||||
command -nargs=0 BZRstatus call s:BZRstatus()
|
||||
command -nargs=0 BZRupdate call s:BZRupdate()
|
||||
command -nargs=0 BZRlog call s:BZRlog()
|
||||
command -nargs=? BZRadd call s:BZRadd('<args>')
|
||||
command -nargs=0 BZRstudio call s:BZRstudio()
|
||||
|
||||
" ----
|
||||
" Menu
|
||||
" ----
|
||||
let s:BZRMenuLocation = 100
|
||||
let s:BZRmenuname = '&BZR.'
|
||||
|
||||
"-------------------------
|
||||
function s:BZRRedrawMenu()
|
||||
"-------------------------
|
||||
exec 'anoremenu '.s:BZRMenuLocation.'.5 '.s:BZRmenuname.
|
||||
\'&BZRstudio<tab>:BZRstudio'.
|
||||
\' :BZRstudio<CR>'
|
||||
exec 'anoremenu '.s:BZRMenuLocation.'.10 '.s:BZRmenuname.
|
||||
\'&status<tab>:BZRstatus'.
|
||||
\' :BZRstatus<CR>'
|
||||
exec 'anoremenu '.s:BZRMenuLocation.'.15 '.s:BZRmenuname.
|
||||
\'&update<tab>:BZRupdate'.
|
||||
\' :BZRupdate<CR>'
|
||||
exec 'anoremenu '.s:BZRMenuLocation.'.20 '.s:BZRmenuname.
|
||||
\'&diff<tab>:BZRdiff'.
|
||||
\' :BZRdiff<CR>'
|
||||
exec 'anoremenu '.s:BZRMenuLocation.'.30 '.s:BZRmenuname.
|
||||
\'&commit<tab>:BZRcommit'.
|
||||
\' :BZRcommit<CR>'
|
||||
exec 'anoremenu '.s:BZRMenuLocation.'.40 '.s:BZRmenuname.
|
||||
\'&log<tab>:BZRlog'.
|
||||
\' :BZRlog<CR>'
|
||||
exec 'anoremenu '.s:BZRMenuLocation.'.50 '.s:BZRmenuname.
|
||||
\'&add<tab>:BZRadd'.
|
||||
\' :BZRadd<CR>'
|
||||
endfunction
|
||||
|
||||
if !exists('nobzrmenu')
|
||||
call s:BZRRedrawMenu()
|
||||
endif
|
||||
|
||||
"----------------------------
|
||||
function s:BZRcommit(logfile)
|
||||
"----------------------------
|
||||
if filereadable(a:logfile)
|
||||
let options = '--file ' . a:logfile
|
||||
elseif a:logfile == ''
|
||||
let options = ''
|
||||
else
|
||||
echoerr 'Messagefile for BZRcommit not found: ' . a:logfile
|
||||
return
|
||||
endif
|
||||
|
||||
" save all files
|
||||
wa
|
||||
|
||||
let expression = g:bzr . ' commit ' . options
|
||||
echo expression
|
||||
let output = system(expression)
|
||||
echo output
|
||||
let expression = g:bzr . ' update'
|
||||
let output = system(expression)
|
||||
echo output
|
||||
|
||||
if filereadable(a:logfile)
|
||||
call delete(a:logfile)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
"---------------------
|
||||
function s:BZRupdate()
|
||||
"---------------------
|
||||
let expression = g:bzr . ' update'
|
||||
let output = system(expression)
|
||||
echo output
|
||||
endfunction
|
||||
|
||||
"---------------------
|
||||
function s:BZRstatus()
|
||||
"---------------------
|
||||
let expression = g:bzr . ' status'
|
||||
let output = system(expression)
|
||||
echo output
|
||||
endfunction
|
||||
|
||||
"---------------------
|
||||
function s:BZRlog()
|
||||
"---------------------
|
||||
let expression = g:bzr . ' log'
|
||||
let output = system(expression)
|
||||
echo output
|
||||
endfunction
|
||||
|
||||
"------------------------
|
||||
function s:BZRdiff(input)
|
||||
"------------------------
|
||||
" default
|
||||
let revision = ''
|
||||
if a:input == ''
|
||||
" ohne Argument einfach aktuelles File mit Headrevision vergleichen
|
||||
let filename = expand('%:p')
|
||||
else
|
||||
if filereadable(a:input)
|
||||
" mit Filenamen einfach File mit Headrevision vergleichen
|
||||
let filename = a:input
|
||||
elseif str2nr(a:input) == a:input
|
||||
" Argument ist die Revision, mit der verglichen werden soll
|
||||
let revision = '-r '.a:input.' '
|
||||
let filename = expand('%:p')
|
||||
else
|
||||
echo 'Falsches Argument: '.a:input
|
||||
exit
|
||||
endif
|
||||
endif
|
||||
|
||||
if filereadable(filename)
|
||||
" open file in new tab
|
||||
execute 'tabnew ' . filename
|
||||
" store filetype
|
||||
let filetype = &filetype
|
||||
" open headrevision
|
||||
let headrevision = tempname()
|
||||
let command = '!' . g:bzr . 'cat ' . revision . filename . ' > ' . headrevision
|
||||
silent execute command
|
||||
if winnr()==1
|
||||
execute 'vsplit ' . headrevision
|
||||
else
|
||||
wincmd h
|
||||
execute 'view ' . headrevision
|
||||
endif
|
||||
" set filetype
|
||||
let &filetype=filetype
|
||||
diffthis
|
||||
wincmd l
|
||||
diffthis
|
||||
elseif isdirectory(filename)
|
||||
echo filename . ' is a directory'
|
||||
else
|
||||
echoerr 'file ' . filename . ' not found'
|
||||
endif
|
||||
endfunction
|
||||
|
||||
"--------------------------
|
||||
function s:BZRadd(filename)
|
||||
"--------------------------
|
||||
if a:filename == ''
|
||||
let filename = expand('%:p')
|
||||
else
|
||||
let filename = a:filename
|
||||
endif
|
||||
|
||||
let expression = g:bzr . ' add ' . filename
|
||||
echo expression
|
||||
let output = system(expression)
|
||||
echo output
|
||||
endfunction
|
||||
"
|
||||
|
||||
"---------------------
|
||||
function s:BZRstudio()
|
||||
"---------------------
|
||||
" Log-Message unten öffnen
|
||||
setlocal splitbelow
|
||||
silent execute '20split' g:BZRlogfile
|
||||
w
|
||||
|
||||
" Status-Meldung in Temp-File umleiten
|
||||
let tempfile = tempname()
|
||||
" File anzeigen
|
||||
silent execute 'vsplit' tempfile
|
||||
call BZRwriteWindow(tempfile)
|
||||
|
||||
" Show differences
|
||||
nmap <buffer> <CR> :execute 'BZRdiff' BZRstudioGetFilename(getline("."))<CR>
|
||||
nmap <buffer> <C-l> :silent execute '!' . g:BZR . 'status > ' . g:BZRlogfile<CR>
|
||||
nmap <buffer> <C-c> :execute 'BZRcommit' g:BZRlogfile<CR>
|
||||
nmap <buffer> <C-a> :execute 'BZRadd' g:BZRlogfile<CR>
|
||||
nmap <buffer> <C-s> :call BZRwriteWindow(expand('%:p'))<CR>
|
||||
endfunction
|
||||
|
||||
"----------------------------
|
||||
function BZRwriteWindow(file)
|
||||
"----------------------------
|
||||
normal ggdG
|
||||
normal oBZR studio
|
||||
normal ostatus message is displayed in this window
|
||||
normal oenter log message in right hand window
|
||||
normal o
|
||||
normal o<CR> show differences of file under cursor
|
||||
normal o<C-l> copy status-info to log-window
|
||||
normal o<C-c> commit changes with logmessage in right window
|
||||
normal o<C-a> add file under cursor to repository
|
||||
normal o<C-s> update status window
|
||||
normal o
|
||||
normal o-------------------
|
||||
normal o
|
||||
w
|
||||
|
||||
let command = '!' . g:bzr . 'status >> ' . a:file
|
||||
"echo command
|
||||
silent execute command
|
||||
e
|
||||
endfunction
|
||||
|
||||
"---------------------------------
|
||||
function BZRstudioGetFilename(line)
|
||||
"---------------------------------
|
||||
let filename = substitute(a:line, '.\s\+\(.\+\)', '\1', '')
|
||||
return filename
|
||||
endfunction
|
||||
|
||||
|
||||
EchoDebug 'loaded bzr.vim'
|
||||
|
Loading…
x
Reference in New Issue
Block a user