Magellan Linux

Contents of /branches/mage-sql/usr/lib/mage/convert_databases_smage.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1118 - (show annotations) (download) (as text)
Thu Jul 22 07:19:48 2010 UTC (13 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 21482 byte(s)
-disabled content recording  atm
-upsert categories while creating installdb
-create routines script in pcat/pname-pver-pbuild instead of pkgid for easy database joins
-create empty post|pre|install|remove routines if do_script is defined but no routine to supress script errors

1 #!/bin/bash
2
3 source /etc/mage.rc.global
4 source /etc/mage.rc
5
6
7 #### fixups ####
8 MLIBDIR=/home/tjoke/svn/magellan-source/branches/mage-sql/usr/lib/mage
9 INSTALLDB=/var/db/mage
10 #################
11
12 source ${MLIBDIR}/mage4.functions.sh
13 source ${MLIBDIR}/sql_functions.sh
14
15 die()
16 {
17 echo -e "Exited ${BASH_SOURCE} at line no ${BASH_LINENO}."
18 echo -e "$@"
19 exit 1
20 }
21
22 sql()
23 {
24 local sqlcmd="$*"
25 [[ -z ${sqlcmd} ]] && die "no sqlcmd given."
26
27 sqlite3 -nullvalue 'NULL' -list -separator '|' ${DBFILE} << EOF || die "error running '$@'"
28 ${sqlcmd};
29 EOF
30 }
31
32 split_save_variables()
33 {
34 export SAVED_PNAME="${PNAME}"
35 export SAVED_PVER="${PVER}"
36 export SAVED_PBUILD="${PBUILD}"
37 export SAVED_PCATEGORIE="${PCATEGORIE}"
38 export SAVED_DESCRIPTION="${DESCRIPTION}"
39 export SAVED_HOMEPAGE="${HOMEPAGE}"
40 export SAVED_SPECIAL_VARS="${SPECIAL_VARS}"
41 export SAVED_STATE="${STATE}"
42 export SAVED_PKGTYPE="${PKGTYPE}"
43 export SAVED_INHERITS="${INHERITS}"
44 export SAVED_DEPEND="${DEPEND}"
45 export SAVED_SDEPEND="${SDEPEND}"
46 export SAVED_PROVIDE="${PROVIDE}"
47 export SAVED_NOPKGBUILD="${NOPKGBUILD}"
48
49 # bindir too
50 export SAVED_BINDIR="${BINDIR}"
51
52 # export the SPLIT_PACKAGE_BASE
53 export SPLIT_PACKAGE_BASE="${SAVED_PNAME}"
54
55 # functions
56 if [[ ! -z $(typeset -f preinstall) ]]
57 then
58 # rename the old one
59 local saved_preinstall
60 saved_preinstall=SAVED_$(typeset -f preinstall)
61 eval "${saved_preinstall}"
62 export -f SAVED_preinstall
63 fi
64
65 if [[ ! -z $(typeset -f postinstall) ]]
66 then
67 # rename the old one
68 local saved_postinstall
69 saved_postinstall=SAVED_$(typeset -f postinstall)
70 eval "${saved_postinstall}"
71 export -f SAVED_postinstall
72 fi
73
74 if [[ ! -z $(typeset -f preremove) ]]
75 then
76 # rename the old one
77 local saved_preremove
78 saved_preremove=SAVED_$(typeset -f preremove)
79 eval "${saved_preremove}"
80 export -f SAVED_preremove
81 fi
82
83 if [[ ! -z $(typeset -f postremove) ]]
84 then
85 # rename the old one
86 local saved_postremove
87 saved_postremove=SAVED_$(typeset -f postremove)
88 eval "${saved_postremove}"
89 export -f SAVED_postremove
90 fi
91 }
92
93 split_restore_variables()
94 {
95 export PNAME="${SAVED_PNAME}"
96 export PVER="${SAVED_PVER}"
97 export PBUILD="${SAVED_PBUILD}"
98 export PCATEGORIE="${SAVED_PCATEGORIE}"
99 export DESCRIPTION="${SAVED_DESCRIPTION}"
100 export HOMEPAGE="${SAVED_HOMEPAGE}"
101 export SPECIAL_VARS="${SAVED_SPECIAL_VARS}"
102 export STATE="${SAVED_STATE}"
103 export PKGTYPE="${SAVED_PKGTYPE}"
104 export INHERITS="${SAVED_INHERITS}"
105 export DEPEND="${SAVED_DEPEND}"
106 export SDEPEND="${SAVED_SDEPEND}"
107 export PROVIDE="${SAVED_PROVIDE}"
108 export NOPKGBUILD="${SAVED_NOPKGBUILD}"
109
110 # bindir too
111 export BINDIR="${SAVED_BINDIR}"
112
113 # functions
114 if [[ ! -z $(typeset -f SAVED_preinstall) ]]
115 then
116 # rename the old one
117 local saved_preinstall
118 saved_preinstall=$(typeset -f SAVED_preinstall)
119 eval "${saved_preinstall/SAVED_/}"
120 export -f preinstall
121 fi
122
123 if [[ ! -z $(typeset -f SAVED_postinstall) ]]
124 then
125 # rename the old one
126 local saved_postinstall
127 saved_postinstall=$(typeset -f SAVED_postinstall)
128 eval "${saved_postinstall/SAVED_/}"
129 export -f postinstall
130 fi
131
132 if [[ ! -z $(typeset -f SAVED_preremove) ]]
133 then
134 # rename the old one
135 local saved_preremove
136 saved_preremove=$(typeset -f SAVED_preremove)
137 eval "${saved_preremove/SAVED_/}"
138 export -f preremove
139 fi
140
141 if [[ ! -z $(typeset -f SAVED_postremove) ]]
142 then
143 # rename the old one
144 local saved_postremove
145 saved_postremove=$(typeset -f SAVED_postremove)
146 eval "${saved_postremove/SAVED_/}"
147 export -f postremove
148 fi
149 }
150
151 split_unset_variables()
152 {
153 # unset saved vars; not needed anymore
154 unset SAVED_PNAME
155 unset SAVED_PVER
156 unset SAVED_PBUILD
157 unset SAVED_PCATEGORIE
158 unset SAVED_DESCRIPTION
159 unset SAVED_HOMEPAGE
160 unset SAVED_SPECIAL_VARS
161 unset SAVED_STATE
162 unset SAVED_PKGTYPE
163 unset SAVED_INHERITS
164 unset SAVED_DEPEND
165 unset SAVED_SDEPEND
166 unset SAVED_PROVIDE
167 unset SAVED_BINDIR
168 unset SAVED_NOPKGBUILD
169 unset SPLIT_PACKAGE_BASE
170 unset -f SAVED_preinstall
171 unset -f SAVED_postinstall
172 unset -f SAVED_preremove
173 unset -f SAVED_postremove
174 }
175
176 create_database_layout()
177 {
178 sql "create table categories(id integer primary key, pcat text unique)"
179 sql "create table packages(id integer primary key,
180 pname text,
181 pver text,
182 pbuild text,
183 pcat_id numeric,
184 state text,
185 provide text,
186 pkgtype text
187 )"
188 sql "create table depends(id integer primary key, pkg_id numeric, relation text, pcat_id numeric, pname text, pver text, pbuild text)"
189 sql "create table sdepends(id integer primary key, pkg_id numeric, relation text, pcat_id numeric, pname text, pver text, pbuild text)"
190 sql "create table packages_info(id integer primary key, pkg_id numeric, arch text, md5 text, mtime numeric, homepage text, description text, size numeric)"
191 #sql "create table packages_content(id integer primary key, pkginfo_id numeric, char text, dirs text, files text, pipes text, symlinks text)"
192 sql "create table packages_content(id integer primary key, pkginfo_id numeric, char blob, dirs blob, files blob, pipes blob, symlinks blob)"
193 # sql "create table packages_routines(id integer primary key,
194 # pkg_id numeric,
195 # mincludes text,
196 # preinstall text,
197 # postinstall text,
198 # preremove text,
199 # postremove text,
200 # extra_functions text,
201 # extra_vars text)"
202 sql "create table packages_routines(id integer primary key,
203 pkg_id numeric,
204 mincludes text,
205 preinstall numeric,
206 postinstall numeric,
207 preremove numeric,
208 postremove numeric,
209 script text)"
210 }
211
212 smage2sqlite()
213 {
214 local i
215 local pcatid
216 local pkgid
217 local dep
218 local sym
219 local depname
220 local depver
221 local depbuild
222 local depcat
223 local depcatid
224 local md5file
225 local md5sum
226
227 pcatid=$(sql "select id from categories where pcat='${PCATEGORIE}'")
228
229 sql "insert into packages(
230 pname,
231 pver,
232 pbuild,
233 pcat_id,
234 state,
235 provide,
236 pkgtype
237 )
238 values(
239 '${PNAME}',
240 '${PVER}',
241 '${PBUILD}',
242 '${pcatid}',
243 '${STATE}',
244 '${PROVIDE}',
245 '${PKGTYPE}'
246 )"
247
248 pkgid=$(sql "select id from packages where pname='${PNAME}' and pver='${PVER}' and pbuild='${PBUILD}'")
249
250 # depends
251 while read sym dep
252 do
253 # ignore scripts atm -FIXME!!!
254 case ${sym} in
255 \$\(*) continue ;;
256 esac
257
258 [[ -z ${dep} ]] && continue
259 depcat="$(dep2pcat ${dep})"
260 depcatid=$(sql "select id from categories where pcat='${depcat}'")
261 depname="$(dep2pname ${dep})"
262 depver="$(dep2pver ${dep})"
263
264 if [[ -z ${depcatid} ]]
265 then
266 die "Error: '${PNAME}' -> depcat '${depcat}' has no depcatid, it does no exist in database!"
267 fi
268
269 sql "insert into depends(pkg_id,
270 relation,
271 pcat_id,
272 pname,
273 pver,
274 pbuild)
275 values('${pkgid}',
276 '${sym}',
277 '${depcatid}',
278 '${depname}',
279 '${depver}',
280 '${depbuild}')"
281 done << EOF
282 ${DEPEND}
283 EOF
284 # sdepends
285 while read sym dep
286 do
287 [[ -z ${dep} ]] && continue
288 depcat="$(dep2pcat ${dep})"
289 depcatid=$(sql "select id from categories where pcat='${depcat}'")
290 depname="$(dep2pname ${dep})"
291 depver="$(dep2pver ${dep})"
292 sql "insert into sdepends(pkg_id,
293 relation,
294 pcat_id,
295 pname,
296 pver,
297 pbuild)
298 values('${pkgid}',
299 '${sym}',
300 '${depcatid}',
301 '${depname}',
302 '${depver}',
303 '${depbuild}')"
304 done << EOF
305 ${SDEPEND}
306 EOF
307
308 for arch in i686 x86_64
309 do
310 md5file="${MAGEDIR}/${PCATEGORIE}/${PNAME}/md5/${PNAME}-${PVER}-${arch}-r${PBUILD}.md5"
311 [[ -f ${md5file} ]] && md5sum="$(cat ${md5file} | cut -d' ' -f1)"
312
313 # fix descriptions
314 DESCRIPTION="$(echo ${DESCRIPTION} | sed s:\':\'\':g)"
315
316 sql "insert into packages_info(pkg_id, arch, md5, description, homepage)
317 values('${pkgid}','${arch}','${md5sum}','${DESCRIPTION}','${HOMEPAGE}')"
318 done
319
320 # using $INHERITS directly
321 #mincludes="$(grep -r 'minclude ' ${magefile} | cut -d: -f2 | sed s:minclude\ ::)"
322
323 # # #
324 # # # install routines & includes
325 # # #
326 # # # needs special magic: the last line of typeset has no ';'
327 # # # but to eval the function we must append it
328 # # # so this sed deletes the last line of the typeset output
329 # # # and replaces it with an ;} and a newline between
330 # # #
331 # # # but we will not add this fun when no postinstall etc are given
332 # # # -> [[ -n $(typeset -f postinstall ]] &&
333 # # #
334 # # # also the character ' is a problem while importing to sql
335 # # # because we use ' as escape char. so we replace it with ''
336 # # #
337 # # # $([[ -n $(typeset -f postinstall) ]] && echo -e "$(typeset -f postinstall | sed s:\':\'\':g | sed '$d');\n}")
338 # # #
339 # # sql "insert into packages_routines(pkg_id,
340 # # mincludes,
341 # # postinstall,
342 # # preinstall,
343 # # preremove,
344 # # postremove)
345 # # values('${pkgid}',
346 # # '${mincludes}',
347 # # '$([[ -n $(typeset -f postinstall) ]] && echo -e "$(typeset -f postinstall | sed s:\':\'\':g | sed '$d');\n}")',
348 # # '$([[ -n $(typeset -f preinstall) ]] && echo -e "$(typeset -f preinstall | sed s:\':\'\':g | sed '$d');\n}")',
349 # # '$([[ -n $(typeset -f preremove) ]] && echo -e "$(typeset -f preremove | sed s:\':\'\':g | sed '$d');\n}")',
350 # # '$([[ -n $(typeset -f postremove) ]] && echo -e "$(typeset -f postremove | sed s:\':\'\':g | sed '$d');\n}")')"
351
352 local do_preinst=0
353 local do_postinst=0
354 local do_prerm=0
355 local do_postrm=0
356 local do_script=0
357 local script=""
358
359 # # [[ -n $(typeset -f preinstall) ]] && do_preinst=1 && do_script=1
360 # # [[ -n $(typeset -f postinstall) ]] && do_postinst=1 && do_script=1
361 # # [[ -n $(typeset -f preremove) ]] && do_prerm=1 && do_script=1
362 # # [[ -n $(typeset -f postremove) ]] && do_postrm=1 && do_script=1
363 # #
364 # # [[ ${do_script} = 1 ]] && script="$(basename ${DBFILE} .sql).routines/${pkgid}/routines.sh"
365
366 [[ -n $(typeset -f preinstall) ]] && do_preinst=1 && do_script=1
367 [[ -n $(typeset -f postinstall) ]] && do_postinst=1 && do_script=1
368 [[ -n $(typeset -f preremove) ]] && do_prerm=1 && do_script=1
369 [[ -n $(typeset -f postremove) ]] && do_postrm=1 && do_script=1
370
371 [[ ${do_script} = 1 ]] && script="$(basename ${DBFILE} .sql).data/${PCATEGORIE}/${PNAME}-${PVER}-${PBUILD}/routines.sh"
372
373 sql "insert into packages_routines(pkg_id,
374 mincludes,
375 postinstall,
376 preinstall,
377 preremove,
378 postremove,
379 script)
380 values('${pkgid}',
381 '${INHERITS}',
382 '${do_postinst}',
383 '${do_pretinst}',
384 '${do_prerm}',
385 '${do_postrm}',
386 '${script}')"
387
388 # # # create it only if do_script=1
389 # # if [[ ${do_script} = 1 ]]
390 # # then
391 # # # create a routines script
392 # # local routines=$(dirname ${DBFILE})/${script}
393 # # install -d $(dirname ${routines})
394 # #
395 # # echo '#!/bin/sh' > ${routines}
396 # # echo "# routines.sh script for ${pkgid}, ${PNAME}-${PVER}-${PBUILD}" >> ${routines}
397 # # echo >> ${routines}
398 # #
399 # #
400 # # # special functions and variables
401 # # if [[ -n ${SPECIAL_VARS} ]]
402 # # then
403 # # local i
404 # # for i in ${SPECIAL_VARS}
405 # # do
406 # # # being tricky here :)
407 # # echo "${i}=\"$(eval echo \$${i})\"" >> ${routines}
408 # # done
409 # # echo >> ${routines}
410 # # fi
411 # #
412 # # # add special functions
413 # # if [[ -n ${SPECIAL_FUNCTIONS} ]]
414 # # then
415 # # local i
416 # # for i in ${SPECIAL_FUNCTIONS}
417 # # do
418 # # # add to mage (quotes needed !)
419 # # typeset -f "${i}" >> ${routines}
420 # # echo >> ${routines}
421 # # # unset to be safe (quotes needed !)
422 # # unset "${i}"
423 # # done
424 # # echo >> ${routines}
425 # # fi
426 # #
427 # # # postinstall and co
428 # # for i in preinstall postinstall preremove postremove
429 # # do
430 # # if [[ -n $(typeset -f "${i}") ]]
431 # # then
432 # # typeset -f "${i}" >> ${routines}
433 # # echo >> ${routines}
434 # # fi
435 # # done
436 # #
437 # # # create start logic
438 # # echo >> ${routines}
439 # # echo 'case $1 in' >> ${routines}
440 # # echo ' preinstall) preinstall ;;' >> ${routines}
441 # # echo ' postinstall) postinstall ;;' >> ${routines}
442 # # echo ' preremove) preremove ;;' >> ${routines}
443 # # echo ' postremove) postremove ;;' >> ${routines}
444 # # echo 'esac' >> ${routines}
445 # # echo >> ${routines}
446 # # fi
447
448 # create it only if do_script=1
449 if [[ ${do_script} = 1 ]]
450 then
451 # create a routines script
452 local routines=$(dirname ${DBFILE})/${script}
453 install -d $(dirname ${routines})
454
455 echo '#!/bin/sh' > ${routines}
456 echo "# routines.sh script for ${PCATEGORIE}/${PNAME}-${PVER}-${PBUILD}" >> ${routines}
457 echo >> ${routines}
458
459
460 # special functions and variables
461 if [[ -n ${SPECIAL_VARS} ]]
462 then
463 local i
464 for i in ${SPECIAL_VARS}
465 do
466 # being tricky here :)
467 echo "${i}=\"$(eval echo \$${i})\"" >> ${routines}
468 done
469 echo >> ${routines}
470 fi
471
472 # add special functions
473 if [[ -n ${SPECIAL_FUNCTIONS} ]]
474 then
475 local i
476 for i in ${SPECIAL_FUNCTIONS}
477 do
478 # add to mage (quotes needed !)
479 typeset -f "${i}" >> ${routines}
480 echo >> ${routines}
481 # unset to be safe (quotes needed !)
482 unset "${i}"
483 done
484 echo >> ${routines}
485 fi
486
487 # postinstall and co
488 for i in preinstall postinstall preremove postremove
489 do
490 if [[ -n $(typeset -f "${i}") ]]
491 then
492 typeset -f "${i}" >> ${routines}
493 echo >> ${routines}
494 else
495 echo "${i} () { return 0; }" >> ${routines}
496 fi
497 done
498
499 # create start logic
500 echo >> ${routines}
501 echo 'case $1 in' >> ${routines}
502 echo ' preinstall) preinstall ;;' >> ${routines}
503 echo ' postinstall) postinstall ;;' >> ${routines}
504 echo ' preremove) preremove ;;' >> ${routines}
505 echo ' postremove) postremove ;;' >> ${routines}
506 echo 'esac' >> ${routines}
507 echo >> ${routines}
508 fi
509
510 unset PCATEGORIE
511 unset PNAME
512 unset PVER
513 unset PBUILD
514 unset STATE
515 unset DESCRIPTION
516 unset HOMEPAGE
517 unset PKGTYPE
518 unset PKGNAME
519 unset DEPEND
520 unset SDEPEND
521 unset PROVIDE
522 unset SPECIAL_VARS
523 unset SPECIAL_FUNCTIONS
524 unset INHERITS
525 unset SPLIT_PACKAGES
526
527 # unset these functions
528 unset -f preinstall
529 unset -f postinstall
530 unset -f preremove
531 unset -f postremove
532 }
533
534 categories2sqlite()
535 {
536 local file="$1"
537
538 if [[ ! -f ${file} ]]
539 then
540 echo "${file} does not exist, ignoring..."
541 return 0
542 fi
543
544 echo "using categories from ${file}..."
545 # create categories
546 cat ${file} | while read pcat
547 do
548 case ${pcat} in
549 include|profiles) continue;;
550 \#*|"") continue ;;
551 esac
552
553 # "upsert"
554 if [[ -z $(sql "select pcat from categories where pcat='${pcat}'") ]]
555 then
556 sql "insert into categories (pcat) values('${pcat}')"
557 fi
558 done
559 }
560
561 convert_smage_db()
562 {
563 local smagefile
564
565 local PCATEGORIE
566 local PNAME
567 local PVER
568 local PBUILD
569 local STATE
570 local PKGNAME
571 local DESCRIPTION
572 local HOMEPAGE
573 local DEPEND
574 local SDEPEND
575 local PROVIDE
576 local PKGTYPE
577 local SPLIT_PACKAGES
578 local preinstall
579 local postinstall
580 local preremove
581 local postremove
582
583 # create categories - global
584 categories2sqlite "${SMAGESCRIPTSDIR}/.known_categories"
585
586 # create categories - repo specific
587 categories2sqlite "${SMAGESCRIPTSDIR}/${REPO}/.known_categories"
588
589 # create packages
590 for smagefile in $(find ${SMAGESCRIPTSDIR}/${REPO} -type f -name \*.smage2 | sort)
591 do
592 case ${DEBUG} in
593 1|true) echo "converting ${smagefile}" ;;
594 esac
595
596 source ${smagefile}
597
598 # build several subpackages
599 if [[ -n ${SPLIT_PACKAGES} ]]
600 then
601 split_save_variables
602 for subpackage in ${SPLIT_PACKAGES}
603 do
604 echo "Running for subpackage '${subpackage}'..."
605
606 # get the right variables for the split
607 export PNAME="${subpackage}"
608 split_info_${subpackage}
609
610 smage2sqlite
611
612 # restore smage environment
613 split_restore_variables
614 done
615 # unset all saved smage variables
616 split_unset_variables
617 else
618 smage2sqlite
619 fi
620
621 unset PCATEGORIE
622 unset PNAME
623 unset PVER
624 unset PBUILD
625 unset STATE
626 unset DESCRIPTION
627 unset HOMEPAGE
628 unset PKGTYPE
629 unset PKGNAME
630 unset DEPEND
631 unset SDEPEND
632 unset PROVIDE
633 unset SPECIAL_VARS
634 unset SPECIAL_FUNCTIONS
635 unset INHERITS
636 unset SPLIT_PACKAGES
637
638 # unset these functions
639 unset -f preinstall
640 unset -f postinstall
641 unset -f preremove
642 unset -f postremove
643 done
644 }
645
646 convert_install_db()
647 {
648 local i
649 local magefile
650 local pcat
651 local pname
652 local pver
653 local pbuild
654 local pcatid
655 local state
656 local preinstall
657 local postinstall
658 local preremove
659 local postremove
660 local pkgid
661 local dep
662 local PKGNAME
663 local STATE
664 local DESCRIPTION
665 local HOMEPAGE
666 local DEPEND
667 local SDEPEND
668 local PROVIDE
669 local PKGTYPE
670 local preinstall
671 local postinstall
672 local preremove
673 local postremove
674 local sym
675 local depname
676 local depver
677 local depbuild
678 local depcat
679 local depcatid
680 local md5file
681 local md5sum
682 local pkginfoid
683 local entrydir
684
685 # first of all add virtual categorie
686 sql "insert into categories(pcat) values('virtual')"
687
688 # create categories
689 for i in virtual ${INSTALLDB}/*
690 do
691 pcat="$(basename ${i})"
692 case ${pcat} in
693 include|profiles) continue;;
694 esac
695
696 # "upsert"
697 if [[ -z $(sql "select pcat from categories where pcat='${pcat}'") ]]
698 then
699 sql "insert into categories (pcat) values('${pcat}')"
700 fi
701 done
702
703 # create packages
704 for magefile in $(find ${INSTALLDB} -type f -name *.mage| sort)
705 do
706 case ${DEBUG} in
707 1|true) echo "converting ${magefile}" ;;
708 esac
709
710 pcat="$(magename2pcat ${magefile})"
711 pname="$(magename2pname ${magefile})"
712 pver="$(magename2pver ${magefile})"
713 pbuild="$(magename2pbuild ${magefile})"
714
715 source ${magefile}
716
717 pcatid=$(sql "select id from categories where pcat='${pcat}'")
718 sql "insert into packages(
719 pname,
720 pver,
721 pbuild,
722 pcat_id,
723 state,
724 provide,
725 pkgtype
726 )
727 values(
728 '${pname}',
729 '${pver}',
730 '${pbuild}',
731 '${pcatid}',
732 '${STATE}',
733 '${PROVIDE}',
734 '${PKGTYPE}'
735 )"
736
737 pkgid=$(sql "select id from packages where pname='${pname}' and pver='${pver}' and pbuild='${pbuild}'")
738 # depends
739 while read sym dep
740 do
741 [[ -z ${dep} ]] && continue
742 depcat="$(dep2pcat ${dep})"
743 depcatid=$(sql "select id from categories where pcat='${depcat}'")
744 depname="$(dep2pname ${dep})"
745 depver="$(dep2pver ${dep})"
746 sql "insert into depends(pkg_id,
747 relation,
748 pcat_id,
749 pname,
750 pver,
751 pbuild)
752 values('${pkgid}',
753 '${sym}',
754 '${depcatid}',
755 '${depname}',
756 '${depver}',
757 '${depbuild}')"
758 done << EOF
759 ${DEPEND}
760 EOF
761 # sdepends
762 while read sym dep
763 do
764 [[ -z ${dep} ]] && continue
765 depcat="$(dep2pcat ${dep})"
766 depcatid=$(sql "select id from categories where pcat='${depcat}'")
767 depname="$(dep2pname ${dep})"
768 depver="$(dep2pver ${dep})"
769 sql "insert into sdepends(pkg_id,
770 relation,
771 pcat_id,
772 pname,
773 pver,
774 pbuild)
775 values('${pkgid}',
776 '${sym}',
777 '${depcatid}',
778 '${depname}',
779 '${depver}',
780 '${depbuild}')"
781 done << EOF
782 ${SDEPEND}
783 EOF
784
785 DESCRIPTION="$(echo ${DESCRIPTION} | sed s:\':\'\':g)"
786 sql "insert into packages_info(pkg_id, arch, md5, description, homepage)
787 values('${pkgid}','${ARCH}','${md5sum}','${DESCRIPTION}','${HOMEPAGE}')"
788
789
790 # install routines & includes
791 sql "insert into packages_routines(pkg_id,
792 mincludes,
793 postinstall,
794 preinstall,
795 preremove,
796 postremove)
797 values('${pkgid}',
798 '${mincludes}',
799 '$(typeset -f postinstall | sed s:\':\'\':g)',
800 '$(typeset -f preinstall | sed s:\':\'\':g)',
801 '$(typeset -f preremove | sed s:\':\'\':g)',
802 '$(typeset -f postremove | sed s:\':\'\':g)')"
803
804 # # #### ####
805 # # # record contents #
806 # # #### ####
807 # # pkginfoid=$(sql "select id from packages_info where pkg_id='${pkgid}' and arch='${ARCH}'")
808 # # entrydir="$(dirname ${magefile})"
809 # # sql "insert into packages_content(pkginfo_id,
810 # # char,
811 # # dirs,
812 # # files,
813 # # pipes,
814 # # symlinks)
815 # # values('${pkginfoid}',
816 # # '$(basename ${DBFILE} .sql).records/${pkginfoid}/char.bz2',
817 # # '$(basename ${DBFILE} .sql).records/${pkginfoid}/dirs.bz2',
818 # # '$(basename ${DBFILE} .sql).records/${pkginfoid}/files.bz2',
819 # # '$(basename ${DBFILE} .sql).records/${pkginfoid}/pipes.bz2',
820 # # '$(basename ${DBFILE} .sql).records/${pkginfoid}/symlinks.bz2')"
821 # # # create compressed content files
822 # # local entryfile
823 # # for entryfile in char dirs files pipes symlinks
824 # # do
825 # # install -d $(dirname ${DBFILE})/$(basename ${DBFILE} .sql).records/${pkginfoid}
826 # # cat ${entrydir}/.${entryfile} | bzip2 -9 >> $(dirname ${DBFILE})/$(basename ${DBFILE} .sql).records/${pkginfoid}/${entryfile}.bz2
827 # # done
828
829 unset PKGNAME
830 unset DEPEND
831 unset SDEPEND
832 unset PROVIDE
833 unset SPECIAL_VARS
834 unset SPECIAL_FUNCTIONS
835
836 # unset these functions
837 unset -f preinstall
838 unset -f postinstall
839 unset -f preremove
840 unset -f postremove
841 done
842 }
843
844 convert_virtual_defaults()
845 {
846 local virtual
847 local package
848 local vcat
849 local vname
850 local pcat
851 local pname
852
853 sql "create table virtual_defaults(id integer primary key, vcat text,vname text, pcat text, pname text)"
854
855 while read virtual package
856 do
857 vcat="$(dirname ${virtual})"
858 vname="$(basename ${virtual})"
859 pcat="$(dirname ${package})"
860 pname="$(basename ${package})"
861
862 sql "insert into virtual_defaults(vcat,vname,pcat,pname) values('${vcat}','${vname}','${pcat}','${pname}')"
863 done < /etc/mage-profile/virtuals.defaults
864 }
865
866 METHOD="$1"
867 DBFILE="$2"
868 REPO="$3"
869
870 [[ -z ${METHOD} ]] && die "No method given. Use --install, --packages or --virtual for your appropiate task"
871 [[ -z ${DBFILE} ]] && die "No database given."
872 [[ -z ${REPO} ]] && die "No repository given."
873
874 case $1 in
875 --install|-i)
876 create_database_layout
877 convert_install_db
878 ;;
879 --packages|-p)
880 convert_virtual_defaults
881 create_database_layout
882 convert_smage_db
883 ;;
884 # --virtuals|-v)
885 # convert_virtual_defaults
886 # ;;
887 *) die "Unkown method." ;;
888 esac

Properties

Name Value
svn:executable *