aboutsummaryrefslogtreecommitdiff
path: root/vim/bundle/vim-gitgutter/autoload/gitgutter/debug.vim
blob: 594f044bac172307ded321a9812136564d99123f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
let s:plugin_dir  = expand('<sfile>:p:h:h:h').'/'
let s:log_file    = s:plugin_dir.'gitgutter.log'
let s:channel_log = s:plugin_dir.'channel.log'
let s:new_log_session = 1


function! gitgutter#debug#debug()
  " Open a scratch buffer
  vsplit __GitGutter_Debug__
  normal! ggdG
  setlocal buftype=nofile
  setlocal bufhidden=delete
  setlocal noswapfile

  call gitgutter#debug#vim_version()
  call gitgutter#debug#separator()

  call gitgutter#debug#git_version()
  call gitgutter#debug#separator()

  call gitgutter#debug#grep_version()
  call gitgutter#debug#separator()

  call gitgutter#debug#option('updatetime')
  call gitgutter#debug#option('shell')
  call gitgutter#debug#option('shellcmdflag')
  call gitgutter#debug#option('shellpipe')
  call gitgutter#debug#option('shellquote')
  call gitgutter#debug#option('shellredir')
  call gitgutter#debug#option('shellslash')
  call gitgutter#debug#option('shelltemp')
  call gitgutter#debug#option('shelltype')
  call gitgutter#debug#option('shellxescape')
  call gitgutter#debug#option('shellxquote')
endfunction


function! gitgutter#debug#separator()
  call gitgutter#debug#output('')
endfunction

function! gitgutter#debug#vim_version()
  redir => version_info
    silent execute 'version'
  redir END
  call gitgutter#debug#output(split(version_info, '\n')[0:2])
endfunction

function! gitgutter#debug#git_version()
  let v = system(g:gitgutter_git_executable.' --version')
  call gitgutter#debug#output( substitute(v, '\n$', '', '') )
endfunction

function! gitgutter#debug#grep_version()
  let v = system('grep --version')
  call gitgutter#debug#output( substitute(v, '\n$', '', '') )

  let v = system('grep --help')
  call gitgutter#debug#output( substitute(v, '\%x00', '', 'g') )
endfunction

function! gitgutter#debug#option(name)
  if exists('+' . a:name)
    let v = eval('&' . a:name)
    call gitgutter#debug#output(a:name . '=' . v)
    " redir => output
    "   silent execute "verbose set " . a:name . "?"
    " redir END
    " call gitgutter#debug#output(a:name . '=' . output)
  else
    call gitgutter#debug#output(a:name . ' [n/a]')
  end
endfunction

function! gitgutter#debug#output(text)
  call append(line('$'), a:text)
endfunction

" assumes optional args are calling function's optional args
function! gitgutter#debug#log(message, ...) abort
  if g:gitgutter_log
    if s:new_log_session && gitgutter#async#available()
      if exists('*ch_logfile')
        call ch_logfile(s:channel_log, 'w')
      endif
    endif

    execute 'redir >> '.s:log_file
      if s:new_log_session
        let s:start = reltime()
        silent echo "\n==== start log session ===="
      endif

      let elapsed = reltimestr(reltime(s:start)).' '
      silent echo ''
      " callers excluding this function
      silent echo elapsed.expand('<sfile>')[:-22].':'
      silent echo elapsed.s:format_for_log(a:message)
      if a:0 && !empty(a:1)
        for msg in a:000
          silent echo elapsed.s:format_for_log(msg)
        endfor
      endif
    redir END

    let s:new_log_session = 0
  endif
endfunction

function! s:format_for_log(data) abort
  if type(a:data) == 1
    return join(split(a:data,'\n'),"\n")
  elseif type(a:data) == 3
    return '['.join(a:data,"\n").']'
  else
    return a:data
  endif
endfunction