0
|
1
|
|
2 " Utilities {{{
|
|
3
|
|
4 function! s:trace(msg) abort
|
|
5 if g:p44v_trace
|
|
6 echom "p44vim: ".a:msg
|
|
7 endif
|
|
8 endfunction
|
|
9
|
|
10 function! s:throw(msg) abort
|
|
11 throw "p44vim: ".a:msg
|
|
12 endfunction
|
|
13
|
|
14 function! s:run_perforce_command(...) abort
|
|
15 let l:args = a:000
|
|
16 if a:0 == 1 && type(a:1) == type([])
|
|
17 let l:args = a:1
|
|
18 endif
|
|
19 let l:cmd = ['p4']
|
|
20 call extend(l:cmd, l:args)
|
|
21 let l:strcmd = join(map(l:cmd, 'shellescape(v:val)'))
|
|
22 call s:trace("Running command: ".l:strcmd)
|
|
23 silent call system(l:strcmd)
|
|
24 endfunction
|
|
25
|
|
26 function! s:get_p4_depot_root(path) abort
|
|
27 let l:cur = a:path
|
|
28 let l:prev_cur = ''
|
|
29 while l:cur != l:prev_cur
|
|
30 if filereadable(l:cur.'/.p4config') ||
|
|
31 \filereadable(l:cur.'/.p4ignore')
|
|
32 return l:cur
|
|
33 endif
|
|
34 let l:prev_cur = l:cur
|
|
35 let l:cur = fnamemodify(l:cur, ':h')
|
|
36 endwhile
|
|
37 call s:throw("No p4 depot found at: ".a:path)
|
|
38 endfunction
|
|
39
|
|
40 " }}}
|
|
41
|
|
42 " Auto-commands {{{
|
|
43
|
|
44 let s:ignore_next_w12 = 0
|
|
45
|
|
46 function! s:auto_edit_buffer() abort
|
|
47 call p44vim#p4edit()
|
|
48 endfunction
|
|
49
|
|
50 function! s:maybe_ignore_w12() abort
|
|
51 if s:ignore_next_w12
|
|
52 let v:fcs_choice = '' " Ignore the warning, keep the file.
|
|
53 let s:ignore_next_w12 = 0
|
|
54 endif
|
|
55 endfunction
|
|
56
|
|
57 function! p44vim#install_p4_auto_commands() abort
|
|
58 call s:trace("Scanning buffer '".bufname('%')."' for Perforce setup...")
|
|
59 try
|
|
60 let l:repo_root = s:get_p4_depot_root(expand('%:h'))
|
|
61 catch /^p44vim\:/
|
|
62 return
|
|
63 endtry
|
|
64
|
|
65 let b:p44v_repo_root = l:repo_root
|
|
66 call s:trace("Setting up P4 auto-commands for: ".bufname('%'))
|
|
67
|
|
68 augroup p44v_auto
|
|
69 autocmd!
|
|
70 autocmd FileChangedRO * call <SID>auto_edit_buffer()
|
|
71 autocmd FileChangedShell * call <SID>maybe_ignore_w12()
|
|
72 augroup END
|
|
73 endfunction
|
|
74
|
|
75 " }}}
|
|
76
|
|
77 " Commands {{{
|
|
78
|
|
79 function! p44vim#p4sync(...) abort
|
|
80 let l:cmd = ['sync'] + a:000
|
|
81 call s:run_perforce_command(l:cmd)
|
|
82 endfunction
|
|
83
|
|
84 function! p44vim#p4edit(...) abort
|
|
85 if a:0
|
|
86 let l:filenames = a:000
|
|
87 else
|
|
88 let l:filenames = [expand('%:p')]
|
|
89 endif
|
|
90 let l:cmd = ['edit'] + l:filenames
|
|
91 let l:ignore_next_w12 = 1
|
|
92 call s:run_perforce_command(l:cmd)
|
|
93 set noreadonly
|
|
94 endfunction
|
|
95
|
|
96 function! p44vim#p4revert(...) abort
|
|
97 if a:0
|
|
98 let l:filenames = a:000
|
|
99 else
|
|
100 let l:filenames = [expand('%:p')]
|
|
101 endif
|
|
102 let l:cmd = ['revert'] + l:filenames
|
|
103 call s:run_perforce_command(l:cmd)
|
|
104 silent edit
|
|
105 endfunction
|
|
106
|
|
107 " }}}
|
|
108
|