Contents of /trunk/mage/usr/lib/mage/convert_databases_smage.sh
Parent Directory | Revision Log
Revision 1642 -
(show annotations)
(download)
(as text)
Fri Jan 13 18:37:52 2012 UTC (12 years, 5 months ago) by niro
File MIME type: application/x-sh
File size: 14168 byte(s)
Fri Jan 13 18:37:52 2012 UTC (12 years, 5 months ago) by niro
File MIME type: application/x-sh
File size: 14168 byte(s)
-honor the PCATEGORIE deprecation and make the scripts work with the latest changes to smage/mage
1 | #!/bin/bash |
2 | |
3 | : ${MAGERC="/etc/mage.rc"} |
4 | |
5 | source /etc/mage.rc.global |
6 | source ${MAGERC} |
7 | source ${MLIBDIR}/mage4.functions.sh |
8 | source ${MLIBDIR}/smage2.functions.sh |
9 | 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 | sql "create table packages_routines(id integer primary key, |
55 | pkg_id numeric, |
56 | mincludes text, |
57 | preinstall numeric, |
58 | postinstall numeric, |
59 | preremove numeric, |
60 | postremove numeric, |
61 | script text)" |
62 | } |
63 | |
64 | convert_smage_db() |
65 | { |
66 | local i |
67 | local smagefile |
68 | local PCAT |
69 | local PNAME |
70 | local PVER |
71 | local PBUILD |
72 | local pcatid |
73 | local STATE |
74 | local pkgid |
75 | local dep |
76 | local PKGNAME |
77 | local DESCRIPTION |
78 | local HOMEPAGE |
79 | local DEPEND |
80 | local SDEPEND |
81 | local PROVIDE |
82 | local PKGTYPE |
83 | local preinstall |
84 | local postinstall |
85 | local preremove |
86 | local postremove |
87 | local sym |
88 | local depname |
89 | local depver |
90 | local depbuild |
91 | local depcat |
92 | local depcatid |
93 | local md5file |
94 | local md5sum |
95 | |
96 | # create categories |
97 | cat ${SMAGESCRIPTSDIR}/.known_categories | while read pcat |
98 | do |
99 | case ${pcat} in |
100 | include|profiles) continue;; |
101 | esac |
102 | |
103 | sql "insert into categories (pcat) values('${pcat}')" |
104 | done |
105 | |
106 | # create packages |
107 | for smagefile in $(find ${SMAGESCRIPTSDIR}/glibc-nptl -type f -name '*'.smage2 | sort) |
108 | do |
109 | case ${DEBUG} in |
110 | 1|true) echo "converting ${smagefile}" ;; |
111 | esac |
112 | |
113 | smagesource ${smagefile} |
114 | |
115 | # substitute r from pbuild |
116 | PBUILD="${PBUILD/r/}" |
117 | |
118 | pcatid=$(sql "select id from categories where pcat='${PCAT}'") |
119 | sql "insert into packages( |
120 | pname, |
121 | pver, |
122 | pbuild, |
123 | pcat_id, |
124 | state, |
125 | provide, |
126 | pkgtype |
127 | ) |
128 | values( |
129 | '${PNAME}', |
130 | '${PVER}', |
131 | '${PBUILD}', |
132 | '${pcatid}', |
133 | '${STATE}', |
134 | '${PROVIDE}', |
135 | '${PKGTYPE}' |
136 | )" |
137 | |
138 | pkgid=$(sql "select id from packages where pname='${PNAME}' and pver='${PVER}' and pbuild='${PBUILD}'") |
139 | # depends |
140 | while read sym dep |
141 | do |
142 | [[ -z ${dep} ]] && continue |
143 | depcat="$(dep2pcat ${dep})" |
144 | depcatid=$(sql "select id from categories where pcat='${depcat}'") |
145 | depname="$(dep2pname ${dep})" |
146 | depver="$(dep2pver ${dep})" |
147 | sql "insert into depends(pkg_id, |
148 | relation, |
149 | pcat_id, |
150 | pname, |
151 | pver, |
152 | pbuild) |
153 | values('${pkgid}', |
154 | '${sym}', |
155 | '${depcatid}', |
156 | '${depname}', |
157 | '${depver}', |
158 | '${depbuild}')" |
159 | done << EOF |
160 | ${DEPEND} |
161 | EOF |
162 | # sdepends |
163 | while read sym dep |
164 | do |
165 | [[ -z ${dep} ]] && continue |
166 | depcat="$(dep2pcat ${dep})" |
167 | depcatid=$(sql "select id from categories where pcat='${depcat}'") |
168 | depname="$(dep2pname ${dep})" |
169 | depver="$(dep2pver ${dep})" |
170 | sql "insert into sdepends(pkg_id, |
171 | relation, |
172 | pcat_id, |
173 | pname, |
174 | pver, |
175 | pbuild) |
176 | values('${pkgid}', |
177 | '${sym}', |
178 | '${depcatid}', |
179 | '${depname}', |
180 | '${depver}', |
181 | '${depbuild}')" |
182 | done << EOF |
183 | ${SDEPEND} |
184 | EOF |
185 | |
186 | for arch in i686 x86_64 |
187 | do |
188 | md5file="${MAGEDIR}/${PCAT}/${PNAME}/md5/${PNAME}-${PVER}-${arch}-r${PBUILD}.md5" |
189 | [[ -f ${md5file} ]] && md5sum="$(cat ${md5file} | cut -d' ' -f1)" |
190 | |
191 | # fix descriptions |
192 | DESCRIPTION="$(echo ${DESCRIPTION} | sed s:\':\'\':g)" |
193 | |
194 | sql "insert into packages_info(pkg_id, arch, md5, description, homepage) |
195 | values('${pkgid}','${arch}','${md5sum}','${DESCRIPTION}','${HOMEPAGE}')" |
196 | done |
197 | |
198 | # using $INHERITS directly |
199 | #mincludes="$(grep -r 'minclude ' ${magefile} | cut -d: -f2 | sed s:minclude\ ::)" |
200 | |
201 | # # # |
202 | # # # install routines & includes |
203 | # # # |
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 | # # sql "insert into packages_routines(pkg_id, |
218 | # # mincludes, |
219 | # # postinstall, |
220 | # # preinstall, |
221 | # # preremove, |
222 | # # postremove) |
223 | # # values('${pkgid}', |
224 | # # '${mincludes}', |
225 | # # '$([[ -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 | |
230 | local do_preinst=0 |
231 | local do_postinst=0 |
232 | local do_prerm=0 |
233 | local do_postrm=0 |
234 | local do_script=0 |
235 | local script="" |
236 | |
237 | [[ -n $(typeset -f preinstall) ]] && do_preinst=1 && do_script=1 |
238 | [[ -n $(typeset -f postinstall) ]] && do_postinst=1 && do_script=1 |
239 | [[ -n $(typeset -f preremove) ]] && do_prerm=1 && do_script=1 |
240 | [[ -n $(typeset -f postremove) ]] && do_postrm=1 && do_script=1 |
241 | |
242 | [[ ${do_script} = 1 ]] && script="$(basename ${DBFILE} .sql).routines/${pkgid}/routines.sh" |
243 | |
244 | sql "insert into packages_routines(pkg_id, |
245 | mincludes, |
246 | postinstall, |
247 | preinstall, |
248 | preremove, |
249 | postremove, |
250 | script) |
251 | values('${pkgid}', |
252 | '${INHERITS}', |
253 | '${do_postinst}', |
254 | '${do_pretinst}', |
255 | '${do_prerm}', |
256 | '${do_postrm}', |
257 | '${script}')" |
258 | |
259 | # create it only if do_script=1 |
260 | if [[ ${do_script} = 1 ]] |
261 | then |
262 | # create a routines script |
263 | local routines=$(dirname ${DBFILE})/${script} |
264 | install -d $(dirname ${routines}) |
265 | |
266 | echo "#!/bin/sh" > ${routines} |
267 | echo "# routines.sh script for #${pkgid}, ${PNAME}-${PVER}-${PBUILD}" >> ${routines} |
268 | echo >> ${routines} |
269 | |
270 | |
271 | # special functions and variables |
272 | if [[ -n ${SPECIAL_VARS} ]] |
273 | then |
274 | local i |
275 | for i in ${SPECIAL_VARS} |
276 | do |
277 | # being tricky here :) |
278 | echo "${i}=\"$(eval echo \$${i})\"" >> ${routines} |
279 | done |
280 | echo >> ${routines} |
281 | fi |
282 | |
283 | # add special functions |
284 | if [[ -n ${SPECIAL_FUNCTIONS} ]] |
285 | then |
286 | local i |
287 | for i in ${SPECIAL_FUNCTIONS} |
288 | do |
289 | # add to mage (quotes needed !) |
290 | typeset -f "${i}" >> ${routines} |
291 | echo >> ${routines} |
292 | # unset to be safe (quotes needed !) |
293 | unset "${i}" |
294 | done |
295 | echo >> ${routines} |
296 | fi |
297 | |
298 | # postinstall and co |
299 | for i in preinstall postinstall preremove postremove |
300 | do |
301 | if [[ -n $(typeset -f "${i}") ]] |
302 | then |
303 | typeset -f "${i}" >> ${routines} |
304 | echo >> ${routines} |
305 | fi |
306 | done |
307 | |
308 | # create start logic |
309 | echo >> ${routines} |
310 | echo 'case $1 in' >> ${routines} |
311 | echo ' preinstall) preinstall ;;' >> ${routines} |
312 | echo ' postinstall) postinstall ;;' >> ${routines} |
313 | echo ' preremove) preremove ;;' >> ${routines} |
314 | echo ' postremove) postremove ;;' >> ${routines} |
315 | echo 'esac' >> ${routines} |
316 | echo >> ${routines} |
317 | fi |
318 | |
319 | |
320 | unset PCAT |
321 | unset PNAME |
322 | unset PVER |
323 | unset PBUILD |
324 | unset STATE |
325 | unset DESCRIPTION |
326 | unset HOMEPAGE |
327 | unset PKGTYPE |
328 | unset PKGNAME |
329 | unset DEPEND |
330 | unset SDEPEND |
331 | unset PROVIDE |
332 | unset SPECIAL_VARS |
333 | unset SPECIAL_FUNCTIONS |
334 | unset INHERITS |
335 | |
336 | # unset these functions |
337 | unset -f preinstall |
338 | unset -f postinstall |
339 | unset -f preremove |
340 | unset -f postremove |
341 | done |
342 | } |
343 | |
344 | convert_install_db() |
345 | { |
346 | local i |
347 | local magefile |
348 | local pcat |
349 | local pname |
350 | local pver |
351 | local pbuild |
352 | local pcatid |
353 | local state |
354 | local preinstall |
355 | local postinstall |
356 | local preremove |
357 | local postremove |
358 | local pkgid |
359 | local dep |
360 | local PKGNAME |
361 | local STATE |
362 | local DESCRIPTION |
363 | local HOMEPAGE |
364 | local DEPEND |
365 | local SDEPEND |
366 | local PROVIDE |
367 | local PKGTYPE |
368 | local preinstall |
369 | local postinstall |
370 | local preremove |
371 | local postremove |
372 | local sym |
373 | local depname |
374 | local depver |
375 | local depbuild |
376 | local depcat |
377 | local depcatid |
378 | local md5file |
379 | local md5sum |
380 | local pkginfoid |
381 | local entrydir |
382 | |
383 | # create categories |
384 | for i in virtual ${INSTALLDB}/* |
385 | do |
386 | pcat="$(basename ${i})" |
387 | case ${pcat} in |
388 | include|profiles) continue;; |
389 | esac |
390 | |
391 | sql "insert into categories (pcat) values('${pcat}')" |
392 | done |
393 | |
394 | # create packages |
395 | for magefile in $(find ${INSTALLDB} -type f -name *.mage| sort) |
396 | do |
397 | case ${DEBUG} in |
398 | 1|true) echo "converting ${magefile}" ;; |
399 | esac |
400 | |
401 | pcat="$(magename2pcat ${magefile})" |
402 | pname="$(magename2pname ${magefile})" |
403 | pver="$(magename2pver ${magefile})" |
404 | pbuild="$(magename2pbuild ${magefile})" |
405 | # substitute r from pbuild |
406 | pbuild="${pbuild/r/}" |
407 | |
408 | source ${magefile} |
409 | |
410 | pcatid=$(sql "select id from categories where pcat='${pcat}'") |
411 | sql "insert into packages( |
412 | pname, |
413 | pver, |
414 | pbuild, |
415 | pcat_id, |
416 | state, |
417 | provide, |
418 | pkgtype |
419 | ) |
420 | values( |
421 | '${pname}', |
422 | '${pver}', |
423 | '${pbuild}', |
424 | '${pcatid}', |
425 | '${STATE}', |
426 | '${PROVIDE}', |
427 | '${PKGTYPE}' |
428 | )" |
429 | |
430 | pkgid=$(sql "select id from packages where pname='${pname}' and pver='${pver}' and pbuild='${pbuild}'") |
431 | # depends |
432 | while read sym dep |
433 | do |
434 | [[ -z ${dep} ]] && continue |
435 | depcat="$(dep2pcat ${dep})" |
436 | depcatid=$(sql "select id from categories where pcat='${depcat}'") |
437 | depname="$(dep2pname ${dep})" |
438 | depver="$(dep2pver ${dep})" |
439 | sql "insert into depends(pkg_id, |
440 | relation, |
441 | pcat_id, |
442 | pname, |
443 | pver, |
444 | pbuild) |
445 | values('${pkgid}', |
446 | '${sym}', |
447 | '${depcatid}', |
448 | '${depname}', |
449 | '${depver}', |
450 | '${depbuild}')" |
451 | done << EOF |
452 | ${DEPEND} |
453 | EOF |
454 | # sdepends |
455 | while read sym dep |
456 | do |
457 | [[ -z ${dep} ]] && continue |
458 | depcat="$(dep2pcat ${dep})" |
459 | depcatid=$(sql "select id from categories where pcat='${depcat}'") |
460 | depname="$(dep2pname ${dep})" |
461 | depver="$(dep2pver ${dep})" |
462 | sql "insert into sdepends(pkg_id, |
463 | relation, |
464 | pcat_id, |
465 | pname, |
466 | pver, |
467 | pbuild) |
468 | values('${pkgid}', |
469 | '${sym}', |
470 | '${depcatid}', |
471 | '${depname}', |
472 | '${depver}', |
473 | '${depbuild}')" |
474 | done << EOF |
475 | ${SDEPEND} |
476 | EOF |
477 | |
478 | DESCRIPTION="$(echo ${DESCRIPTION} | sed s:\':\'\':g)" |
479 | sql "insert into packages_info(pkg_id, arch, md5, description, homepage) |
480 | values('${pkgid}','${ARCH}','${md5sum}','${DESCRIPTION}','${HOMEPAGE}')" |
481 | |
482 | |
483 | # install routines & includes |
484 | sql "insert into packages_routines(pkg_id, |
485 | mincludes, |
486 | postinstall, |
487 | preinstall, |
488 | preremove, |
489 | postremove) |
490 | values('${pkgid}', |
491 | '${mincludes}', |
492 | '$(typeset -f postinstall | sed s:\':\'\':g)', |
493 | '$(typeset -f preinstall | sed s:\':\'\':g)', |
494 | '$(typeset -f preremove | sed s:\':\'\':g)', |
495 | '$(typeset -f postremove | sed s:\':\'\':g)')" |
496 | |
497 | #### #### |
498 | # record contents # |
499 | #### #### |
500 | pkginfoid=$(sql "select id from packages_info where pkg_id='${pkgid}' and arch='${ARCH}'") |
501 | entrydir="$(dirname ${magefile})" |
502 | sql "insert into packages_content(pkginfo_id, |
503 | char, |
504 | dirs, |
505 | files, |
506 | pipes, |
507 | symlinks) |
508 | values('${pkginfoid}', |
509 | '$(basename ${DBFILE} .sql).records/${pkginfoid}/char.bz2', |
510 | '$(basename ${DBFILE} .sql).records/${pkginfoid}/dirs.bz2', |
511 | '$(basename ${DBFILE} .sql).records/${pkginfoid}/files.bz2', |
512 | '$(basename ${DBFILE} .sql).records/${pkginfoid}/pipes.bz2', |
513 | '$(basename ${DBFILE} .sql).records/${pkginfoid}/symlinks.bz2')" |
514 | # create compressed content files |
515 | local entryfile |
516 | for entryfile in char dirs files pipes symlinks |
517 | do |
518 | install -d $(dirname ${DBFILE})/$(basename ${DBFILE} .sql).records/${pkginfoid} |
519 | cat ${entrydir}/.${entryfile} | bzip2 -9 >> $(dirname ${DBFILE})/$(basename ${DBFILE} .sql).records/${pkginfoid}/${entryfile}.bz2 |
520 | done |
521 | |
522 | unset PKGNAME |
523 | unset DEPEND |
524 | unset SDEPEND |
525 | unset PROVIDE |
526 | unset SPECIAL_VARS |
527 | unset SPECIAL_FUNCTIONS |
528 | |
529 | # unset these functions |
530 | unset -f preinstall |
531 | unset -f postinstall |
532 | unset -f preremove |
533 | unset -f postremove |
534 | done |
535 | } |
536 | |
537 | convert_virtual_defaults() |
538 | { |
539 | local virtual |
540 | local package |
541 | local vcat |
542 | local vname |
543 | local pcat |
544 | local pname |
545 | |
546 | sql "create table virtual_defaults(id integer primary key, vcat text,vname text, pcat text, pname text)" |
547 | |
548 | while read virtual package |
549 | do |
550 | vcat="$(dirname ${virtual})" |
551 | vname="$(basename ${virtual})" |
552 | pcat="$(dirname ${package})" |
553 | pname="$(basename ${package})" |
554 | |
555 | sql "insert into virtual_defaults(vcat,vname,pcat,pname) values('${vcat}','${vname}','${pcat}','${pname}')" |
556 | done < /etc/mage-profile/virtuals.defaults |
557 | } |
558 | |
559 | METHOD="$1" |
560 | DBFILE="$2" |
561 | |
562 | [[ -z ${METHOD} ]] && die "No method given. Use --install, --packages or --virtual for your appropiate task" |
563 | [[ -z ${DBFILE} ]] && die "No database given." |
564 | |
565 | case $1 in |
566 | --install|-i) |
567 | create_database_layout |
568 | convert_install_db |
569 | ;; |
570 | --packages|-p) |
571 | create_database_layout |
572 | convert_smage_db |
573 | ;; |
574 | --virtuals|-v) |
575 | convert_virtual_defaults |
576 | ;; |
577 | *) die "Unkown method." ;; |
578 | esac |
Properties
Name | Value |
---|---|
svn:executable | * |