--- trunk/mage/usr/lib/mage/depwalker.sh 2005/09/10 13:34:56 235 +++ trunk/mage/usr/lib/mage/depwalker.sh 2008/01/13 21:32:38 654 @@ -1,7 +1,7 @@ #!/bin/bash #depwalker -# $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/depwalker.sh,v 1.3 2005-09-10 13:34:56 niro Exp $ +# $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/depwalker.sh,v 1.7 2008-01-13 21:32:38 niro Exp $ # default die function die() @@ -15,8 +15,8 @@ source /etc/mage.rc.global || \ die "/etc/mage.rc.global missing" -[ -f /etc/mage.rc ] && source /etc/mage.rc || \ - die "Your /etc/mage.rc is missing. Aborting." +[ -f ${MAGERC} ] && source ${MAGERC} || \ + die "Your ${MAGERC} is missing. Aborting." [ -f ${MLIBDIR}/mage4.functions.sh ] && \ source ${MLIBDIR}/mage4.functions.sh || \ @@ -92,6 +92,33 @@ ALLDEPS="" MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.mage" +# much faster than fgrep +checklist_alldeps() +{ + local i + local item="$1" + + for i in ${ALLDEPS} + do + [[ ${i} = ${item} ]] && return 1 + done + + return 0 +} + +checklist_processeddeps() +{ + local i + local item="$1" + + for i in ${PROCESSEDDEPS} + do + [[ ${i} = ${item} ]] && return 1 + done + + return 0 +} + ##################### ## rumwandern /path/to/mage/file/.mage rumwandern() @@ -110,6 +137,8 @@ local INSTALL_VIRTUAL local PNAME local PCAT + local PVER + local PBUILD DFILE="$1" @@ -146,6 +175,15 @@ while read SYM DEPNAME do + # exclude all already processed deps -without version + if ! checklist_processeddeps "${DEPNAME%-*}" + then + continue + fi + + # mark depfile as processed to prevent double runs -without version + PROCESSEDDEPS="${PROCESSEDDEPS} ${DEPNAME%-*}" + HIGHEST_DEPFILE=$(dep2highest_magefile "${DEPNAME}") PCAT="$(magename2pcat ${HIGHEST_DEPFILE})" @@ -154,7 +192,10 @@ PBUILD="$(magename2pbuild ${HIGHEST_DEPFILE})" ## check ob schon in ALLDEPS enthalten dann mach weiter - if [ -z "$(echo ${ALLDEPS} | fgrep "${HIGHEST_DEPFILE}")" ] + + # usage of fgrep is extremly slow and consumes a lot of cpu power + #if [ -z "$(echo ${ALLDEPS} | fgrep "${HIGHEST_DEPFILE}")" ] + if checklist_alldeps "${HIGHEST_DEPFILE}" then ### check ob DFILE schon installiert ist ### if [ ! -d ${MROOT}${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ] @@ -191,13 +232,28 @@ do PCAT="$(magename2pcat ${dep} installdb)" PNAME="$(magename2pname ${dep})" - PVER="$(magename2pver ${dep})" - PBUILD="$(magename2pbuild ${dep})" - # fake a mage file - MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.mage" + # get the highest mage file from mage-db + MAGEFILE="$(get_highest_magefile ${PCAT} ${PNAME})" - rumwandern ${MAGEFILE} + # now get the pver&pbuild from the new file + PVER="$(magename2pver ${MAGEFILE})" + PBUILD="$(magename2pbuild ${MAGEFILE})" + + # do not wander files which are installed + if [ ! -d ${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ] + then + # get dependencies the package + rumwandern ${MAGEFILE} + + # now add the package itself to the dependencies + # (if not exists already) + #if [ -z "$(echo ${ALLDEPS} | fgrep "${MAGEFILE}")" ] + if checklist_alldeps "${MAGEFILE}" + then + ALLDEPS="${ALLDEPS} ${MAGEFILE}" + fi + fi done else # get dependencies the package