1"
2" cream-cream-release.vim -- developer release packager
3"
4" Cream -- An easy-to-use configuration of the famous Vim text  editor
5" [ http://cream.sourceforge.net ] Copyright (C) 2001-2011 Steve Hall
6"
7" License:
8" This program is free software; you can redistribute it and/or modify
9" it under the terms of the GNU General Public License as published by
10" the Free Software Foundation; either version 2 of  the  License,  or
11" (at your option) any later version.
12" [ http://www.gnu.org/licenses/gpl.html ]
13"
14" This program is distributed in the hope that it will be useful,  but
15" WITHOUT  ANY  WARRANTY;  without  even  the  implied   warranty   of
16" MERCHANTABILITY or FITNESS FOR A PARTICULAR  PURPOSE.  See  the  GNU
17" General Public License for more details.
18"
19" You should have received a copy of the GNU  General  Public  License
20" along with  this  program;  if  not,  write  to  the  Free  Software
21" Foundation,  Inc.,  59  Temple  Place  -  Suite  330,   Boston,   MA
22" 02111-1307, USA.
23"
24
25" register as a Cream add-on
26if exists("$CREAM")
27	" don't list unless developer
28	if !exists("g:cream_dev")
29		finish
30	endif
31
32	call Cream_addon_register(
33	\ 'Release',
34	\ 'Create Cream release package',
35	\ 'Create Cream release package',
36	\ 'Cream Devel.Release',
37	\ 'call Cream_release()',
38	\ '<Nil>'
39	\ )
40endif
41
42function! Cream_release()
43" create a Cream release package from a checkout of CVS (g:cream_cvs)
44" Note:  "mkdir" is multi-platform!
45
46	" verify g:cream_cvs exists
47	if !exists("g:cream_cvs")
48		call confirm(
49			\ "Error: g:cream_cvs not found. Quitting...\n" .
50			\ "\n", "&Ok", 1, "Info")
51		return
52	endif
53
54	" dialog which release to use
55	let n = confirm(
56		\ "Please select which release you wish to make.\n" .
57		\ "\n", "&Unix\n&Windows\n&Both\n&Cancel", 1, "Info")
58	if     n == 1
59		let rformat = "unix"
60	elseif n == 2
61		let rformat = "windows"
62	elseif n == 3
63		let rformat = "both"
64	else
65		return
66	endif
67
68	" verify tool sets required to make the platform's release
69	if rformat == "windows"
70		if executable("zip") == 0
71			call confirm(
72				\ "Unable to create final package, utility \"zip\" doesn't exist on the path.\n" .
73				\ "\n", "&Ok", 1, "Info")
74			return
75		endif
76	else
77		" must have both
78		if executable("tar") == 0
79			call confirm(
80				\ "Unable to create final package, utility \"tar\" doesn't exist on the path.\n" .
81				\ "\n", "&Ok", 1, "Info")
82			return
83		endif
84		if executable("gzip") == 0
85			call confirm(
86				\ "Unable to create final package, utility \"gzip\" doesn't exist on the path.\n" .
87				\ "\n", "&Ok", 1, "Info")
88			return
89		endif
90	endif
91
92	" silent actions *related to copying* (optional)
93	"   ""         -- shows prompts, shells
94	"   "silent "  -- avoid prompts, shells
95	"   "silent! " -- avoid prompts, shells and errors
96	let mysilent = ""
97
98	" platform-specifics vars
99	if Cream_has("ms")
100		let slash = '\'
101		let quote = '"'
102		" very important!
103		let myshellslash = &shellslash
104		set noshellslash
105		let copycmd = 'xcopy'
106	else
107		let slash = '/'
108		let quote = ''
109		let copycmd = 'cp -p'
110	endif
111
112	" use periods, Debian requires it
113	"" don't use periods in version indication for file names (we want
114	"" to match CVS tag)
115	"let ver = substitute(g:cream_version_str, '\.', '-', 'g')
116	let ver = g:cream_version_str
117
118	" fix g:cream_cvs name (Windows only)
119	if Cream_has("ms")
120		let cream_cvs = substitute(g:cream_cvs, '/', '\', 'g')
121	else
122		let cream_cvs = g:cream_cvs
123	endif
124	" strip trailing slash
125	let cream_cvs = substitute(cream_cvs, '[\\/]$', '', 'g')
126
127	" make package directory
128	if rformat == "windows"
129		" .\cream (two above module CVS hole)
130		let releasedir = fnamemodify(cream_cvs, ":h:h") . slash . 'release-windows-' . strftime("%Y%m%dT%H%M%S")
131	elseif rformat == "unix"
132		" ./cream-X.XX (two above module CVS hole)
133		let releasedir = fnamemodify(cream_cvs, ":h:h") . slash . 'release-unix-' . strftime("%Y%m%dT%H%M%S")
134	else
135		" ./cream-X.XX (two above module CVS hole)
136		let releasedir = fnamemodify(cream_cvs, ":h:h") . slash . 'release-both-' . strftime("%Y%m%dT%H%M%S")
137	endif
138	execute ':' . mysilent . '!mkdir ' . quote . releasedir . quote
139
140	" make package version directory
141	if rformat == "windows"
142		let releasedir = releasedir . slash . 'cream'
143		execute ':' . mysilent . '!mkdir ' . quote . releasedir . quote
144	else
145		let releasedir = releasedir . slash . 'cream-' . ver
146		execute ':' . mysilent . '!mkdir ' . quote . releasedir . quote
147	endif
148
149	" make subdirectories
150	execute ':' . mysilent . '!mkdir ' . quote . releasedir . slash . 'addons'     . quote
151	execute ':' . mysilent . '!mkdir ' . quote . releasedir . slash . 'bitmaps'    . quote
152	execute ':' . mysilent . '!mkdir ' . quote . releasedir . slash . 'docs'       . quote
153	execute ':' . mysilent . '!mkdir ' . quote . releasedir . slash . 'docs-html'  . quote
154	execute ':' . mysilent . '!mkdir ' . quote . releasedir . slash . 'filetypes'  . quote
155	execute ':' . mysilent . '!mkdir ' . quote . releasedir . slash . 'help'       . quote
156	execute ':' . mysilent . '!mkdir ' . quote . releasedir . slash . 'lang'       . quote
157
158	" copy files (don't just copy the structure, CVS interlaced)
159	execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'creamrc'     . quote . ' ' . quote . releasedir . quote
160	execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . '*.vim'       . quote . ' ' . quote . releasedir . quote
161	execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'cream.svg'   . quote . ' ' . quote . releasedir . quote
162	if rformat == "windows" || rformat == "both"
163		execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'cream.ico'     . quote . ' ' . quote . releasedir . quote
164		execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'INSTALL.bat'   . quote . ' ' . quote . releasedir . quote
165		execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'cream.bat'   . quote . ' ' . quote . releasedir . quote
166	endif
167	if rformat == "unix" || rformat == "both"
168		execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'cream.png'     . quote . ' ' . quote . releasedir . quote
169		execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'INSTALL.sh'    . quote . ' ' . quote . releasedir . quote
170		execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'cream'         . quote . ' ' . quote . releasedir . quote
171		execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'cream.desktop' . quote . ' ' . quote . releasedir . quote
172	endif
173
174	execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'addons'     . slash . '*.vim'  . quote . ' ' . quote . releasedir . slash . 'addons' . quote
175	if     rformat == "windows"
176		let bitmap = '*.bmp'
177	elseif rformat == "unix"
178		let bitmap = '*.xpm'
179	else
180		let bitmap = '*.*'
181	endif
182	execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'bitmaps'    . slash . bitmap                        . quote . ' ' . quote . releasedir . slash . 'bitmaps' . quote
183
184	execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'docs'       . slash . '*.txt'                       . quote . ' ' . quote . releasedir . slash . 'docs'       . quote
185	execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'docs-html'  . slash . '*.html'                      . quote . ' ' . quote . releasedir . slash . 'docs-html'  . quote
186	execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'docs-html'  . slash . '*.php'                       . quote . ' ' . quote . releasedir . slash . 'docs-html'  . quote
187	execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'docs-html'  . slash . '*.png'                       . quote . ' ' . quote . releasedir . slash . 'docs-html'  . quote
188	execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'docs-html'  . slash . '*.gif'                       . quote . ' ' . quote . releasedir . slash . 'docs-html'  . quote
189	execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'docs-html'  . slash . '*.ico'                       . quote . ' ' . quote . releasedir . slash . 'docs-html'  . quote
190	execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'filetypes'  . slash . '*.vim'                       . quote . ' ' . quote . releasedir . slash . 'filetypes'  . quote
191	execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'help'       . slash . '*.txt'                       . quote . ' ' . quote . releasedir . slash . 'help'       . quote
192	execute ':' . mysilent . '!' . copycmd . ' ' . quote . cream_cvs . slash . 'lang'       . slash . '*.vim'                       . quote . ' ' . quote . releasedir . slash . 'lang'       . quote
193	" don't copy cream/views
194
195	" create package
196	if rformat == "windows"
197		execute 'cd ' . fnamemodify(releasedir, ":h")
198		execute ':!zip -r -9 ' . quote . fnamemodify(releasedir, ":h") . slash . 'cream-' . ver . '.zip' . quote . ' ' . quote . 'cream' . quote
199	else
200		execute ':!cd ' . fnamemodify(releasedir, ":h") . '; tar -cvf cream-' . ver . '.tar ' . 'cream-' . ver
201		execute ':!gzip ' . fnamemodify(releasedir, ":h") . slash . 'cream-' . ver . '.tar'
202		" Warning
203		call confirm(
204			\ "VERIFY!\n" .
205			\ " o Permissions on package files and directories\n" .
206			\ " o Line endings on files\n" .
207			\ "\n", "&Ok", 1, "Info")
208	endif
209
210	if exists("myshellslash")
211		let &shellslash = myshellslash
212	endif
213
214endfunction
215
216