annotate autoload/lawrencium/log.vim @ 141:4d5f4233b04e

Only set `v:errmsg` for real errors, not exceptions.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 07 Dec 2016 21:33:18 -0800
parents 652a6f5df0f3
children 4aedee2ce476
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
139
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 function! lawrencium#log#init() abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 call lawrencium#add_command("Hglogthis :call lawrencium#log#HgLog(0, '%:p')")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 call lawrencium#add_command("Hgvlogthis :call lawrencium#log#HgLog(1, '%:p')")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 call lawrencium#add_command("-nargs=* -complete=customlist,lawrencium#list_repo_files Hglog :call lawrencium#log#HgLog(0, <f-args>)")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 call lawrencium#add_command("-nargs=* -complete=customlist,lawrencium#list_repo_files Hgvlog :call lawrencium#log#HgLog(1, <f-args>)")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 call lawrencium#add_reader("log", "lawrencium#log#read")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 call lawrencium#add_reader("logpatch", "lawrencium#log#read_patch")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11
140
652a6f5df0f3 Fixed for broken things after the reorganization.
Ludovic Chabant <ludovic@chabant.com>
parents: 139
diff changeset
12 let s:log_style_file = expand("<sfile>:h:h:h") . "/resources/hg_log.style"
139
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 function! lawrencium#log#read(repo, path_parts, full_path) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 let l:log_opts = join(split(a:path_parts['value'], ','))
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 let l:log_cmd = "log " . l:log_opts
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 if a:path_parts['path'] == ''
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 call a:repo.ReadCommandOutput(l:log_cmd, '--style', s:log_style_file)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 call a:repo.ReadCommandOutput(l:log_cmd, '--style', s:log_style_file, a:full_path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 setlocal filetype=hglog
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 function! lawrencium#log#read_patch(repo, path_parts, full_path) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 let l:log_cmd = 'log --patch --verbose --rev ' . a:path_parts['value']
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 if a:path_parts['path'] == ''
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 call a:repo.ReadCommandOutput(l:log_cmd)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32 call a:repo.ReadCommandOutput(l:log_cmd, a:full_path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 setlocal filetype=diff
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 function! lawrencium#log#HgLog(vertical, ...) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 " Get the file or directory to get the log from.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39 " (empty string is for the whole repository)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 let l:repo = lawrencium#hg_repo()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 if a:0 > 0 && matchstr(a:1, '\v-*') == ""
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42 let l:path = l:repo.GetRelativePath(expand(a:1))
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 let l:path = ''
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 " Get the Lawrencium path for this `hg log`,
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 " open it in a preview window and jump to it.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 if a:0 > 0 && l:path != ""
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 let l:log_opts = join(a:000[1:-1], ',')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 let l:log_opts = join(a:000, ',')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55 let l:log_path = l:repo.GetLawrenciumPath(l:path, 'log', l:log_opts)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 if a:vertical
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 execute 'vertical pedit ' . fnameescape(l:log_path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 execute 'pedit ' . fnameescape(l:log_path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 wincmd P
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 " Add some other nice commands and mappings.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 let l:is_file = (l:path != '' && filereadable(l:repo.GetFullPath(l:path)))
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 command! -buffer -nargs=* Hglogdiffsum :call s:HgLog_DiffSummary(1, <f-args>)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 command! -buffer -nargs=* Hglogvdiffsum :call s:HgLog_DiffSummary(2, <f-args>)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67 command! -buffer -nargs=* Hglogtabdiffsum :call s:HgLog_DiffSummary(3, <f-args>)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 command! -buffer -nargs=+ -complete=file Hglogexport :call s:HgLog_ExportPatch(<f-args>)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 if l:is_file
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 command! -buffer Hglogrevedit :call s:HgLog_FileRevEdit()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71 command! -buffer -nargs=* Hglogdiff :call s:HgLog_Diff(0, <f-args>)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72 command! -buffer -nargs=* Hglogvdiff :call s:HgLog_Diff(1, <f-args>)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73 command! -buffer -nargs=* Hglogtabdiff :call s:HgLog_Diff(2, <f-args>)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76 if g:lawrencium_define_mappings
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77 nnoremap <buffer> <silent> <C-U> :Hglogdiffsum<cr>
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
78 nnoremap <buffer> <silent> <C-H> :Hglogvdiffsum<cr>
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79 nnoremap <buffer> <silent> <cr> :Hglogvdiffsum<cr>
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80 nnoremap <buffer> <silent> q :bdelete!<cr>
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
81 if l:is_file
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82 nnoremap <buffer> <silent> <C-E> :Hglogrevedit<cr>
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83 nnoremap <buffer> <silent> <C-D> :Hglogtabdiff<cr>
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84 nnoremap <buffer> <silent> <C-V> :Hglogvdiff<cr>
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 " Clean up when the log buffer is deleted.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 let l:bufobj = lawrencium#buffer_obj()
140
652a6f5df0f3 Fixed for broken things after the reorganization.
Ludovic Chabant <ludovic@chabant.com>
parents: 139
diff changeset
90 call l:bufobj.OnDelete('call lawrencium#log#HgLog_Delete(' . l:bufobj.nr . ')')
139
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
91 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
92
140
652a6f5df0f3 Fixed for broken things after the reorganization.
Ludovic Chabant <ludovic@chabant.com>
parents: 139
diff changeset
93 function! lawrencium#log#HgLog_Delete(bufnr)
139
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94 if g:lawrencium_auto_close_buffers
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
95 call lawrencium#delete_dependency_buffers('lawrencium_diff_for', a:bufnr)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96 call lawrencium#delete_dependency_buffers('lawrencium_rev_for', a:bufnr)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100 function! s:HgLog_FileRevEdit()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101 let l:repo = lawrencium#hg_repo()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102 let l:bufobj = lawrencium#buffer_obj()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103 let l:rev = s:HgLog_GetSelectedRev()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104 let l:log_path = lawrencium#parse_lawrencium_path(l:bufobj.GetName())
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
105 let l:path = l:repo.GetLawrenciumPath(l:log_path['path'], 'rev', l:rev)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
106
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107 " Go to the window we were in before going in the log window,
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
108 " and open the revision there.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
109 wincmd p
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
110 call lawrencium#edit_deletable_buffer('lawrencium_rev_for', l:bufobj.nr, l:path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
111 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
112
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
113 function! s:HgLog_Diff(split, ...) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
114 let l:revs = []
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
115 if a:0 >= 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116 let l:revs = [a:1, a:2]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
117 elseif a:0 == 1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
118 let l:revs = ['p1('.a:1.')', a:1]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
120 let l:sel = s:HgLog_GetSelectedRev()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
121 let l:revs = ['p1('.l:sel.')', l:sel]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
122 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
123
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
124 let l:repo = lawrencium#hg_repo()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
125 let l:bufobj = lawrencium#buffer_obj()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
126 let l:log_path = lawrencium#parse_lawrencium_path(l:bufobj.GetName())
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
127 let l:path = l:repo.GetFullPath(l:log_path['path'])
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
128
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
129 " Go to the window we were in before going to the log window,
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
130 " and open the split diff there.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
131 if a:split < 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
132 wincmd p
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
133 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
134 call lawrencium#diff#HgDiff(l:path, a:split, l:revs)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
135 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
136
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
137 function! s:HgLog_DiffSummary(split, ...) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
138 let l:revs = []
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
139 if a:0 >= 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
140 let l:revs = [a:1, a:2]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
141 elseif a:0 == 1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
142 let l:revs = [a:1]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
143 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
144 let l:revs = [s:HgLog_GetSelectedRev()]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
145 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
146
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
147 let l:repo = lawrencium#hg_repo()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
148 let l:bufobj = lawrencium#buffer_obj()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
149 let l:log_path = lawrencium#parse_lawrencium_path(l:bufobj.GetName())
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
150 let l:path = l:repo.GetFullPath(l:log_path['path'])
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
151
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
152 " Go to the window we were in before going in the log window,
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
153 " and split for the diff summary from there.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
154 let l:reuse_id = 'lawrencium_diffsum_for_' . bufnr('%')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
155 let l:split_prev_win = (a:split < 3)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
156 let l:args = {'reuse_id': l:reuse_id, 'use_prev_win': l:split_prev_win,
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
157 \'split_mode': a:split}
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
158 call lawrencium#diff#HgDiffSummary(l:path, l:args, l:revs)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
159 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
160
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
161 function! s:HgLog_GetSelectedRev(...) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
162 if a:0 == 1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
163 let l:line = getline(a:1)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
164 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
165 let l:line = getline('.')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
166 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
167 " Behold, Vim's look-ahead regex syntax again! WTF.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
168 let l:rev = matchstr(l:line, '\v^(\d+)(\:)@=')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
169 if l:rev == ''
141
4d5f4233b04e Only set `v:errmsg` for real errors, not exceptions.
Ludovic Chabant <ludovic@chabant.com>
parents: 140
diff changeset
170 call lawrencium#throwerr("Can't parse revision number from line: " . l:line)
139
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
171 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
172 return l:rev
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
173 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
174
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
175 function! s:HgLog_ExportPatch(...) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
176 let l:patch_name = a:1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
177 if !empty($HG_EXPORT_PATCH_DIR)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
178 " Use the patch dir only if user has specified a relative path
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
179 if has('win32')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
180 let l:is_patch_relative = (matchstr(l:patch_name, '\v^([a-zA-Z]:)?\\') == "")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
181 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
182 let l:is_patch_relative = (matchstr(l:patch_name, '\v^/') == "")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
183 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
184 if l:is_patch_relative
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
185 let l:patch_name = lawrencium#normalizepath(
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
186 lawrencium#stripslash($HG_EXPORT_PATCH_DIR) . "/" . l:patch_name)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
187 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
188 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
189
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
190 if a:0 == 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
191 let l:rev = a:2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
192 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
193 let l:rev = s:HgLog_GetSelectedRev()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
194 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
195
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
196 let l:repo = lawrencium#hg_repo()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
197 let l:export_args = ['-o', l:patch_name, '-r', l:rev]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
198
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
199 call l:repo.RunCommand('export', l:export_args)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
200
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
201 echom "Created patch: " . l:patch_name
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
202 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
203