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