" Plugin to update the %changelog section of RPM spec files " Filename: spec.vim " Maintainer: Gustavo Niemeyer <niemeyer@conectiva.com> " Last Change: 2012 Mar 07 if exists("b:did_ftplugin") finish endif let b:did_ftplugin = 1 let s:cpo_save = &cpo set cpo&vim if !exists("no_plugin_maps") && !exists("no_spec_maps") if !hasmapto("<Plug>SpecChangelog") map <buffer> <LocalLeader>c <Plug>SpecChangelog endif endif noremap <buffer> <unique> <script> <Plug>SpecChangelog :call <SID>SpecChangelog("")<CR> if !exists("*s:SpecChangelog") function s:SpecChangelog(format) let save_time = v:lc_time if strlen(a:format) == 0 if !exists("g:spec_chglog_format") if !exists("g:packager") let email = input("Email address: ") let g:spec_chglog_format = "%a %b %d %Y " . l:email echo "\r" else let email = g:packager let g:spec_chglog_format = "%a %b %d %Y " . l:email echo "\r" endif endif let format = g:spec_chglog_format else if !exists("g:spec_chglog_format") let g:spec_chglog_format = a:format endif let format = a:format endif let line = 0 let name = "" let ver = "" let rel = "" let nameline = -1 let verline = -1 let relline = -1 let chgline = -1 while (line <= line("$")) let linestr = getline(line) if (name == "" && linestr =~? '^Name:') let nameline = line let name = substitute(strpart(linestr,5), '^[ ]*\([^ ]\+\)[ ]*$','\1','') elseif (ver == "" && linestr =~? '^Version:') let verline = line let ver = substitute(strpart(linestr,8), '^[ ]*\([^ ]\+\)[ ]*$','\1','') elseif (rel == "" && linestr =~? '^Release:') let relline = line let rel = substitute(strpart(linestr,8), '^[ ]*\([^ ]\+\)[ ]*$','\1','') elseif (linestr =~? '^%changelog') let chgline = line execute line break endif let line = line+1 endwhile if (nameline != -1 && verline != -1 && relline != -1) let include_release_info = 1 let name = s:ParseRpmVars(name, nameline) let ver = s:ParseRpmVars(ver, verline) let rel = s:ParseRpmVars(rel, relline) else let include_release_info = 0 endif if (chgline == -1) let option = confirm("Can't find %changelog. Create one? ","&End of file\n&Here\n&Cancel",3) if (option == 1) call append(line("$"),"") call append(line("$"),"%changelog") execute line("$") let chgline = line(".") elseif (option == 2) call append(line("."),"%changelog") normal j chgline = line(".") endif endif if (chgline != -1) execute "language time C" let parsed_format = "* ".strftime(format) execute "language time " . save_time let release_info = ver."-".rel let wrong_format = 0 let wrong_release = 0 let insert_line = 0 if (getline(chgline+1) != parsed_format) let wrong_format = 1 endif if (include_release_info && getline(chgline+2) != release_info) let wrong_release = 1 endif if (wrong_format || wrong_release) if (include_release_info && !wrong_release && !exists("g:spec_chglog_never_increase_release")) let option = confirm("Increase release? ","&Yes\n&No",1) if (option == 1) execute relline normal let rel = substitute(strpart(getline(relline),8), '^[ ]*\([^ ]\+\)[ ]*$','\1','') let release_info = ver."-".rel endif endif let n = 0 if include_release_info let parsed_format = parsed_format." ".release_info endif call append(chgline+n, parsed_format) let n = n + 1 call append(chgline+n,"- ") let n = n + 1 call append(chgline+n,"") let insert_line = chgline+n else let line = chgline if !exists("g:spec_chglog_prepend") while !(getline(line+2) =~ '^\( *\|\*.*\)$') let line = line+1 endwhile endif call append(line+1,"- ") let insert_line = line+2 endif execute insert_line startinsert! endif endfunction endif if !exists("*s:ParseRpmVars") function s:ParseRpmVars(str, strline) let end = -1 let ret = "" while (1) let start = match(a:str, "\%{", end+1) if (start == -1) let ret = ret . strpart(a:str, end+1) break endif let ret = ret . strpart(a:str, end+1, start-(end+1)) let end = match(a:str, "}", start) if (end == -1) let ret = ret . strpart(a:str, start) break endif let varname = strpart(a:str, start+2, end-(start+2)) execute a:strline let definestr = "^[ \t]*%define[ \t]\\+" . varname . "[ \t]\\+\\(.*\\)$" let linenum = search(definestr, "bW") if (linenum != -1) let ret = ret . substitute(getline(linenum), definestr, "\\1", "") else let ret = ret . strpart(str, start, end+1-start) endif endwhile return ret endfunction endif " The following lines, along with the macros/matchit.vim plugin, " make it easy to navigate the different sections of a spec file " with the % key (thanks to Max Ischenko). let b:match_ignorecase = 0 let b:match_words = \ '^Name:^%description:^%clean:^%setup:^%build:^%install:^%files:' . \ '^%package:^%preun:^%postun:^%changelog' let &cpo = s:cpo_save unlet s:cpo_save let b:undo_ftplugin = "unlet! b:match_ignorecase b:match_words"
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
README.txt | File | 869 B | 0644 |
|
a2ps.vim | File | 458 B | 0644 |
|
aap.vim | File | 716 B | 0644 |
|
abap.vim | File | 800 B | 0644 |
|
abaqus.vim | File | 3.31 KB | 0644 |
|
ada.vim | File | 6.26 KB | 0644 |
|
alsaconf.vim | File | 426 B | 0644 |
|
ant.vim | File | 1.31 KB | 0644 |
|
arch.vim | File | 419 B | 0644 |
|
art.vim | File | 410 B | 0644 |
|
aspvbs.vim | File | 1.87 KB | 0644 |
|
automake.vim | File | 325 B | 0644 |
|
bdf.vim | File | 437 B | 0644 |
|
bst.vim | File | 333 B | 0644 |
|
btm.vim | File | 316 B | 0644 |
|
c.vim | File | 1.92 KB | 0644 |
|
calendar.vim | File | 450 B | 0644 |
|
cdrdaoconf.vim | File | 375 B | 0644 |
|
ch.vim | File | 472 B | 0644 |
|
changelog.vim | File | 8.54 KB | 0644 |
|
clojure.vim | File | 2.78 KB | 0644 |
|
cobol.vim | File | 9.17 KB | 0644 |
|
conf.vim | File | 422 B | 0644 |
|
config.vim | File | 1.24 KB | 0644 |
|
context.vim | File | 955 B | 0644 |
|
cpp.vim | File | 288 B | 0644 |
|
crm.vim | File | 402 B | 0644 |
|
cs.vim | File | 802 B | 0644 |
|
csc.vim | File | 734 B | 0644 |
|
csh.vim | File | 1.59 KB | 0644 |
|
css.vim | File | 516 B | 0644 |
|
cucumber.vim | File | 5.2 KB | 0644 |
|
cvsrc.vim | File | 387 B | 0644 |
|
debchangelog.vim | File | 11.26 KB | 0644 |
|
debcontrol.vim | File | 1.84 KB | 0644 |
|
denyhosts.vim | File | 375 B | 0644 |
|
dictconf.vim | File | 422 B | 0644 |
|
dictdconf.vim | File | 423 B | 0644 |
|
diff.vim | File | 355 B | 0644 |
|
dircolors.vim | File | 419 B | 0644 |
|
docbk.vim | File | 530 B | 0644 |
|
dosbatch.vim | File | 777 B | 0644 |
|
dosini.vim | File | 446 B | 0644 |
|
dtd.vim | File | 1.1 KB | 0644 |
|
dtrace.vim | File | 1.12 KB | 0644 |
|
elinks.vim | File | 424 B | 0644 |
|
erlang.vim | File | 1.77 KB | 0644 |
|
eruby.vim | File | 3.08 KB | 0644 |
|
eterm.vim | File | 458 B | 0644 |
|
falcon.vim | File | 1.31 KB | 0644 |
|
fetchmail.vim | File | 416 B | 0644 |
|
flexwiki.vim | File | 1.83 KB | 0644 |
|
fortran.vim | File | 4.16 KB | 0644 |
|
framescript.vim | File | 768 B | 0644 |
|
fvwm.vim | File | 390 B | 0644 |
|
git.vim | File | 1.19 KB | 0644 |
|
gitcommit.vim | File | 2.16 KB | 0644 |
|
gitconfig.vim | File | 376 B | 0644 |
|
gitrebase.vim | File | 1.4 KB | 0644 |
|
gitsendemail.vim | File | 157 B | 0644 |
|
gpg.vim | File | 421 B | 0644 |
|
gprof.vim | File | 939 B | 0644 |
|
group.vim | File | 413 B | 0644 |
|
grub.vim | File | 422 B | 0644 |
|
haml.vim | File | 1.84 KB | 0644 |
|
hamster.vim | File | 1.88 KB | 0644 |
|
haskell.vim | File | 433 B | 0644 |
|
help.vim | File | 430 B | 0644 |
|
hostconf.vim | File | 375 B | 0644 |
|
hostsaccess.vim | File | 424 B | 0644 |
|
html.vim | File | 2.87 KB | 0644 |
|
htmldjango.vim | File | 331 B | 0644 |
|
indent.vim | File | 442 B | 0644 |
|
initex.vim | File | 1005 B | 0644 |
|
ishd.vim | File | 1.23 KB | 0644 |
|
java.vim | File | 1.65 KB | 0644 |
|
javascript.vim | File | 1.02 KB | 0644 |
|
jsp.vim | File | 1.96 KB | 0644 |
|
kconfig.vim | File | 375 B | 0644 |
|
kwt.vim | File | 851 B | 0644 |
|
ld.vim | File | 458 B | 0644 |
|
lftp.vim | File | 422 B | 0644 |
|
libao.vim | File | 428 B | 0644 |
|
limits.vim | File | 424 B | 0644 |
|
liquid.vim | File | 1.85 KB | 0644 |
|
lisp.vim | File | 911 B | 0644 |
|
logcheck.vim | File | 500 B | 0644 |
|
loginaccess.vim | File | 430 B | 0644 |
|
logindefs.vim | File | 428 B | 0644 |
|
logtalk.dict | File | 1.75 KB | 0644 |
|
logtalk.vim | File | 401 B | 0644 |
|
lprolog.vim | File | 1.25 KB | 0644 |
|
lua.vim | File | 973 B | 0644 |
|
m4.vim | File | 414 B | 0644 |
|
mail.vim | File | 1.08 KB | 0644 |
|
mailaliases.vim | File | 375 B | 0644 |
|
mailcap.vim | File | 422 B | 0644 |
|
make.vim | File | 935 B | 0644 |
|
man.vim | File | 4.6 KB | 0644 |
|
manconf.vim | File | 432 B | 0644 |
|
markdown.vim | File | 572 B | 0644 |
|
matlab.vim | File | 649 B | 0644 |
|
mf.vim | File | 404 B | 0644 |
|
modconf.vim | File | 465 B | 0644 |
|
mp.vim | File | 621 B | 0644 |
|
mplayerconf.vim | File | 460 B | 0644 |
|
mrxvtrc.vim | File | 798 B | 0644 |
|
msmessages.vim | File | 1.11 KB | 0644 |
|
muttrc.vim | File | 455 B | 0644 |
|
nanorc.vim | File | 435 B | 0644 |
|
netrc.vim | File | 416 B | 0644 |
|
nsis.vim | File | 553 B | 0644 |
|
objc.vim | File | 296 B | 0644 |
|
ocaml.vim | File | 22.5 KB | 0644 |
|
occam.vim | File | 1.27 KB | 0644 |
|
pamconf.vim | File | 421 B | 0644 |
|
pascal.vim | File | 667 B | 0644 |
|
passwd.vim | File | 412 B | 0644 |
|
pdf.vim | File | 2.55 KB | 0644 |
|
perl.vim | File | 2.77 KB | 0644 |
|
perl6.vim | File | 2.47 KB | 0644 |
|
php.vim | File | 2.75 KB | 0644 |
|
pinfo.vim | File | 423 B | 0644 |
|
plaintex.vim | File | 1.12 KB | 0644 |
|
postscr.vim | File | 1006 B | 0644 |
|
procmail.vim | File | 467 B | 0644 |
|
prolog.vim | File | 428 B | 0644 |
|
protocols.vim | File | 445 B | 0644 |
|
pyrex.vim | File | 766 B | 0644 |
|
python.vim | File | 1.33 KB | 0644 |
|
qf.vim | File | 459 B | 0644 |
|
quake.vim | File | 427 B | 0644 |
|
racc.vim | File | 437 B | 0644 |
|
readline.vim | File | 426 B | 0644 |
|
reva.vim | File | 709 B | 0644 |
|
rnc.vim | File | 419 B | 0644 |
|
rpl.vim | File | 620 B | 0644 |
|
rst.vim | File | 444 B | 0644 |
|
ruby.vim | File | 15.48 KB | 0644 |
|
sass.vim | File | 580 B | 0644 |
|
scheme.vim | File | 1.71 KB | 0644 |
|
screen.vim | File | 424 B | 0644 |
|
scss.vim | File | 200 B | 0644 |
|
sensors.vim | File | 443 B | 0644 |
|
services.vim | File | 440 B | 0644 |
|
setserial.vim | File | 427 B | 0644 |
|
sgml.vim | File | 1.18 KB | 0644 |
|
sh.vim | File | 1.17 KB | 0644 |
|
sieve.vim | File | 457 B | 0644 |
|
slpconf.vim | File | 465 B | 0644 |
|
slpreg.vim | File | 464 B | 0644 |
|
slpspi.vim | File | 455 B | 0644 |
|
spec.vim | File | 5.21 KB | 0644 |
|
sql.vim | File | 20.08 KB | 0644 |
|
sshconfig.vim | File | 429 B | 0644 |
|
sudoers.vim | File | 426 B | 0644 |
|
svg.vim | File | 1.17 KB | 0644 |
|
sysctl.vim | File | 441 B | 0644 |
|
tcl.vim | File | 1002 B | 0644 |
|
tcsh.vim | File | 1.18 KB | 0644 |
|
terminfo.vim | File | 418 B | 0644 |
|
tex.vim | File | 1.6 KB | 0644 |
|
treetop.vim | File | 404 B | 0644 |
|
tt2html.vim | File | 434 B | 0644 |
|
udevconf.vim | File | 422 B | 0644 |
|
udevperm.vim | File | 420 B | 0644 |
|
udevrules.vim | File | 414 B | 0644 |
|
updatedb.vim | File | 431 B | 0644 |
|
vb.vim | File | 1.86 KB | 0644 |
|
verilog.vim | File | 1.64 KB | 0644 |
|
vhdl.vim | File | 3.42 KB | 0644 |
|
vim.vim | File | 2.88 KB | 0644 |
|
xdefaults.vim | File | 469 B | 0644 |
|
xf86conf.vim | File | 422 B | 0644 |
|
xhtml.vim | File | 1.99 KB | 0644 |
|
xinetd.vim | File | 464 B | 0644 |
|
xml.vim | File | 1.87 KB | 0644 |
|
xmodmap.vim | File | 422 B | 0644 |
|
xs.vim | File | 465 B | 0644 |
|
xsd.vim | File | 1.14 KB | 0644 |
|
xslt.vim | File | 539 B | 0644 |
|
yaml.vim | File | 452 B | 0644 |
|
zimbu.vim | File | 5.2 KB | 0644 |
|
zsh.vim | File | 674 B | 0644 |
|