annotate autoload/p44vim.vim @ 1:953baa4a16bb

Print P4's output when trace is enabled.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 24 Sep 2020 22:48:03 -0700
parents 4aede5f1af45
children 74b2ef146e82
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)
1
953baa4a16bb Print P4's output when trace is enabled.
Ludovic Chabant <ludovic@chabant.com>
parents: 0
diff changeset
23 let l:cmd_out = system(l:strcmd)
953baa4a16bb Print P4's output when trace is enabled.
Ludovic Chabant <ludovic@chabant.com>
parents: 0
diff changeset
24 if g:p44v_trace
953baa4a16bb Print P4's output when trace is enabled.
Ludovic Chabant <ludovic@chabant.com>
parents: 0
diff changeset
25 call s:trace(l:cmd_out)
953baa4a16bb Print P4's output when trace is enabled.
Ludovic Chabant <ludovic@chabant.com>
parents: 0
diff changeset
26 endif
953baa4a16bb Print P4's output when trace is enabled.
Ludovic Chabant <ludovic@chabant.com>
parents: 0
diff changeset
27 return l:cmd_out
0
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 endfunction
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 function! s:get_p4_depot_root(path) abort
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 let l:cur = a:path
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32 let l:prev_cur = ''
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 while l:cur != l:prev_cur
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 if filereadable(l:cur.'/.p4config') ||
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 \filereadable(l:cur.'/.p4ignore')
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36 return l:cur
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 endif
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 let l:prev_cur = l:cur
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39 let l:cur = fnamemodify(l:cur, ':h')
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 endwhile
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 call s:throw("No p4 depot found at: ".a:path)
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42 endfunction
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 " }}}
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 " Auto-commands {{{
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 let s:ignore_next_w12 = 0
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:auto_edit_buffer() abort
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51 call p44vim#p4edit()
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 endfunction
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54 function! s:maybe_ignore_w12() abort
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55 if s:ignore_next_w12
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 let v:fcs_choice = '' " Ignore the warning, keep the file.
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 let s:ignore_next_w12 = 0
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 endif
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 endfunction
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 function! p44vim#install_p4_auto_commands() abort
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62 call s:trace("Scanning buffer '".bufname('%')."' for Perforce setup...")
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 try
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 let l:repo_root = s:get_p4_depot_root(expand('%:h'))
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 catch /^p44vim\:/
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 return
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67 endtry
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 let b:p44v_repo_root = l:repo_root
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 call s:trace("Setting up P4 auto-commands for: ".bufname('%'))
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72 augroup p44v_auto
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73 autocmd!
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74 autocmd FileChangedRO * call <SID>auto_edit_buffer()
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75 autocmd FileChangedShell * call <SID>maybe_ignore_w12()
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76 augroup END
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77 endfunction
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
78
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79 " }}}
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
81 " Commands {{{
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83 function! p44vim#p4sync(...) abort
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84 let l:cmd = ['sync'] + a:000
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85 call s:run_perforce_command(l:cmd)
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86 endfunction
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 function! p44vim#p4edit(...) abort
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 if a:0
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
90 let l:filenames = a:000
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
91 else
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
92 let l:filenames = [expand('%:p')]
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
93 endif
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94 let l:cmd = ['edit'] + l:filenames
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
95 let l:ignore_next_w12 = 1
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96 call s:run_perforce_command(l:cmd)
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97 set noreadonly
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 endfunction
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100 function! p44vim#p4revert(...) abort
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101 if a:0
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102 let l:filenames = a:000
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103 else
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104 let l:filenames = [expand('%:p')]
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
105 endif
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
106 let l:cmd = ['revert'] + l:filenames
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107 call s:run_perforce_command(l:cmd)
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
108 silent edit
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
109 endfunction
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
110
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
111 " }}}
4aede5f1af45 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
112