Annotation of /trunk/mage/usr/lib/mage/convert_databases.sh
Parent Directory | Revision Log
Revision 1642 -
(hide annotations)
(download)
(as text)
Fri Jan 13 18:37:52 2012 UTC (12 years, 8 months ago) by niro
File MIME type: application/x-sh
File size: 12013 byte(s)
Fri Jan 13 18:37:52 2012 UTC (12 years, 8 months ago) by niro
File MIME type: application/x-sh
File size: 12013 byte(s)
-honor the PCATEGORIE deprecation and make the scripts work with the latest changes to smage/mage
1 | niro | 487 | #!/bin/bash |
2 | |||
3 | niro | 1642 | : ${MAGERC="/etc/mage.rc"} |
4 | |||
5 | niro | 487 | source /etc/mage.rc.global |
6 | niro | 1642 | source ${MAGERC} |
7 | niro | 487 | source ${MLIBDIR}/mage4.functions.sh |
8 | niro | 1642 | source ${MLIBDIR}/smage2.functions.sh |
9 | niro | 487 | source ${MLIBDIR}/sql_functions.sh |
10 | |||
11 | die() | ||
12 | { | ||
13 | echo -e "Exited ${BASH_SOURCE} at line no ${BASH_LINENO}." | ||
14 | echo -e "$@" | ||
15 | exit 1 | ||
16 | } | ||
17 | |||
18 | sql() | ||
19 | { | ||
20 | local sqlcmd="$*" | ||
21 | [[ -z ${sqlcmd} ]] && die "no sqlcmd given." | ||
22 | |||
23 | sqlite3 -nullvalue 'NULL' -list -separator '|' ${DBFILE} << EOF || die "error running '$@'" | ||
24 | ${sqlcmd}; | ||
25 | EOF | ||
26 | } | ||
27 | |||
28 | create_database_layout() | ||
29 | { | ||
30 | sql "create table categories(id integer primary key, pcat text unique)" | ||
31 | sql "create table packages(id integer primary key, | ||
32 | pname text, | ||
33 | pver text, | ||
34 | pbuild text, | ||
35 | pcat_id numeric, | ||
36 | state text, | ||
37 | provide text, | ||
38 | pkgtype text | ||
39 | )" | ||
40 | sql "create table depends(id integer primary key, pkg_id numeric, relation text, pcat_id numeric, pname text, pver text, pbuild text)" | ||
41 | sql "create table sdepends(id integer primary key, pkg_id numeric, relation text, pcat_id numeric, pname text, pver text, pbuild text)" | ||
42 | sql "create table packages_info(id integer primary key, pkg_id numeric, arch text, md5 text, mtime numeric, homepage text, description text, size numeric)" | ||
43 | #sql "create table packages_content(id integer primary key, pkginfo_id numeric, char text, dirs text, files text, pipes text, symlinks text)" | ||
44 | sql "create table packages_content(id integer primary key, pkginfo_id numeric, char blob, dirs blob, files blob, pipes blob, symlinks blob)" | ||
45 | sql "create table packages_routines(id integer primary key, | ||
46 | pkg_id numeric, | ||
47 | mincludes text, | ||
48 | preinstall text, | ||
49 | postinstall text, | ||
50 | preremove text, | ||
51 | postremove text, | ||
52 | extra_functions text, | ||
53 | extra_vars text)" | ||
54 | } | ||
55 | |||
56 | convert_mage_db() | ||
57 | { | ||
58 | local i | ||
59 | local magefile | ||
60 | local pcat | ||
61 | local pname | ||
62 | local pver | ||
63 | local pbuild | ||
64 | local pcatid | ||
65 | local state | ||
66 | local preinstall | ||
67 | local postinstall | ||
68 | local preremove | ||
69 | local postremove | ||
70 | local pkgid | ||
71 | local dep | ||
72 | local PKGNAME | ||
73 | local STATE | ||
74 | local DESCRIPTION | ||
75 | local HOMEPAGE | ||
76 | local DEPEND | ||
77 | local SDEPEND | ||
78 | local PROVIDE | ||
79 | local PKGTYPE | ||
80 | local preinstall | ||
81 | local postinstall | ||
82 | local preremove | ||
83 | local postremove | ||
84 | local sym | ||
85 | local depname | ||
86 | local depver | ||
87 | local depbuild | ||
88 | local depcat | ||
89 | local depcatid | ||
90 | local md5file | ||
91 | local md5sum | ||
92 | |||
93 | # create categories | ||
94 | for i in virtual ${MAGEDIR}/* | ||
95 | do | ||
96 | pcat="$(basename ${i})" | ||
97 | case ${pcat} in | ||
98 | include|profiles) continue;; | ||
99 | esac | ||
100 | |||
101 | sql "insert into categories (pcat) values('${pcat}')" | ||
102 | done | ||
103 | |||
104 | # create packages | ||
105 | for magefile in $(find ${MAGEDIR} -type f -name *.mage| sort) | ||
106 | do | ||
107 | case ${DEBUG} in | ||
108 | 1|true) echo "converting ${magefile}" ;; | ||
109 | esac | ||
110 | pcat="$(magename2pcat ${magefile})" | ||
111 | pname="$(magename2pname ${magefile})" | ||
112 | pver="$(magename2pver ${magefile})" | ||
113 | pbuild="$(magename2pbuild ${magefile})" | ||
114 | # substitute r from pbuild | ||
115 | pbuild="${pbuild/r/}" | ||
116 | |||
117 | niro | 1642 | smagesource ${magefile} |
118 | niro | 487 | |
119 | pcatid=$(sql "select id from categories where pcat='${pcat}'") | ||
120 | sql "insert into packages( | ||
121 | pname, | ||
122 | pver, | ||
123 | pbuild, | ||
124 | pcat_id, | ||
125 | state, | ||
126 | provide, | ||
127 | pkgtype | ||
128 | ) | ||
129 | values( | ||
130 | '${pname}', | ||
131 | '${pver}', | ||
132 | '${pbuild}', | ||
133 | '${pcatid}', | ||
134 | '${STATE}', | ||
135 | '${PROVIDE}', | ||
136 | '${PKGTYPE}' | ||
137 | )" | ||
138 | |||
139 | pkgid=$(sql "select id from packages where pname='${pname}' and pver='${pver}' and pbuild='${pbuild}'") | ||
140 | # depends | ||
141 | while read sym dep | ||
142 | do | ||
143 | [[ -z ${dep} ]] && continue | ||
144 | depcat="$(dep2pcat ${dep})" | ||
145 | depcatid=$(sql "select id from categories where pcat='${depcat}'") | ||
146 | depname="$(dep2pname ${dep})" | ||
147 | depver="$(dep2pver ${dep})" | ||
148 | sql "insert into depends(pkg_id, | ||
149 | relation, | ||
150 | pcat_id, | ||
151 | pname, | ||
152 | pver, | ||
153 | pbuild) | ||
154 | values('${pkgid}', | ||
155 | '${sym}', | ||
156 | '${depcatid}', | ||
157 | '${depname}', | ||
158 | '${depver}', | ||
159 | '${depbuild}')" | ||
160 | done << EOF | ||
161 | ${DEPEND} | ||
162 | EOF | ||
163 | # sdepends | ||
164 | while read sym dep | ||
165 | do | ||
166 | [[ -z ${dep} ]] && continue | ||
167 | depcat="$(dep2pcat ${dep})" | ||
168 | depcatid=$(sql "select id from categories where pcat='${depcat}'") | ||
169 | depname="$(dep2pname ${dep})" | ||
170 | depver="$(dep2pver ${dep})" | ||
171 | sql "insert into sdepends(pkg_id, | ||
172 | relation, | ||
173 | pcat_id, | ||
174 | pname, | ||
175 | pver, | ||
176 | pbuild) | ||
177 | values('${pkgid}', | ||
178 | '${sym}', | ||
179 | '${depcatid}', | ||
180 | '${depname}', | ||
181 | '${depver}', | ||
182 | '${depbuild}')" | ||
183 | done << EOF | ||
184 | ${SDEPEND} | ||
185 | EOF | ||
186 | |||
187 | for arch in i686 x86_64 | ||
188 | do | ||
189 | md5file="${MAGEDIR}/${pcat}/${pname}/md5/${pname}-${pver}-${arch}-r${pbuild}.md5" | ||
190 | [[ -f ${md5file} ]] && md5sum="$(cat ${md5file} | cut -d' ' -f1)" | ||
191 | |||
192 | # fix descriptions | ||
193 | DESCRIPTION="$(echo ${DESCRIPTION} | sed s:\':\'\':g)" | ||
194 | |||
195 | sql "insert into packages_info(pkg_id, arch, md5, description, homepage) | ||
196 | values('${pkgid}','${arch}','${md5sum}','${DESCRIPTION}','${HOMEPAGE}')" | ||
197 | done | ||
198 | |||
199 | mincludes="$(grep -r 'minclude ' ${magefile} | cut -d: -f2 | sed s:minclude\ ::)" | ||
200 | |||
201 | niro | 488 | # |
202 | niro | 487 | # install routines & includes |
203 | niro | 488 | # |
204 | # needs special magic: the last line of typeset has no ';' | ||
205 | # but to eval the function we must append it | ||
206 | # so this sed deletes the last line of the typeset output | ||
207 | # and replaces it with an ;} and a newline between | ||
208 | # | ||
209 | # but we will not add this fun when no postinstall etc are given | ||
210 | # -> [[ -n $(typeset -f postinstall ]] && | ||
211 | # | ||
212 | # also the character ' is a problem while importing to sql | ||
213 | # because we use ' as escape char. so we replace it with '' | ||
214 | # | ||
215 | # $([[ -n $(typeset -f postinstall) ]] && echo -e "$(typeset -f postinstall | sed s:\':\'\':g | sed '$d');\n}") | ||
216 | # | ||
217 | niro | 487 | sql "insert into packages_routines(pkg_id, |
218 | mincludes, | ||
219 | postinstall, | ||
220 | preinstall, | ||
221 | preremove, | ||
222 | postremove) | ||
223 | values('${pkgid}', | ||
224 | '${mincludes}', | ||
225 | niro | 488 | '$([[ -n $(typeset -f postinstall) ]] && echo -e "$(typeset -f postinstall | sed s:\':\'\':g | sed '$d');\n}")', |
226 | '$([[ -n $(typeset -f preinstall) ]] && echo -e "$(typeset -f preinstall | sed s:\':\'\':g | sed '$d');\n}")', | ||
227 | '$([[ -n $(typeset -f preremove) ]] && echo -e "$(typeset -f preremove | sed s:\':\'\':g | sed '$d');\n}")', | ||
228 | '$([[ -n $(typeset -f postremove) ]] && echo -e "$(typeset -f postremove | sed s:\':\'\':g | sed '$d');\n}")')" | ||
229 | niro | 487 | |
230 | unset PKGNAME | ||
231 | unset DEPEND | ||
232 | unset SDEPEND | ||
233 | unset PROVIDE | ||
234 | |||
235 | # unset these functions | ||
236 | unset -f preinstall | ||
237 | unset -f postinstall | ||
238 | unset -f preremove | ||
239 | unset -f postremove | ||
240 | done | ||
241 | } | ||
242 | |||
243 | |||
244 | convert_install_db() | ||
245 | { | ||
246 | local i | ||
247 | local magefile | ||
248 | local pcat | ||
249 | local pname | ||
250 | local pver | ||
251 | local pbuild | ||
252 | local pcatid | ||
253 | local state | ||
254 | local preinstall | ||
255 | local postinstall | ||
256 | local preremove | ||
257 | local postremove | ||
258 | local pkgid | ||
259 | local dep | ||
260 | local PKGNAME | ||
261 | local STATE | ||
262 | local DESCRIPTION | ||
263 | local HOMEPAGE | ||
264 | local DEPEND | ||
265 | local SDEPEND | ||
266 | local PROVIDE | ||
267 | local PKGTYPE | ||
268 | local preinstall | ||
269 | local postinstall | ||
270 | local preremove | ||
271 | local postremove | ||
272 | local sym | ||
273 | local depname | ||
274 | local depver | ||
275 | local depbuild | ||
276 | local depcat | ||
277 | local depcatid | ||
278 | local md5file | ||
279 | local md5sum | ||
280 | local pkginfoid | ||
281 | local entrydir | ||
282 | |||
283 | # create categories | ||
284 | for i in virtual ${INSTALLDB}/* | ||
285 | do | ||
286 | pcat="$(basename ${i})" | ||
287 | case ${pcat} in | ||
288 | include|profiles) continue;; | ||
289 | esac | ||
290 | |||
291 | sql "insert into categories (pcat) values('${pcat}')" | ||
292 | done | ||
293 | |||
294 | # create packages | ||
295 | for magefile in $(find ${INSTALLDB} -type f -name *.mage| sort) | ||
296 | do | ||
297 | case ${DEBUG} in | ||
298 | 1|true) echo "converting ${magefile}" ;; | ||
299 | esac | ||
300 | |||
301 | pcat="$(magename2pcat ${magefile})" | ||
302 | pname="$(magename2pname ${magefile})" | ||
303 | pver="$(magename2pver ${magefile})" | ||
304 | pbuild="$(magename2pbuild ${magefile})" | ||
305 | # substitute r from pbuild | ||
306 | pbuild="${pbuild/r/}" | ||
307 | |||
308 | source ${magefile} | ||
309 | |||
310 | pcatid=$(sql "select id from categories where pcat='${pcat}'") | ||
311 | sql "insert into packages( | ||
312 | pname, | ||
313 | pver, | ||
314 | pbuild, | ||
315 | pcat_id, | ||
316 | state, | ||
317 | provide, | ||
318 | pkgtype | ||
319 | ) | ||
320 | values( | ||
321 | '${pname}', | ||
322 | '${pver}', | ||
323 | '${pbuild}', | ||
324 | '${pcatid}', | ||
325 | '${STATE}', | ||
326 | '${PROVIDE}', | ||
327 | '${PKGTYPE}' | ||
328 | )" | ||
329 | |||
330 | pkgid=$(sql "select id from packages where pname='${pname}' and pver='${pver}' and pbuild='${pbuild}'") | ||
331 | # depends | ||
332 | while read sym dep | ||
333 | do | ||
334 | [[ -z ${dep} ]] && continue | ||
335 | depcat="$(dep2pcat ${dep})" | ||
336 | depcatid=$(sql "select id from categories where pcat='${depcat}'") | ||
337 | depname="$(dep2pname ${dep})" | ||
338 | depver="$(dep2pver ${dep})" | ||
339 | sql "insert into depends(pkg_id, | ||
340 | relation, | ||
341 | pcat_id, | ||
342 | pname, | ||
343 | pver, | ||
344 | pbuild) | ||
345 | values('${pkgid}', | ||
346 | '${sym}', | ||
347 | '${depcatid}', | ||
348 | '${depname}', | ||
349 | '${depver}', | ||
350 | '${depbuild}')" | ||
351 | done << EOF | ||
352 | ${DEPEND} | ||
353 | EOF | ||
354 | # sdepends | ||
355 | while read sym dep | ||
356 | do | ||
357 | [[ -z ${dep} ]] && continue | ||
358 | depcat="$(dep2pcat ${dep})" | ||
359 | depcatid=$(sql "select id from categories where pcat='${depcat}'") | ||
360 | depname="$(dep2pname ${dep})" | ||
361 | depver="$(dep2pver ${dep})" | ||
362 | sql "insert into sdepends(pkg_id, | ||
363 | relation, | ||
364 | pcat_id, | ||
365 | pname, | ||
366 | pver, | ||
367 | pbuild) | ||
368 | values('${pkgid}', | ||
369 | '${sym}', | ||
370 | '${depcatid}', | ||
371 | '${depname}', | ||
372 | '${depver}', | ||
373 | '${depbuild}')" | ||
374 | done << EOF | ||
375 | ${SDEPEND} | ||
376 | EOF | ||
377 | |||
378 | DESCRIPTION="$(echo ${DESCRIPTION} | sed s:\':\'\':g)" | ||
379 | sql "insert into packages_info(pkg_id, arch, md5, description, homepage) | ||
380 | values('${pkgid}','${ARCH}','${md5sum}','${DESCRIPTION}','${HOMEPAGE}')" | ||
381 | |||
382 | |||
383 | # install routines & includes | ||
384 | sql "insert into packages_routines(pkg_id, | ||
385 | mincludes, | ||
386 | postinstall, | ||
387 | preinstall, | ||
388 | preremove, | ||
389 | postremove) | ||
390 | values('${pkgid}', | ||
391 | '${mincludes}', | ||
392 | '$(typeset -f postinstall | sed s:\':\'\':g)', | ||
393 | '$(typeset -f preinstall | sed s:\':\'\':g)', | ||
394 | '$(typeset -f preremove | sed s:\':\'\':g)', | ||
395 | '$(typeset -f postremove | sed s:\':\'\':g)')" | ||
396 | |||
397 | #### #### | ||
398 | # record contents # | ||
399 | #### #### | ||
400 | pkginfoid=$(sql "select id from packages_info where pkg_id='${pkgid}' and arch='${ARCH}'") | ||
401 | entrydir="$(dirname ${magefile})" | ||
402 | # sql "insert into packages_content(pkginfo_id, | ||
403 | # char, | ||
404 | # dirs, | ||
405 | # files, | ||
406 | # pipes, | ||
407 | # symlinks) | ||
408 | # values('${pkginfoid}', | ||
409 | # '$(< ${entrydir}/.char)', | ||
410 | # '$(< ${entrydir}/.dirs)', | ||
411 | # '$(< ${entrydir}/.files)', | ||
412 | # '$(< ${entrydir}/.pipes)', | ||
413 | # '$(< ${entrydir}/.symlinks)')" | ||
414 | sql "insert into packages_content(pkginfo_id, | ||
415 | char, | ||
416 | dirs, | ||
417 | files, | ||
418 | pipes, | ||
419 | symlinks) | ||
420 | values('${pkginfoid}', | ||
421 | 'records/${pkginfoid}/char.bz2', | ||
422 | 'records/${pkginfoid}/dirs.bz2', | ||
423 | 'records/${pkginfoid}/files.bz2', | ||
424 | 'records/${pkginfoid}/pipes.bz2', | ||
425 | 'records/${pkginfoid}/symlinks.bz2')" | ||
426 | # create compressed content files | ||
427 | local entryfile | ||
428 | for entryfile in char dirs files pipes symlinks | ||
429 | do | ||
430 | install -d $(dirname ${DBFILE})/records/${pkginfoid} | ||
431 | cat ${entrydir}/.${entryfile} | bzip2 -9 >> $(dirname ${DBFILE})/records/${pkginfoid}/${entryfile}.bz2 | ||
432 | done | ||
433 | |||
434 | unset PKGNAME | ||
435 | unset DEPEND | ||
436 | unset SDEPEND | ||
437 | unset PROVIDE | ||
438 | |||
439 | # unset these functions | ||
440 | unset -f preinstall | ||
441 | unset -f postinstall | ||
442 | unset -f preremove | ||
443 | unset -f postremove | ||
444 | done | ||
445 | } | ||
446 | |||
447 | convert_virtual_defaults() | ||
448 | { | ||
449 | local virtual | ||
450 | local package | ||
451 | local vcat | ||
452 | local vname | ||
453 | local pcat | ||
454 | local pname | ||
455 | |||
456 | sql "create table virtual_defaults(id integer primary key, vcat text,vname text, pcat text, pname text)" | ||
457 | |||
458 | while read virtual package | ||
459 | do | ||
460 | vcat="$(dirname ${virtual})" | ||
461 | vname="$(basename ${virtual})" | ||
462 | pcat="$(dirname ${package})" | ||
463 | pname="$(basename ${package})" | ||
464 | |||
465 | sql "insert into virtual_defaults(vcat,vname,pcat,pname) values('${vcat}','${vname}','${pcat}','${pname}')" | ||
466 | done < /etc/mage-profile/virtuals.defaults | ||
467 | } | ||
468 | |||
469 | |||
470 | # packages db | ||
471 | #DBFILE=/home/tjoke/DATABASES/mage6.sql | ||
472 | #create_database_layout | ||
473 | #convert_mage_db | ||
474 | |||
475 | # virtual default | ||
476 | #DBFILE=/home/tjoke/DATABASES/virtuals6.sql | ||
477 | #convert_virtual_defaults | ||
478 | |||
479 | # # install db | ||
480 | # DBFILE=/home/tjoke/DATABASES/install6.sql | ||
481 | # create_database_layout | ||
482 | # convert_install_db | ||
483 | |||
484 | |||
485 | METHOD="$1" | ||
486 | DBFILE="$2" | ||
487 | |||
488 | [[ -z ${METHOD} ]] && die "No method given. Use --install, --packages or --virtual for your appropiate task" | ||
489 | [[ -z ${DBFILE} ]] && die "No database given." | ||
490 | |||
491 | case $1 in | ||
492 | --install|-i) | ||
493 | create_database_layout | ||
494 | convert_install_db | ||
495 | ;; | ||
496 | --packages|-p) | ||
497 | create_database_layout | ||
498 | convert_mage_db | ||
499 | ;; | ||
500 | --virtuals|-v) | ||
501 | convert_virtual_defaults | ||
502 | ;; | ||
503 | *) die "Unkown method." ;; | ||
504 | esac |
Properties
Name | Value |
---|---|
svn:executable | * |