annotate autoload/lawrencium/log.vim @ 155:e52c62ac52fc default tip master

Fixed a couple issues with README
author Zach Wilson <zakrywilson@gmail.com>
date Wed, 19 Jan 2022 11:42:53 -0600
parents 62af332fbf4a
children
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
144
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
3 call lawrencium#add_command("-nargs=* -complete=customlist,lawrencium#log#list_logthis_options Hglogthis :call lawrencium#log#HgLog(0, '%:p', <f-args>)")
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
4 call lawrencium#add_command("-nargs=* -complete=customlist,lawrencium#log#list_logthis_options Hgvlogthis :call lawrencium#log#HgLog(1, '%:p', <f-args>)")
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
5 call lawrencium#add_command("-nargs=* -complete=customlist,lawrencium#log#list_log_options Hglog :call lawrencium#log#HgLog(0, <f-args>)")
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
6 call lawrencium#add_command("-nargs=* -complete=customlist,lawrencium#log#list_log_options Hgvlog :call lawrencium#log#HgLog(1, <f-args>)")
139
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
144
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
37 function! lawrencium#log#list_logthis_options(ArgLead, CmdLine, CursorPos) abort
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
38 if exists('g:lawrencium_hg_commands')
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
39 let l:log_options = copy(g:lawrencium_hg_commands['log'])
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
40 return filter(l:log_options, "v:val[0:strlen(a:ArgLead)-1] ==# a:ArgLead")
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
41 else
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
42 return []
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
43 endif
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
44 endfunction
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
45
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
46 function! lawrencium#log#list_log_options(ArgLead, CmdLine, CursorPos) abort
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
47 let l:res = lawrencium#list_repo_files(a:ArgLead, a:CmdLine, a:CursorPos)
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
48 if exists('g:lawrencium_hg_commands') && strcharpart(a:ArgLead, 0, 1) == '-'
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
49 let l:log_options = copy(g:lawrencium_hg_commands['log'])
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
50 let l:res += filter(l:log_options, "v:val[0:strlen(a:ArgLead)-1] ==# a:ArgLead")
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
51 endif
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
52 return l:res
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
53 endfunction
62af332fbf4a Add options completion for `Hglog` and `Hglogthis`.
Ludovic Chabant <ludovic@chabant.com>
parents: 143
diff changeset
54
139
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55 function! lawrencium#log#HgLog(vertical, ...) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 " 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
57 " (empty string is for the whole repository)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 let l:repo = lawrencium#hg_repo()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 if a:0 > 0 && matchstr(a:1, '\v-*') == ""
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 let l:path = l:repo.GetRelativePath(expand(a:1))
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62 let l:path = ''
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 " Get the Lawrencium path for this `hg log`,
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 " 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
67 if a:0 > 0 && l:path != ""
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 let l:log_opts = join(a:000[1:-1], ',')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 let l:log_opts = join(a:000, ',')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73 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
74 if a:vertical
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75 execute 'vertical pedit ' . fnameescape(l:log_path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77 execute 'pedit ' . fnameescape(l:log_path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
78 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79 wincmd P
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
81 " Add some other nice commands and mappings.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82 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
83 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
84 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
85 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
86 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
87 if l:is_file
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 command! -buffer Hglogrevedit :call s:HgLog_FileRevEdit()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 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
90 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
91 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
92 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
93
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94 if g:lawrencium_define_mappings
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
95 nnoremap <buffer> <silent> <C-U> :Hglogdiffsum<cr>
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96 nnoremap <buffer> <silent> <C-H> :Hglogvdiffsum<cr>
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97 nnoremap <buffer> <silent> <cr> :Hglogvdiffsum<cr>
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 nnoremap <buffer> <silent> q :bdelete!<cr>
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99 if l:is_file
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100 nnoremap <buffer> <silent> <C-E> :Hglogrevedit<cr>
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101 nnoremap <buffer> <silent> <C-D> :Hglogtabdiff<cr>
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102 nnoremap <buffer> <silent> <C-V> :Hglogvdiff<cr>
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
105
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
106 " Clean up when the log buffer is deleted.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107 let l:bufobj = lawrencium#buffer_obj()
140
652a6f5df0f3 Fixed for broken things after the reorganization.
Ludovic Chabant <ludovic@chabant.com>
parents: 139
diff changeset
108 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
109 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
110
140
652a6f5df0f3 Fixed for broken things after the reorganization.
Ludovic Chabant <ludovic@chabant.com>
parents: 139
diff changeset
111 function! lawrencium#log#HgLog_Delete(bufnr)
139
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
112 if g:lawrencium_auto_close_buffers
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
113 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
114 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
115 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
117
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
118 function! s:HgLog_FileRevEdit()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119 let l:repo = lawrencium#hg_repo()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
120 let l:bufobj = lawrencium#buffer_obj()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
121 let l:rev = s:HgLog_GetSelectedRev()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
122 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
123 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
124
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
125 " 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
126 " and open the revision there.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
127 wincmd p
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
128 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
129 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
130
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
131 function! s:HgLog_Diff(split, ...) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
132 let l:revs = []
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
133 if a:0 >= 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
134 let l:revs = [a:1, a:2]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
135 elseif a:0 == 1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
136 let l:revs = ['p1('.a:1.')', a:1]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
137 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
138 let l:sel = s:HgLog_GetSelectedRev()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
139 let l:revs = ['p1('.l:sel.')', l:sel]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
140 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
141
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
142 let l:repo = lawrencium#hg_repo()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
143 let l:bufobj = lawrencium#buffer_obj()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
144 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
145 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
146
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
147 " 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
148 " and open the split diff there.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
149 if a:split < 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
150 wincmd p
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
151 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
152 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
153 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
154
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
155 function! s:HgLog_DiffSummary(split, ...) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
156 let l:revs = []
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
157 if a:0 >= 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
158 let l:revs = [a:1, a:2]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
159 elseif a:0 == 1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
160 let l:revs = [a:1]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
161 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
162 let l:revs = [s:HgLog_GetSelectedRev()]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
163 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
164
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
165 let l:repo = lawrencium#hg_repo()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
166 let l:bufobj = lawrencium#buffer_obj()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
167 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
168 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
169
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
170 " 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
171 " and split for the diff summary from there.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
172 let l:reuse_id = 'lawrencium_diffsum_for_' . bufnr('%')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
173 let l:split_prev_win = (a:split < 3)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
174 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
175 \'split_mode': a:split}
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
176 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
177 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
178
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
179 function! s:HgLog_GetSelectedRev(...) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
180 if a:0 == 1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
181 let l:line = getline(a:1)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
182 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
183 let l:line = getline('.')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
184 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
185 " Behold, Vim's look-ahead regex syntax again! WTF.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
186 let l:rev = matchstr(l:line, '\v^(\d+)(\:)@=')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
187 if l:rev == ''
141
4d5f4233b04e Only set `v:errmsg` for real errors, not exceptions.
Ludovic Chabant <ludovic@chabant.com>
parents: 140
diff changeset
188 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
189 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
190 return l:rev
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
191 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
192
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
193 function! s:HgLog_ExportPatch(...) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
194 let l:patch_name = a:1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
195 if !empty($HG_EXPORT_PATCH_DIR)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
196 " 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
197 if has('win32')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
198 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
199 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
200 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
201 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
202 if l:is_patch_relative
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
203 let l:patch_name = lawrencium#normalizepath(
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
204 lawrencium#stripslash($HG_EXPORT_PATCH_DIR) . "/" . l:patch_name)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
205 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
206 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
207
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
208 if a:0 == 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
209 let l:rev = a:2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
210 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
211 let l:rev = s:HgLog_GetSelectedRev()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
212 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
213
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
214 let l:repo = lawrencium#hg_repo()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
215 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
216
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
217 call l:repo.RunCommand('export', l:export_args)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
218
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
219 echom "Created patch: " . l:patch_name
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
220 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
221