annotate autoload/p44vim.vim @ 0:4aede5f1af45

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