annotate runtime/ftplugin/spec.vim @ 5697:c2098c3095e7

Updated runtime files.
author Bram Moolenaar <bram@vim.org>
date Sat, 08 Mar 2014 18:38:28 +0100
parents 94601b379f38
children 3af822eb4da5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1 " Plugin to update the %changelog section of RPM spec files
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 " Filename: spec.vim
5697
c2098c3095e7 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3410
diff changeset
3 " Maintainer: Igor Gnatenko i.gnatenko.brain@gmail.com
c2098c3095e7 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3410
diff changeset
4 " Former Maintainer: Gustavo Niemeyer <niemeyer@conectiva.com> (until March 2014)
c2098c3095e7 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3410
diff changeset
5 " Last Change: Sun Mar 2 11:24 MSK 2014 Igor Gnatenko
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 if exists("b:did_ftplugin")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 finish
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 let b:did_ftplugin = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11
3237
91e53bcb7946 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 7
diff changeset
12 let s:cpo_save = &cpo
91e53bcb7946 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 7
diff changeset
13 set cpo&vim
91e53bcb7946 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 7
diff changeset
14
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15 if !exists("no_plugin_maps") && !exists("no_spec_maps")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 if !hasmapto("<Plug>SpecChangelog")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 map <buffer> <LocalLeader>c <Plug>SpecChangelog
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 noremap <buffer> <unique> <script> <Plug>SpecChangelog :call <SID>SpecChangelog("")<CR>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23 if !exists("*s:SpecChangelog")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 function s:SpecChangelog(format)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 if strlen(a:format) == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 if !exists("g:spec_chglog_format")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 let email = input("Email address: ")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 let g:spec_chglog_format = "%a %b %d %Y " . l:email
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29 echo "\r"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 let format = g:spec_chglog_format
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 if !exists("g:spec_chglog_format")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 let g:spec_chglog_format = a:format
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 let format = a:format
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 let line = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 let name = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40 let ver = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 let rel = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 let nameline = -1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 let verline = -1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 let relline = -1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 let chgline = -1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 while (line <= line("$"))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 let linestr = getline(line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 if (name == "" && linestr =~? '^Name:')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 let nameline = line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 let name = substitute(strpart(linestr,5), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 elseif (ver == "" && linestr =~? '^Version:')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 let verline = line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 let ver = substitute(strpart(linestr,8), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 elseif (rel == "" && linestr =~? '^Release:')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 let relline = line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 let rel = substitute(strpart(linestr,8), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 elseif (linestr =~? '^%changelog')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 let chgline = line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 execute line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 let line = line+1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 if (nameline != -1 && verline != -1 && relline != -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 let include_release_info = exists("g:spec_chglog_release_info")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 let name = s:ParseRpmVars(name, nameline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 let ver = s:ParseRpmVars(ver, verline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 let rel = s:ParseRpmVars(rel, relline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 let include_release_info = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 if (chgline == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 let option = confirm("Can't find %changelog. Create one? ","&End of file\n&Here\n&Cancel",3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 if (option == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75 call append(line("$"),"")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76 call append(line("$"),"%changelog")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77 execute line("$")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78 let chgline = line(".")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 elseif (option == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 call append(line("."),"%changelog")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81 normal j
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 chgline = line(".")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85 if (chgline != -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
86 let parsed_format = "* ".strftime(format)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87 let release_info = "+ ".name."-".ver."-".rel
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88 let wrong_format = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 let wrong_release = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 let insert_line = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 if (getline(chgline+1) != parsed_format)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
92 let wrong_format = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
94 if (include_release_info && getline(chgline+2) != release_info)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 let wrong_release = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
97 if (wrong_format || wrong_release)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 if (include_release_info && !wrong_release && !exists("g:spec_chglog_never_increase_release"))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99 let option = confirm("Increase release? ","&Yes\n&No",1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 if (option == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101 execute relline
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 normal 
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103 let rel = substitute(strpart(getline(relline),8), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 let release_info = "+ ".name."-".ver."-".rel
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 let n = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 call append(chgline+n, parsed_format)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 if include_release_info
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 let n = n + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111 call append(chgline+n, release_info)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113 let n = n + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
114 call append(chgline+n,"- ")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115 let n = n + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 call append(chgline+n,"")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 let insert_line = chgline+n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119 let line = chgline
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 if !exists("g:spec_chglog_prepend")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 while !(getline(line+2) =~ '^\( *\|\*.*\)$')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 let line = line+1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125 call append(line+1,"- ")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
126 let insert_line = line+2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128 execute insert_line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 startinsert!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 if !exists("*s:ParseRpmVars")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 function s:ParseRpmVars(str, strline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136 let end = -1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137 let ret = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138 while (1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 let start = match(a:str, "\%{", end+1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140 if (start == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141 let ret = ret . strpart(a:str, end+1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
143 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144 let ret = ret . strpart(a:str, end+1, start-(end+1))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145 let end = match(a:str, "}", start)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 if (end == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147 let ret = ret . strpart(a:str, start)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 let varname = strpart(a:str, start+2, end-(start+2))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 execute a:strline
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 let definestr = "^[ \t]*%define[ \t]\\+" . varname . "[ \t]\\+\\(.*\\)$"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 let linenum = search(definestr, "bW")
5697
c2098c3095e7 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3410
diff changeset
154 if (linenum == 0)
c2098c3095e7 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3410
diff changeset
155 let definestr = substitute(definestr, "%define", "%global", "")
c2098c3095e7 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3410
diff changeset
156 let linenum = search(definestr, "bW")
c2098c3095e7 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3410
diff changeset
157 endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 if (linenum != -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 let ret = ret . substitute(getline(linenum), definestr, "\\1", "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 let ret = ret . strpart(str, start, end+1-start)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164 return ret
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168 " The following lines, along with the macros/matchit.vim plugin,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169 " make it easy to navigate the different sections of a spec file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170 " with the % key (thanks to Max Ischenko).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 let b:match_ignorecase = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 let b:match_words =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 \ '^Name:^%description:^%clean:^%setup:^%build:^%install:^%files:' .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175 \ '^%package:^%preun:^%postun:^%changelog'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176
3237
91e53bcb7946 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 7
diff changeset
177 let &cpo = s:cpo_save
91e53bcb7946 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 7
diff changeset
178 unlet s:cpo_save
91e53bcb7946 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 7
diff changeset
179
3410
94601b379f38 Updated runtime files. Add Dutch translations.
Bram Moolenaar <bram@vim.org>
parents: 3237
diff changeset
180 let b:undo_ftplugin = "unlet! b:match_ignorecase b:match_words"