Contents of /branches/mage-sql/usr/lib/mage/sqlwalker.sh
Parent Directory | Revision Log
Revision 1116 -
(show annotations)
(download)
(as text)
Sat Jul 17 10:48:59 2010 UTC (13 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 10059 byte(s)
Sat Jul 17 10:48:59 2010 UTC (13 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 10059 byte(s)
-added sqlwalker, a sql variant of depwalker
1 | #!/bin/bash |
2 | |
3 | #depwalker |
4 | # $Id$ |
5 | |
6 | # default die function |
7 | die() |
8 | { |
9 | echo ${COLRED}"$@"${COLDEFAULT} |
10 | exit 1 |
11 | } |
12 | |
13 | # include all needed files |
14 | [ -f /etc/mage.rc.global ] && \ |
15 | source /etc/mage.rc.global || \ |
16 | die "/etc/mage.rc.global missing" |
17 | |
18 | [ -f ${MAGERC} ] && source ${MAGERC} || \ |
19 | die "Your ${MAGERC} is missing. Aborting." |
20 | |
21 | #### fixups #### |
22 | MLIBDIR="/home/tjoke/svn/magellan-source/branches/mage-sql/usr/lib/mage" |
23 | INSTALLDB="/var/db/mage" |
24 | #DBFILE="${MLIBDIR}/mage.db" |
25 | DBFILE="${MLIBDIR}/main.db" |
26 | MAGE_INSTALL_DB="${MLIBDIR}/install.db" |
27 | ################# |
28 | |
29 | |
30 | [ -f ${MLIBDIR}/mage4.functions.sh ] && \ |
31 | source ${MLIBDIR}/mage4.functions.sh || \ |
32 | die "mage functions missing" |
33 | |
34 | [ -f ${MLIBDIR}/sql_functions.sh ] && \ |
35 | source ${MLIBDIR}/sql_functions.sh || \ |
36 | die "sql functions missing" |
37 | |
38 | # not serious if missing, only needed for colors |
39 | [ -f /etc/init.d/functions ] && source /etc/init.d/functions |
40 | |
41 | # disable colors if wanted |
42 | if [[ ${NOCOLORS} = true ]] |
43 | then |
44 | COLRED="" |
45 | COLGREEN="" |
46 | COLYELLOW="" |
47 | COLBLUE="" |
48 | COLMAGENTA="" |
49 | COLWHITE="" |
50 | COLDEFAULT="" |
51 | fi |
52 | |
53 | usage() |
54 | { |
55 | echo |
56 | echo "Usage: $(basename $0) [command] [arg] ..." |
57 | echo |
58 | echo " -h --help shows this help" |
59 | echo " -c --pcat categorie of the package" |
60 | echo " -n --pname name of the package" |
61 | echo " -v --pver version number of the package" |
62 | echo " -b --pbuild build number of the package" |
63 | echo " -m --method which calc method should be used:" |
64 | echo " install, srcinstall, depend, srcdepend" |
65 | echo " upgrade, srcupgrade" |
66 | echo |
67 | echo "method, name, version and build must be given !" |
68 | echo |
69 | exit 1 |
70 | } |
71 | |
72 | # very basic getops |
73 | for i in $* |
74 | do |
75 | case $1 in |
76 | --pcat|-c) shift; PCAT="$1" ;; |
77 | --pname|-n) shift; PNAME="$1" ;; |
78 | --pver|-v) shift; PVER="$1" ;; |
79 | --pbuild|-b) shift; PBUILD="$1" ;; |
80 | --method|-m) shift; METHOD="$1" ;; |
81 | --help|-h) usage ;; |
82 | esac |
83 | shift |
84 | done |
85 | |
86 | # sanity checks; abort if not given |
87 | [ -z "${PCAT}" ] && usage |
88 | [ -z "${PNAME}" ] && usage |
89 | [ -z "${PVER}" ] && usage |
90 | [ -z "${PBUILD}" ] && usage |
91 | [ -z "${METHOD}" ] && usage |
92 | |
93 | # check needed global vars |
94 | [ -z "${MAGEDIR}" ] && die "\$MAGEDIR not set." |
95 | [ -z "${INSTALLDB}" ] && die "\$INSTALLDB not set." |
96 | [ -z "${BUILDDIR}" ] && die "\$BUILDDIR not set." |
97 | |
98 | # other needed vars |
99 | ALLDEPS="" |
100 | MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.mage" |
101 | |
102 | # much faster than fgrep |
103 | checklist_alldeps() |
104 | { |
105 | local i |
106 | local item="$1" |
107 | |
108 | for i in ${ALLDEPS} |
109 | do |
110 | [[ ${i} = ${item} ]] && return 1 |
111 | done |
112 | |
113 | return 0 |
114 | } |
115 | |
116 | checklist_processeddeps() |
117 | { |
118 | local i |
119 | local item="$1" |
120 | |
121 | for i in ${PROCESSEDDEPS} |
122 | do |
123 | [[ ${i} = ${item} ]] && return 1 |
124 | done |
125 | |
126 | return 0 |
127 | } |
128 | |
129 | all_depends() |
130 | { |
131 | local pname="$1" |
132 | local pver="$2" |
133 | local pbuild="$3" |
134 | |
135 | sql "select categories.pcat, |
136 | depends.pname, |
137 | depends.pver, |
138 | depends.pbuild |
139 | from depends |
140 | inner join packages |
141 | on depends.pkg_id=packages.id |
142 | and packages.pname='${pname}' |
143 | and packages.pver='${pver}' |
144 | and packages.pbuild='${pbuild}' |
145 | inner join categories |
146 | on depends.pcat_id=categories.id" |
147 | } |
148 | |
149 | all_sdepends() |
150 | { |
151 | local pname="$1" |
152 | local pver="$2" |
153 | local pbuild="$3" |
154 | |
155 | sql "select categories.pcat, |
156 | sdepends.pname, |
157 | sdepends.pver, |
158 | sdepends.pbuild |
159 | from sdepends |
160 | inner join packages |
161 | on sdepends.pkg_id=packages.id |
162 | and packages.pname='${pname}' |
163 | and packages.pver='${pver}' |
164 | and packages.pbuild='${pbuild}' |
165 | inner join categories |
166 | on sdepends.pcat_id=categories.id" |
167 | } |
168 | |
169 | |
170 | ##################### |
171 | ## rumwandern /path/to/mage/file/.mage |
172 | rumwandern() |
173 | { |
174 | unset DEPEND |
175 | unset SDEPEND |
176 | unset MY_DEPEND |
177 | |
178 | local DFILE |
179 | local SYM |
180 | local DEPNAME |
181 | local HIGHEST_DEPFILE |
182 | local MY_DEPEND |
183 | local REAL_PGKNAME |
184 | local VIRTUAL_NAME |
185 | local INSTALL_VIRTUAL |
186 | local PNAME |
187 | local PCAT |
188 | local PVER |
189 | local PBUILD |
190 | |
191 | local pname="$1" |
192 | local pver="$2" |
193 | local pbuild="$3" |
194 | local state="${MAGE_DISTRIBUTION}" |
195 | local retval |
196 | local fullname |
197 | |
198 | # forced nodeps |
199 | if [[ ${NODEPS} = true ]] |
200 | then |
201 | DEPEND="" |
202 | SDEPEND="" |
203 | fi |
204 | |
205 | MY_DEPEND="$(all_depends ${pname} ${pver} ${pbuild})" |
206 | |
207 | # for srcinstall & srcdepend only; SDEPEND also needed |
208 | if [[ ${METHOD} = srcinstall ]] || \ |
209 | [[ ${METHOD} = srcpretend ]] || \ |
210 | [[ ${METHOD} = srcupgrade ]] || \ |
211 | [[ ${METHOD} = srcuppretend ]] |
212 | then |
213 | MY_DEPEND="${MY_DEPEND} |
214 | $(all_sdepends ${pname} ${pver} ${pbuild})" |
215 | fi |
216 | |
217 | unset DEPEND |
218 | unset SDEPEND |
219 | |
220 | if [ -z "${MY_DEPEND}" ] |
221 | then |
222 | return 1 |
223 | fi |
224 | |
225 | for line in ${MY_DEPEND} |
226 | do |
227 | depcat="${line%%|*}" |
228 | depname="${line#*|}" |
229 | depname="${depname%%|*}" |
230 | |
231 | # exclude empty depnames |
232 | [[ -z ${depname} ]] && continue |
233 | |
234 | # exclude all already processed deps |
235 | if ! checklist_processeddeps "${depname}" |
236 | then |
237 | continue |
238 | fi |
239 | |
240 | # mark depfile as processed to prevent double runs -without version |
241 | # but do not add any virtuals to PROCESSEDDEPS or their resolved |
242 | # pkgnames will be ignored and they are missing on the dependecy-list |
243 | if [[ ${depname/virtual\//} = ${depname} ]] |
244 | then |
245 | PROCESSEDDEPS="${PROCESSEDDEPS} ${depname}" |
246 | fi |
247 | |
248 | if [[ ${depcat} = virtual ]] |
249 | then |
250 | retval=$(default_virtualname_to_pkgname "${depcat}" "${depname}") |
251 | depcat=${retval%%|*} |
252 | depname=${retval##*|} |
253 | fi |
254 | |
255 | highest=$(highest_pkg ${depname} ${state}) |
256 | depver="${highest%|*}" |
257 | depbuild="${highest##*|}" |
258 | |
259 | fullname="${depcat}/${depname}-${depver}-${depbuild}" |
260 | |
261 | ## check ob schon in ALLDEPS enthalten dann mach weiter |
262 | if checklist_alldeps "${fullname}" |
263 | then |
264 | ## check ob DFILE schon installiert ist |
265 | if ! is_installed --pcat "${depcat}" --pname "${depname}" --pver "${depver}" --pbuild "${depbuild}" |
266 | then |
267 | rumwandern "${depname}" "${depver}" "${depbuild}" |
268 | ALLDEPS="${ALLDEPS} ${fullname}" |
269 | fi |
270 | fi |
271 | done |
272 | return 0 |
273 | } |
274 | |
275 | |
276 | ### abort if this package is already installed (retval 3) |
277 | # maybe later ? |
278 | #[ -d ${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ] && exit 3 |
279 | |
280 | # # [[ ${METHOD} = pretend ]] || \ |
281 | # # [[ ${METHOD} = srcpretend ]] || \ |
282 | # # [[ ${METHOD} = uppretend ]] || \ |
283 | # # [[ ${METHOD} = srcuppretend ]] && \ |
284 | # # echo -n "Calculating dependencies ... " |
285 | # # |
286 | # # |
287 | # # if [[ ${METHOD} = upgrade ]] || \ |
288 | # # [[ ${METHOD} = srcupgrade ]] || \ |
289 | # # [[ ${METHOD} = uppretend ]] || \ |
290 | # # [[ ${METHOD} = srcuppretend ]] |
291 | # # then |
292 | # # INSTDEPS="$(${MLIBDIR}/magequery.sh -i)" |
293 | # # for dep in ${INSTDEPS} |
294 | # # do |
295 | # # PCAT="$(magename2pcat ${dep} installdb)" |
296 | # # PNAME="$(magename2pname ${dep})" |
297 | # # |
298 | # # # get the highest mage file from mage-db |
299 | # # MAGEFILE="$(get_highest_magefile ${PCAT} ${PNAME})" |
300 | # # |
301 | # # # if no install candidate was found, record this |
302 | # # # and process with the next one |
303 | # # if [[ -z ${MAGEFILE} ]] |
304 | # # then |
305 | # # NO_UPGRADE_CANDIDATE="${NO_UPGRADE_CANDIDATE} ${PCAT}/${PNAME}" |
306 | # # continue |
307 | # # fi |
308 | # # |
309 | # # # now get the pver&pbuild from the new file |
310 | # # PVER="$(magename2pver ${MAGEFILE})" |
311 | # # PBUILD="$(magename2pbuild ${MAGEFILE})" |
312 | # # |
313 | # # # do not wander files which are installed |
314 | # # if [ ! -d ${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ] |
315 | # # then |
316 | # # # get dependencies the package |
317 | # # rumwandern ${MAGEFILE} |
318 | # # |
319 | # # # now add the package itself to the dependencies |
320 | # # # (if not exists already) |
321 | # # #if [ -z "$(echo ${ALLDEPS} | fgrep "${MAGEFILE}")" ] |
322 | # # if checklist_alldeps "${MAGEFILE}" |
323 | # # then |
324 | # # ALLDEPS="${ALLDEPS} ${MAGEFILE}" |
325 | # # fi |
326 | # # fi |
327 | # # done |
328 | # # else |
329 | # # # get dependencies the package |
330 | # # rumwandern ${MAGEFILE} |
331 | # # |
332 | # # # now add the package itself to the dependencies |
333 | # # ALLDEPS="${ALLDEPS} ${MAGEFILE}" |
334 | # # fi |
335 | # # |
336 | # # [[ ${METHOD} = pretend ]] || \ |
337 | # # [[ ${METHOD} = srcpretend ]] || \ |
338 | # # [[ ${METHOD} = uppretend ]] || \ |
339 | # # [[ ${METHOD} = srcuppretend ]] && \ |
340 | # # echo "done" |
341 | # # |
342 | # # |
343 | # # ## show output of pretend |
344 | # # if [[ ${METHOD} = pretend ]] || \ |
345 | # # [[ ${METHOD} = srcpretend ]] || \ |
346 | # # [[ ${METHOD} = uppretend ]] || \ |
347 | # # [[ ${METHOD} = srcuppretend ]] |
348 | # # then |
349 | # # # this is a little bit faster |
350 | # # declare -i x=0 |
351 | # # echo -n "Building dependencies list ... " |
352 | # # for i in ${ALLDEPS} |
353 | # # do |
354 | # # (( x++ )) |
355 | # # k="$x" |
356 | # # [ ${x} -le 9 ] && k="0${k}" |
357 | # # #[ ${x} -le 99 ] && k="0${k}" |
358 | # # PCAT="$(magename2pcat ${i})" |
359 | # # PNAME="$(magename2pname ${i})" |
360 | # # PVER="$(magename2pver ${i})" |
361 | # # PBUILD="$(magename2pbuild ${i})" |
362 | # # if [ -z "${list}" ] |
363 | # # then |
364 | # # list="\t${COLBLUE}[${k}] ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}" |
365 | # # else |
366 | # # list="${list} |
367 | # # \t${COLBLUE}[${k}] ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}" |
368 | # # fi |
369 | # # unset PCAT PNAME PVER PBUILD |
370 | # # done |
371 | # # echo "done" |
372 | # # echo -e "${list}" |
373 | # # echo |
374 | # # |
375 | # # if [[ ! -z ${NO_UPGRADE_CANDIDATE} ]] |
376 | # # then |
377 | # # echo -e "${COLRED}Currently no candidates found for:${COLDEFAULT}" |
378 | # # for i in ${NO_UPGRADE_CANDIDATE} |
379 | # # do |
380 | # # echo -e "${COLRED} ${i}${COLDEFAULT}" |
381 | # # done |
382 | # # echo |
383 | # # echo -e "${COLRED}Please consider to uninstall all of them first,${COLDEFAULT}" |
384 | # # echo -e "${COLRED}because these packages does not exist in this distribution${COLDEFAULT}" |
385 | # # echo -e "${COLRED}anymore and there will be no further support for them.${COLDEFAULT}" |
386 | # # echo |
387 | # # fi |
388 | # # fi |
389 | # # |
390 | # # ## return output from src/install deps |
391 | # # [[ ${METHOD} = install ]] || \ |
392 | # # [[ ${METHOD} = srcinstall ]] || \ |
393 | # # [[ ${METHOD} = upgrade ]] || \ |
394 | # # [[ ${METHOD} = srcupgrade ]] && \ |
395 | # # echo "${ALLDEPS}" |
396 | # # |
397 | # # # delete ${BUILDDIR}/virtuals if exists as not needed anymore |
398 | # # #[ -d ${BUILDDIR}/virtuals ] && rm -rf ${BUILDDIR}/virtuals |
399 | |
400 | #all_depends "${PNAME}" "${PVER}" "${PBUILD}" |
401 | #all_depends "${PNAME}" "${MAGE_DISTRIBUTION}" |
402 | #retval=$(default_virtualname_to_pkgname "virtual" "opengl") |
403 | #depcat=${retval%%|*} |
404 | #depname=${retval##*|} |
405 | #echo "depcat='${depcat}'" |
406 | #echo "depname='${depname}'" |
407 | |
408 | rumwandern "${PNAME}" "${PVER}" "${PBUILD}" |
409 | # add the package itself |
410 | ALLDEPS="${ALLDEPS} ${PCAT}/${PNAME}-${PVER}-${PBUILD}" |
411 | declare -i x=0 |
412 | for i in ${ALLDEPS} |
413 | do |
414 | (( x++ )) |
415 | k="$x" |
416 | [ ${x} -le 9 ] && k="0${k}" |
417 | #[ ${x} -le 99 ] && k="0${k}" |
418 | echo -e "\t[${k}] ${i}" |
419 | done |
420 | echo |
Properties
Name | Value |
---|---|
svn:keywords | Id |