Magellan Linux

Diff of /branches/mage-next/src/mage4.functions.sh

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 226 by niro, Fri Sep 9 16:35:46 2005 UTC revision 676 by niro, Tue Feb 26 19:49:20 2008 UTC
# Line 1  Line 1 
1  #!/bin/bash  #!/bin/bash
2  # Magellan Linux Installer Functions (mage.functions.sh)  # Magellan Linux Installer Functions (mage.functions.sh)
3  # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/mage4.functions.sh,v 1.1 2005-09-09 16:35:38 niro Exp $  # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/mage4.functions.sh,v 1.36 2008-02-26 19:49:20 niro Exp $
4    
5  mage_setup()  mage_setup()
6  {  {
# Line 361  install_characterdevices() Line 361  install_characterdevices()
361   local pkgname="$1"   local pkgname="$1"
362   local pathto   local pathto
363   local posix   local posix
364     local major
365     local minor
366   local IFS   local IFS
367    
368   # sanity checks; abort if not given   # sanity checks; abort if not given
# Line 374  install_characterdevices() Line 376  install_characterdevices()
376   # sets fieldseperator to "§" instead of " "   # sets fieldseperator to "§" instead of " "
377   IFS=§   IFS=§
378    
379   while read pathto posix   while read pathto posix major minor
380   do   do
381   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
382   [[ ${VERBOSE} = on ]] && echo -e "\t>>> CHAR: ${MROOT}${pathto}"   [[ ${VERBOSE} = on ]] && echo -e "\t>>> CHAR: ${MROOT}${pathto}"
383    
384   mknode -m ${posix} -c "${MROOT}${pathto}"   mknod -m ${posix} "${MROOT}${pathto}" c ${major} ${minor}
385   done < ${BUILDDIR}/${pkgname}/.char   done < ${BUILDDIR}/${pkgname}/.char
386    
387   # very important: unsetting the '§' fieldseperator   # very important: unsetting the '§' fieldseperator
# Line 432  install_database_entry() Line 434  install_database_entry()
434   local magefile   local magefile
435   local dbrecorddir   local dbrecorddir
436   local provide   local provide
437     local i
438    
439   # very basic getops   # very basic getops
440   for i in $*   for i in $*
# Line 473  install_database_entry() Line 476  install_database_entry()
476    
477   # create fake file descriptors   # create fake file descriptors
478   # used by virtual and source packages   # used by virtual and source packages
  local i  
479   for i in .dirs .symlinks .files .pipes .char   for i in .dirs .symlinks .files .pipes .char
480   do   do
481   touch ${dbrecorddir}/${i}   touch ${dbrecorddir}/${i}
# Line 504  install_database_entry() Line 506  install_database_entry()
506   provide="$(get_value_from_magefile PROVIDE ${magefile})"   provide="$(get_value_from_magefile PROVIDE ${magefile})"
507   if [ -n "${provide}" ]   if [ -n "${provide}" ]
508   then   then
509   virtuals_add "${provide}" "${pcat}/${pname}"   for i in ${provide}
510     do
511     virtuals_add "${i}" "${pcat}/${pname}"
512     done
513   fi   fi
514  }  }
515    
# Line 523  remove_database_entry() Line 528  remove_database_entry()
528   local magefile   local magefile
529   local dbrecorddir   local dbrecorddir
530   local provide   local provide
531     local i
532    
533   # very basic getops   # very basic getops
534   for i in $*   for i in $*
# Line 552  remove_database_entry() Line 558  remove_database_entry()
558   # abort if mage file not exists   # abort if mage file not exists
559   [ ! -f ${magefile} ] && die "remove_database_entry() ${magefile} not exist."   [ ! -f ${magefile} ] && die "remove_database_entry() ${magefile} not exist."
560    
561   # first unregister virtuals   # remove virtuals only if no other exist
562   provide="$(get_value_from_magefile PROVIDE ${magefile})"   if [[ $(count_installed_pkgs --pcat ${pcat} --pname ${pname}) -le 1 ]]
  if [ -n "${provide}" ]  
563   then   then
564   virtuals_del "${provide}" "${pcat}/${pname}"   # first unregister virtuals
565     provide="$(get_value_from_magefile PROVIDE ${magefile})"
566     if [ -n "${provide}" ]
567     then
568     for i in ${provide}
569     do
570     virtuals_del "${i}" "${pcat}/${pname}"
571     done
572     fi
573   fi   fi
574    
575   # removes database entry   # removes database entry
# Line 566  remove_database_entry() Line 579  remove_database_entry()
579   fi   fi
580  }  }
581    
582    # get the number of installed packages
583    count_installed_pkgs()
584    {
585     local pcat
586     local pname
587     local pkg
588     local i
589    
590     # very basic getops
591     for i in $*
592     do
593     case $1 in
594     --pcat|-c) shift; pcat="$1" ;;
595     --pname|-n) shift; pname="$1" ;;
596     esac
597     shift
598     done
599    
600     # sanity checks; abort if not given
601     [ -z "${pcat}" ] && die "pkg_count() \$pcat not given."
602     [ -z "${pname}" ] && die "pkg_count() \$pname not given."
603    
604     declare -i i=0
605     for pkg in $(get_uninstall_candidates --pcat ${pcat} --pname ${pname})
606     do
607     (( i++ ))
608     #echo "$i ${pkg}"
609     done
610    
611     # return the value
612     echo "${i}"
613    }
614    
615    
616  ###################################################  ###################################################
617  # function compare_mtime                          #  # function compare_mtime                          #
# Line 744  remove_files() Line 790  remove_files()
790   do   do
791   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
792    
793   if [ -e "${MROOT}${pathto}" ]   if [ ! -e "${MROOT}${pathto}" ]
794   then   then
795   [[ ${VERBOSE} = on ]] && \   [[ ${VERBOSE} = on ]] && \
796   echo -e "${COLRED}! exist${COLDEFAULT} === FILE: ${MROOT}${pathto}"   echo -e "${COLRED}! exist${COLDEFAULT} === FILE: ${MROOT}${pathto}"
# Line 758  remove_files() Line 804  remove_files()
804   # 1=keep me   #   # 1=keep me   #
805   case ${retval} in   case ${retval} in
806   0)   0)
807   [[ ${VERBOSE} = on ]] && echo -e "\t<<< FILE: ${MROOT}${pathto}"   # check if the file is config_protected
808   rm "${MROOT}${pathto}"   # ${MROOT} will automatically added if set !!
809   ;;   is_config_protected "${pathto}"
810     retval="$?"
811    
812     # 0 - not protected        #
813     # 1 - error                #
814     # 2 - protected            #
815     # 3 - protected but masked #
816    
817     case ${retval} in
818     # file is not protected - delete it
819     0|3)
820     [[ ${VERBOSE} = on ]] && echo -e "\t<<< FILE: ${MROOT}${pathto}"
821     rm "${MROOT}${pathto}"
822     ;;
823    
824     # file is protected, do not delete
825     2)
826     if [[ ${VERBOSE} = on ]]
827     then
828     echo -en "${COLRED}"
829     echo -n "! prot "
830     echo -en "${COLDEFAULT}"
831     echo " === FILE: ${MROOT}${pathto}"
832     fi
833     ;;
834     esac
835     ;;
836   1)   1)
837   [[ ${VERBOSE} = on ]] && \   [[ ${VERBOSE} = on ]] && \
838   echo -e "${COLRED}! mtime${COLDEFAULT} === FILE: ${MROOT}${pathto}"   echo -e "${COLRED}! mtime${COLDEFAULT} === FILE: ${MROOT}${pathto}"
# Line 932  remove_directories() Line 1003  remove_directories()
1003    
1004   [ ! -f ${MROOT}${INSTALLDB}/${pfull}/.char ] && die "remove_directories() .dirs not found"   [ ! -f ${MROOT}${INSTALLDB}/${pfull}/.char ] && die "remove_directories() .dirs not found"
1005    
  # uninstall of dirs ## added small hack to fix dirs  
  # must be reverse -> smage2 doesn't sort them  
  # -> using tac  
   
1006   # sets fieldseperator to "§" instead of " "   # sets fieldseperator to "§" instead of " "
1007   IFS=§   IFS=§
1008    
1009   while read pathto posix   # reversed order is mandatory !
1010     tac ${MROOT}${INSTALLDB}/${pfull}/.dirs | while read pathto posix
1011   do   do
1012   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
1013    
# Line 954  remove_directories() Line 1022  remove_directories()
1022   if [ -f "${MROOT}${pathto}/.keep" ]   if [ -f "${MROOT}${pathto}/.keep" ]
1023   then   then
1024   [[ ${VERBOSE} = on ]] && \   [[ ${VERBOSE} = on ]] && \
1025   echo -e "${COLRED}  .keep${COLDEFAULT} === DIR:  ${MROOT}${pathto}"   echo -e "${COLRED}! .keep${COLDEFAULT} === DIR:  ${MROOT}${pathto}"
1026   continue   continue
1027   fi   fi
1028    
# Line 971  remove_directories() Line 1039  remove_directories()
1039   [[ ${VERBOSE} = on ]] && \   [[ ${VERBOSE} = on ]] && \
1040   echo -e "${COLRED}! empty${COLDEFAULT} === DIR:  ${MROOT}${pathto}"   echo -e "${COLRED}! empty${COLDEFAULT} === DIR:  ${MROOT}${pathto}"
1041   fi   fi
1042   done < ${MROOT}${INSTALLDB}/${pfull}/.dirs   done
1043    
1044   # very important: unsetting the '§' fieldseperator   # very important: unsetting the '§' fieldseperator
1045   IFS=$'\n'   IFS=$'\n'
# Line 1038  fetch_packages() Line 1106  fetch_packages()
1106   local count_current   local count_current
1107   local count_total   local count_total
1108    
1109   [ -z "${MIRRORS}" ] && die "You have no mirrors defined. Please edit your /etc/mage.rc."   [ -z "${MIRRORS}" ] && die "You have no mirrors defined. Please edit your ${MAGERC}."
1110    
1111   # get count of total packages   # get count of total packages
1112   declare -i count_current=0   declare -i count_current=0
# Line 1090  fetch_packages() Line 1158  fetch_packages()
1158   --continue \   --continue \
1159   --progress bar \   --progress bar \
1160   --directory-prefix=${PKGDIR} \   --directory-prefix=${PKGDIR} \
1161   ${opt} ${mirr}/packages/${pkg}   ${opt} ${mirr}/${PACKAGES_SERVER_PATH}/${pkg}
1162   if [[ $? = 0 ]]   if [[ $? = 0 ]]
1163   then   then
1164   break   break
# Line 1113  syncmage() Line 1181  syncmage()
1181  {  {
1182   if [ -z "${RSYNC}" ]   if [ -z "${RSYNC}" ]
1183   then   then
1184   die "You have no rsync-mirrors defined. Please edit your /etc/mage.rc."   die "You have no rsync-mirrors defined. Please edit your ${MAGERC}."
1185   fi   fi
1186    
1187   local i   local i
1188   for i in ${RSYNC}   for i in ${RSYNC}
1189   do   do
1190   rsync \   rsync ${RSYNC_FETCH_OPTIONS} ${i} ${MAGEDIR}
  --recursive \  
  --links \  
  --perms \  
  --times \  
  --devices \  
  --timeout=600 \  
  --verbose \  
  --compress \  
  --progress \  
  --stats \  
  --delete \  
  --delete-after \  
  ${i} ${MAGEDIR}  
1191   if [[ $? = 0 ]]   if [[ $? = 0 ]]
1192   then   then
1193   break   break
# Line 1185  choppkgname() Line 1240  choppkgname()
1240   if [ -n "$(echo ${MAGENAME}|fgrep .mage)" ]   if [ -n "$(echo ${MAGENAME}|fgrep .mage)" ]
1241   then   then
1242   #cuts ARCH and PBUILD   #cuts ARCH and PBUILD
1243   #ARCH comes from /etc/mage.rc   #ARCH comes from ${MAGERC}
1244   MAGENAME=$(echo ${MAGENAME} |sed -e "s:-${ARCH}-r*.::g")   MAGENAME=$(echo ${MAGENAME} |sed -e "s:-${ARCH}-r*.::g")
1245    
1246   #cuts version number   #cuts version number
# Line 1218  pname2pcat() Line 1273  pname2pcat()
1273  # returns 0=stable 1=unstable  # returns 0=stable 1=unstable
1274  check_stable_package()  check_stable_package()
1275  {  {
1276     # first check if this magefile is not blacklisted
1277     blacklisted "$1" || return 1
1278    
1279   local STATE   local STATE
1280   STATE="$(get_value_from_magefile STATE "$1")"   STATE="$(get_value_from_magefile STATE "$1")"
1281    
1282   # state testing   # state testing
1283   if [[ ${USE_TESTING} = true ]]   if [[ ${USE_TESTING} = true ]] || [[ ${MAGE_DISTRIBUTION} = testing ]]
1284   then   then
1285   case ${STATE} in   case ${STATE} in
1286   testing|stable) return 0 ;;   testing|stable) return 0 ;;
# Line 1231  check_stable_package() Line 1289  check_stable_package()
1289   fi   fi
1290    
1291   # state unstable   # state unstable
1292   if [[ ${USE_UNSTABLE} = true ]]   if [[ ${USE_UNSTABLE} = true ]] || [[ ${MAGE_DISTRIBUTION} = unstable ]]
1293   then   then
1294   case ${STATE} in   case ${STATE} in
1295   unstable|testing|stable) return 0 ;;   unstable|testing|stable) return 0 ;;
# Line 1257  get_highest_magefile() Line 1315  get_highest_magefile()
1315   local PNAME="$2"   local PNAME="$2"
1316   local magefile   local magefile
1317    
1318   for magefile in $(ls --format=single-column -v ${MAGEDIR}/${PCAT}/${PNAME}/*)   # do not list the content of a directory, only the name (-d)
1319     for magefile in $(ls --format=single-column -v -d ${MAGEDIR}/${PCAT}/${PNAME}/*)
1320   do   do
1321     [[ -z ${magefile} ]] && continue
1322   # we exclude subdirs (for stuff like a md5sum dir)   # we exclude subdirs (for stuff like a md5sum dir)
1323   [ -d ${magefile} ] && continue   [[ -d ${magefile} ]] && continue
1324   if check_stable_package ${magefile}   if check_stable_package ${magefile}
1325   then   then
1326   HIGHEST_MAGEFILE=${magefile}   HIGHEST_MAGEFILE=${magefile}
# Line 1269  get_highest_magefile() Line 1329  get_highest_magefile()
1329   fi   fi
1330   done   done
1331    
1332   # stop here if HIGHEST_MAGEFILE is zero  # do not so anything
1333   # this package must be unstable or old  # # stop here if HIGHEST_MAGEFILE is zero
1334   if [ -z "${HIGHEST_MAGEFILE}" ]  # # this package must be unstable or old
1335   then  # if [ -z "${HIGHEST_MAGEFILE}" ]
1336   echo  # then
1337   echo -n "All packages named "  # echo
1338   echo -en ${COLRED}\""${PKGNAME%-*-*-*}\""${COLDEFAULT}  # echo -n "All packages named "
1339   echo -n " are marked "  # echo -en ${COLRED}\""${PKGNAME%-*-*-*}\""${COLDEFAULT}
1340   echo -en ${COLRED}"*UNSTABLE*"${COLDEFAULT}  # echo -n " are marked "
1341   echo "."  # echo -en ${COLRED}"*UNSTABLE*"${COLDEFAULT}
1342   echo "You need to declare USE_UNSTABLE=true to install this."  # echo "."
1343   echo  # echo "You need to declare USE_UNSTABLE=true to install this."
1344   echo "Example:"  # echo
1345   echo "         USE_UNSTABLE=true mage install ${PKGNAME%-*-*-*}"  # echo "Example:"
1346   echo  # echo "         USE_UNSTABLE=true mage install ${PKGNAME%-*-*-*}"
1347   echo "Be warned that these packages are not stable and may cause serious problems."  # echo
1348   echo "You should know what you are doing, so don't complain about any damage."  # echo "Be warned that these packages are not stable and may cause serious problems."
1349   echo  # echo "You should know what you are doing, so don't complain about any damage."
1350   return 1  # echo
1351   fi  # return 1
1352    # fi
1353    
1354   echo "${HIGHEST_MAGEFILE}"   echo "${HIGHEST_MAGEFILE}"
1355   return 0   return 0
# Line 1316  is_config_protected() Line 1377  is_config_protected()
1377   EXPFILE="${MROOT}$1"   EXPFILE="${MROOT}$1"
1378    
1379   # file does not exist; it can be written   # file does not exist; it can be written
1380   [ ! -e ${EXPFILE} ] && return 0   [[ ! -e ${EXPFILE} ]] && return 0
1381    
1382   # to be safe; it may be '§'   # to be safe; it may be '§'
1383   IFS=' '   IFS=' '
# Line 1326  is_config_protected() Line 1387  is_config_protected()
1387   do   do
1388   # ersetzen von $i nur wenn am anfang der variable   # ersetzen von $i nur wenn am anfang der variable
1389   TEST="${EXPFILE/#${MROOT}${i}/Protected}"   TEST="${EXPFILE/#${MROOT}${i}/Protected}"
1390   if [ "${TEST}" != "${EXPFILE}" ]   if [[ ${TEST} != ${EXPFILE} ]]
1391   then   then
1392   # setzen das es protected ist   # setzen das es protected ist
1393   PROTECTED=TRUE   PROTECTED=TRUE
# Line 1335  is_config_protected() Line 1396  is_config_protected()
1396   for x in ${CONFIG_PROTECT_MASK}   for x in ${CONFIG_PROTECT_MASK}
1397   do   do
1398   TEST="${EXPFILE/#${MROOT}${x}/Protect_Masked}"   TEST="${EXPFILE/#${MROOT}${x}/Protect_Masked}"
1399   if [ "${TEST}" != "${EXPFILE}" ]   if [[ ${TEST} != ${EXPFILE} ]]
1400   then   then
1401   PROTECTED=MASKED   PROTECTED=MASKED
1402   fi   fi
# Line 1371  is_config_protected() Line 1432  is_config_protected()
1432  ###################################################  ###################################################
1433  count_protected_files()  count_protected_files()
1434  {  {
1435   ${MLIBDIR}/writeprotected "$1"   local file="$1"
1436     local dirname="${file%/*}"
1437     local filename="${file##*/}"
1438     local count
1439     local output
1440     local i
1441    
1442     declare -i count=0
1443    
1444     # check if there are already protected files
1445     for oldpretected in $(find ${dirname} -iname "._cfg????_${filename}" |
1446     sed -e "s:\(^.*/\)\(._cfg*_\)\(/.*$\):\1\2\3\%\2\%\3:" |
1447     sort -t'%' -k3 -k2 | cut -f1 -d'%')
1448     do
1449     count=$(echo ${oldpretected} | cut -d_ -f2 | sed -e "s:cfg::")
1450     done
1451     (( count ++ ))
1452    
1453     # fill output up with zeros
1454     for (( i=${#count}; i < 4; i++ )); do output="${output}0"; done
1455     output="${output}${count}"
1456    
1457     echo "${output}"
1458  }  }
1459    
1460  # call with  # call with
# Line 1388  get_uninstall_candidates() Line 1471  get_uninstall_candidates()
1471   local list   local list
1472   local pcatdir   local pcatdir
1473   local protected   local protected
1474     local i
1475    
1476   # very basic getops   # very basic getops
1477   for i in $*   for i in $*
# Line 1400  get_uninstall_candidates() Line 1484  get_uninstall_candidates()
1484   shift   shift
1485   done   done
1486    
1487   # sanity checks; abort if not given  # it's not good to complain here about empty pnames; better to continue later anyway
1488   [ -z "${search_pname}" ] && die "get_uninstall_candidates() \$search_pname not given."  # # sanity checks; abort if not given
1489    # [ -z "${search_pname}" ] && die "get_uninstall_candidates() \$search_pname not given."
1490    
1491    
1492   # check needed global vars   # check needed global vars
1493   [ -z "${INSTALLDB}" ] && die "get_uninstall_candidates() \$INSTALLDB not set."   [ -z "${INSTALLDB}" ] && die "get_uninstall_candidates() \$INSTALLDB not set."
1494    
1495   # set pcatdir to '*' if empty   # set pcatdir to '*' if empty
1496   [ -z "${pcatdir}" ] && pcatdir=*   [ -z "${pcatdir}" ] && pcatdir='*'
1497    
1498   for pkg in ${MROOT}${INSTALLDB}/${pcatdir}/*   for pkg in ${MROOT}${INSTALLDB}/${pcatdir}/*
1499   do   do
# Line 1493  virtuals_add() Line 1578  virtuals_add()
1578   local oldline   local oldline
1579   local line i   local line i
1580   local installed_file   local installed_file
1581     local OLDIFS
1582    
1583   if virtuals_read ${virtualname}   if virtuals_read ${virtualname}
1584   then   then
1585   # make shure ${PKG_NAME} is *not* in ${VIRTUAL_NAME} already   # make sure ${PKG_NAME} is *not* in ${VIRTUAL_NAME} already
1586   for i in $(virtuals_read ${virtualname} showpkgs)   for i in $(virtuals_read ${virtualname} showpkgs)
1587   do   do
1588   if [[ ${i} = ${pkgname} ]]   if [[ ${i} = ${pkgname} ]]
# Line 1515  virtuals_add() Line 1601  virtuals_add()
1601   # make a backup   # make a backup
1602   mv ${MROOT}${VIRTUALDB_FILE} ${MROOT}${VIRTUALDB_FILE}.old   mv ${MROOT}${VIRTUALDB_FILE} ${MROOT}${VIRTUALDB_FILE}.old
1603    
1604     OLDIFS="${IFS}"
1605   IFS=$'\n'   IFS=$'\n'
1606   for line in $(< ${MROOT}${VIRTUALDB_FILE}.old)   for line in $(< ${MROOT}${VIRTUALDB_FILE}.old)
1607   do   do
# Line 1526  virtuals_add() Line 1613  virtuals_add()
1613   echo "${line}" >> ${MROOT}${VIRTUALDB_FILE}   echo "${line}" >> ${MROOT}${VIRTUALDB_FILE}
1614   fi   fi
1615   done   done
1616     # unset IFS
1617   #unset IFS   IFS="${OLDIFS}"
1618   else   else
1619   echo -ne "${COLBLUE} *** ${COLDEFAULT}"   echo -ne "${COLBLUE} >>> ${COLDEFAULT}"
1620   echo "register ${pkgname} as ${virtualname} ..."   echo "register ${pkgname} as ${virtualname} ..."
1621   echo "${virtualname} ${pkgname}" >> ${MROOT}${VIRTUALDB_FILE}   echo "${virtualname} ${pkgname}" >> ${MROOT}${VIRTUALDB_FILE}
1622   fi   fi
# Line 1541  virtuals_add() Line 1628  virtuals_add()
1628  #$1 virtualname; $2 pkgname  #$1 virtualname; $2 pkgname
1629  virtuals_del() {  virtuals_del() {
1630    
1631   local VIRTUAL_NAME PKG_NAME OLD_LINE METHOD line i x PKG_INSTALLED   local virtualname="$1"
1632     local pkgname="$2"
1633   VIRTUAL_NAME=$1   local oldline
1634   PKG_NAME=$2   local method
1635     local line i x
1636   #first check if exists   local pkg_installed
1637   if virtuals_read ${VIRTUAL_NAME}   local OLDIFS
1638    
1639     # first check if exists
1640     if virtuals_read ${virtualname}
1641   then   then
1642   #get method -> delall or update and check if ${PKG_NAME} exists in ${VIRTUAL_NAME}   # get method -> delall or update and check if ${PKG_NAME} exists in ${VIRTUAL_NAME}
1643   declare -i x=0   declare -i x=0
1644   for i in $(virtuals_read ${VIRTUAL_NAME} showpkgs)   for i in $(virtuals_read ${virtualname} showpkgs)
1645   do   do
1646   if [ "${i}" == "${PKG_NAME}" ]   if [[ ${i} = ${pkgname} ]]
1647   then   then
1648   PKG_INSTALLED=true   pkg_installed=true
1649   fi   fi
1650   ((x++))   ((x++))
1651   done   done
1652    
1653   #abort if not installed   # abort if not installed
1654   if [ "${PKG_INSTALLED}" != "true" ]   if [[ ${pkg_installed} != true ]]
1655   then   then
1656   echo "!!!! ${PKG_NAME} does not exists in ${VIRTUAL_NAME}."   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1657     echo "${pkgname} does not exists in ${virtualname}."
1658   return 0   return 0
1659   fi   fi
1660    
1661   if [ ${x} -ge 2 ]   if [ ${x} -ge 2 ]
1662   then   then
1663   METHOD=update   method=update
1664   else   else
1665   METHOD=delall   method=delall
1666   fi   fi
1667    
1668   #get the complete line   # get the complete line
1669   OLD_LINE="$(virtuals_read ${VIRTUAL_NAME} showline)"   oldline="$(virtuals_read ${virtualname} showline)"
1670    
1671   #make a backup   # make a backup of the db
1672   mv ${VIRTUALDB_FILE} ${VIRTUALDB_FILE}.old   mv ${VIRTUALDB_FILE} ${VIRTUALDB_FILE}.old
1673    
1674   #parse virtualdb   # parse virtualdb
1675     OLDIFS="${IFS}"
1676   IFS=$'\n'   IFS=$'\n'
1677   for line in $(< ${VIRTUALDB_FILE}.old)   for line in $(< ${VIRTUALDB_FILE}.old)
1678   do   do
1679   if [ "${line}" == "${OLD_LINE}" ]   if [[ ${line} = ${oldline} ]]
1680   then   then
1681   #delall or update?   #delall or update?
1682   case ${METHOD} in   case ${method} in
1683   update)   update)
1684   echo "<<<< Unlinking ${PKG_NAME} from ${VIRTUAL_NAME} in virtual database ..."   echo -ne "${COLBLUE} *** ${COLDEFAULT}"
1685   #del PKG_NAME from line   echo "Unlinking ${pkgname} from ${virtualname} in virtual database ..."
1686   echo "${line/ ${PKG_NAME}/}" >> ${VIRTUALDB_FILE}   # del PKG_NAME from line
1687     echo "${line/ ${pkgname}/}" >> ${VIRTUALDB_FILE}
1688   ;;   ;;
1689   delall)   delall)
1690   echo "<<<< Deleting ${VIRTUAL_NAME} in virtual database ..."   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"
1691   #continue; do not write anything   echo "Deleting ${virtualname} in virtual database ..."
1692     # continue; do not write anything
1693   continue   continue
1694   ;;   ;;
1695   esac   esac
# Line 1603  virtuals_del() { Line 1697  virtuals_del() {
1697   echo "${line}" >> ${VIRTUALDB_FILE}   echo "${line}" >> ${VIRTUALDB_FILE}
1698   fi   fi
1699   done   done
1700   unset IFS   # unset IFS
1701     IFS="${OLDIFS}"
1702   else   else
1703   echo "!!!! ${VIRTUAL_NAME} does not exists in virtual database."   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1704     echo "${virtualname} does not exists in virtual database."
1705   fi   fi
1706  }  }
1707    
# Line 1637  minclude() Line 1733  minclude()
1733  {  {
1734   local i   local i
1735    
1736   if [ -n "$@" ]   if [[ -n $* ]]
1737   then   then
1738   for i in $@   for i in $*
1739   do   do
1740   [[ ${MAGEDEBUG} = on ]] && \   [[ ${MAGEDEBUG} = on ]] && \
1741   echo "--- Including ${MAGEDIR}/include/${i}.minc"   echo "--- Including ${MAGEDIR}/include/${i}.minc"
# Line 1653  sminclude() Line 1749  sminclude()
1749  {  {
1750   local i   local i
1751    
1752   if [ -n "$@" ]   if [[ -n $* ]]
1753   then   then
1754   for i in $@   for i in $*
1755   do   do
1756   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"
1757   source ${SMAGESCRIPTSDIR}/include/${i}.sminc   source ${SMAGESCRIPTSDIR}/include/${i}.sminc
# Line 1670  is_newer_mage_version_available() Line 1766  is_newer_mage_version_available()
1766   local newest_mage   local newest_mage
1767   local installed_mage   local installed_mage
1768    
1769   newest_mage="$( CATEGORIE=app-mage MAGENAME=mage get_highest_magefile;echo $(basename ${MAGEFILE} .mage) )"   newest_mage="$(basename $(get_highest_magefile app-mage mage) .mage)"
1770   installed_mage="$(magequery -n mage | cut -d' ' -f5)"   installed_mage="$(magequery -n mage | cut -d' ' -f5)"
1771    
1772   if [[ ${newest_mage} > ${installed_mage} ]]   if [[ ${newest_mage} > ${installed_mage} ]]
# Line 1679  is_newer_mage_version_available() Line 1775  is_newer_mage_version_available()
1775   echo -en ${COLRED}"An update for your packetmanager is available. "${COLDEFAULT}   echo -en ${COLRED}"An update for your packetmanager is available. "${COLDEFAULT}
1776   echo -e ${COLBLUE}"[ ${newest_mage} ]"${COLDEFAULT}   echo -e ${COLBLUE}"[ ${newest_mage} ]"${COLDEFAULT}
1777   echo "It is recommened to install this newer version"   echo "It is recommened to install this newer version"
1778   echo "or your current system installation may brake."   echo "or your current system installation may break."
1779   echo   echo
1780   echo -en "Please update mage by running "   echo -en "Please update mage by running "
1781   echo -e ${COLGREEN}"'mage install mage'"${COLDEFAULT}   echo -e ${COLGREEN}"'mage install mage'"${COLDEFAULT}
# Line 1951  get_value_from_magefile() Line 2047  get_value_from_magefile()
2047   local magefile="$2"   local magefile="$2"
2048   local value   local value
2049    
2050     [[ -z ${var} ]] && return 1
2051     [[ -z ${magefile} ]] && return 1
2052    
2053   # local all possible vars of a mage file   # local all possible vars of a mage file
2054   # to prevent bad issues   # to prevent bad issues
2055   local PKGNAME   local PKGNAME
# Line 1963  get_value_from_magefile() Line 2062  get_value_from_magefile()
2062   local PKGTYPE   local PKGTYPE
2063   local preinstall   local preinstall
2064   local postinstall   local postinstall
2065     local preremove
2066     local postremove
2067    
2068   # sanity checks   # sanity checks
2069   [ -f ${magefile} ] && source ${magefile} || \   [ -f ${magefile} ] && source ${magefile} || \
# Line 1972  get_value_from_magefile() Line 2073  get_value_from_magefile()
2073   source ${magefile}   source ${magefile}
2074   eval value=\$$(echo ${var})   eval value=\$$(echo ${var})
2075   echo "${value}"   echo "${value}"
2076    
2077     # unset these functions
2078     unset -f preinstall
2079     unset -f postinstall
2080     unset -f preremove
2081     unset -f postremove
2082  }  }
2083    
2084  mage_install()  mage_install()
# Line 1988  mage_install() Line 2095  mage_install()
2095   local PKGTYPE   local PKGTYPE
2096   local preinstall   local preinstall
2097   local postinstall   local postinstall
2098     local preremove
2099     local postremove
2100    
2101   local pcat   local pcat
2102   local pname   local pname
# Line 2070  mage_install() Line 2179  mage_install()
2179   echo B:${pbuild}   echo B:${pbuild}
2180   fi   fi
2181    
2182   smage2file=${SMAGESCRIPTSDIR}/${pname}/${pname}-${pver}-${pbuild}.smage2   if [[ -z ${MAGE_TARGETS} ]]
2183     then
2184     smage2file=${SMAGESCRIPTSDIR}/${pname}/${pname}-${pver}-${pbuild}.smage2
2185     else
2186     smage2file=${SMAGESCRIPTSDIR}/${pname/${MAGE_TARGETS}/}/${pname/${MAGE_TARGETS}/}-${pver}-${pbuild}.smage2
2187     fi
2188   if [ -f "${smage2file}" ]   if [ -f "${smage2file}" ]
2189   then   then
2190     echo -e " ${COLBLUE}***${COLDEFAULT} building package from source ... "
2191   smage2 ${smage2file} || die "compile failed"   smage2 ${smage2file} || die "compile failed"
2192   else   else
2193   echo   echo
# Line 2086  mage_install() Line 2201  mage_install()
2201   if [[ ${PKGTYPE} != virtual ]] && \   if [[ ${PKGTYPE} != virtual ]] && \
2202   [[ ${PKGTYPE} != sources ]]   [[ ${PKGTYPE} != sources ]]
2203   then   then
2204   # show a verbose message on src-install   echo -e " ${COLBLUE}***${COLDEFAULT} merging files into system ... "
  if [[ ${src_install} = true ]]  
  then  
  echo -ne "${COLBLUE} *** ${COLDEFAULT}"  
  echo -ne "merging files: "  
  echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  
  echo -e "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT}"  
  fi  
2205   build_doinstall ${PKGNAME}   build_doinstall ${PKGNAME}
2206   fi   fi
2207    
# Line 2149  mage_install() Line 2257  mage_install()
2257  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2258  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "
2259   echo "successfully installed."   echo "successfully installed."
2260    
2261     # unset these functions
2262     unset -f preinstall
2263     unset -f postinstall
2264     unset -f preremove
2265     unset -f postremove
2266  }  }
2267    
2268  md5sum_packages()  md5sum_packages()
# Line 2253  uninstall_packages() Line 2367  uninstall_packages()
2367   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2368   echo "following candidate(s) will be removed:"   echo "following candidate(s) will be removed:"
2369   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2370   echo -ne "\033[1m${can_pcat}/${can_pname}:${COLDEFAULT}"   echo -ne "${COLBOLD}${can_pcat}/${can_pname}:${COLDEFAULT}"
2371   echo -e "${COLRED} ${can_ver_list} ${COLDEFAULT}"   echo -e "${COLRED} ${can_ver_list} ${COLDEFAULT}"
2372   echo   echo
2373   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   if [ ${MAGE_UNINSTALL_TIMEOUT} -gt 0 ]
2374   echo "( Press [CTRL+C] to abort )"   then
2375   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2376   echo -n "Waiting ${MAGE_UNINSTALL_TIMEOUT} seconds ..."   echo "( Press [CTRL+C] to abort )"
2377   for ((i=MAGE_UNINSTALL_TIMEOUT; i >= 0; i--))   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2378   do   echo -n "Waiting ${MAGE_UNINSTALL_TIMEOUT} seconds ..."
2379   echo -ne "${COLRED} ${i}${COLDEFAULT}"   for ((i=MAGE_UNINSTALL_TIMEOUT; i >= 0; i--))
2380   sleep 1   do
2381   done   echo -ne "${COLRED} ${i}${COLDEFAULT}"
2382   echo   sleep 1
2383   echo   done
2384     echo
2385     echo
2386     fi
2387    
2388   for pkg in ${list}   for pkg in ${list}
2389   do   do
# Line 2304  mage_uninstall() Line 2421  mage_uninstall()
2421   local PKGTYPE   local PKGTYPE
2422   local preinstall   local preinstall
2423   local postinstall   local postinstall
2424     local preremove
2425     local postremove
2426    
2427   local pcat   local pcat
2428   local pname   local pname
# Line 2339  mage_uninstall() Line 2458  mage_uninstall()
2458   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"
2459   echo -n "removing: "   echo -n "removing: "
2460   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2461   echo -e "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT}"   echo -e "${COLRED}${pname}-${pver}-${pbuild}${COLDEFAULT}"
2462    
2463   magefile="${MAGEDIR}/${pcat}/${pname}/${pname}-${pver}-${pbuild}.mage"   magefile="${MROOT}${INSTALLDB}/${pcat}/${pname}-${pver}-${pbuild}/${pname}-${pver}-${pbuild}.mage"
2464   source ${magefile}   source ${magefile}
2465    
2466   ## preremove scripts   ## preremove scripts
# Line 2401  mage_uninstall() Line 2520  mage_uninstall()
2520  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2521  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "
2522   echo "successfully removed."   echo "successfully removed."
2523    
2524     # unset these functions
2525     unset -f preinstall
2526     unset -f postinstall
2527     unset -f preremove
2528     unset -f postremove
2529  }  }
2530    
2531  show_etc_update_mesg() {  show_etc_update_mesg() {
# Line 2415  show_etc_update_mesg() { Line 2540  show_etc_update_mesg() {
2540   echo "Please run 'etc-update' to update your configuration files."   echo "Please run 'etc-update' to update your configuration files."
2541   echo   echo
2542  }  }
2543    
2544    pkgsearch()
2545    {
2546     local string="$1"
2547     local result
2548     local pkg
2549     local pcat
2550     local pname
2551     local magefile
2552     local pver
2553     local pbuild
2554     local state
2555     local descriptiom
2556     local homepage
2557     local i
2558     local all_installed
2559     local ipver
2560     local ipbuild
2561     local latest_available
2562     local depsfull
2563     local sdepsfull
2564     local deps
2565     local sdeps
2566     local dep
2567     local sign
2568    
2569     # only names no versions
2570     result="$(find ${MAGEDIR} -mindepth 2 -maxdepth 2 -type d -name '*'${string}'*'| sed '/profiles/d' | sed '/includes/d')"
2571     #result="$(find ${MAGEDIR} -type f -name '*'${string}'*'.mage | sort)"
2572    
2573     # nothing found
2574     [[ -z ${result} ]] && die "No package found containing '${string}' in the name."
2575    
2576     for pkg in ${result}
2577     do
2578     # dirty, but does the job
2579     pcat="$(magename2pcat ${pkg}/foo)"
2580     pname="$(magename2pname ${pkg}-foo-foo)"
2581    
2582     # get highest version available
2583     magefile=$(get_highest_magefile ${pcat} ${pname})
2584    
2585     if [[ ! -z ${magefile} ]]
2586     then
2587     # now get all needed infos to print a nice output
2588     pver="$(magename2pver ${magefile})"
2589     pbuild="$(magename2pbuild ${magefile})"
2590     state="$(get_value_from_magefile STATE ${magefile})"
2591     description="$(get_value_from_magefile DESCRIPTION ${magefile})"
2592     homepage="$(get_value_from_magefile HOMEPAGE ${magefile})"
2593    
2594     # all installed
2595     for i in $(get_uninstall_candidates --pname ${pname} --pcat ${pcat})
2596     do
2597     ipver="$(magename2pver ${i})"
2598     ipbuild="$(magename2pbuild ${i})"
2599    
2600     if [[ -z ${all_installed} ]]
2601     then
2602     all_installed="${ipver}-${ipbuild}"
2603     else
2604     all_installed="${all_installed} ${ipver}-${ipbuild}"
2605     fi
2606     done
2607     [[ -z ${all_installed} ]] && all_installed="none"
2608    
2609     case ${state} in
2610     stable) state=${COLGREEN}"[s] ";;
2611     testing) state=${COLYELLOW}"[t] ";;
2612     unstable) state=${COLRED}"[u] ";;
2613     old) state=${COLGRAY}"[o] ";;
2614     esac
2615    
2616     latest_available="${pver}-${pbuild}"
2617     else
2618     # package is masked
2619     state="${COLRED}[m] "
2620     latest_available="${COLRED}masked for this distribution.${COLDEFAULT}"
2621     fi
2622    
2623     depsfull="$(get_value_from_magefile DEPEND ${magefile})"
2624     sdepsfull="$(get_value_from_magefile SDEPEND ${magefile})"
2625    
2626     while read sign dep
2627     do
2628     case ${dep} in
2629     "") continue;;
2630     esac
2631    
2632     deps="${deps} $(basename ${dep%-*})"
2633     done << EOF
2634    ${depsfull}
2635    EOF
2636    
2637     while read sign dep
2638     do
2639     case ${dep} in
2640     "") continue;;
2641     esac
2642    
2643     sdeps="${sdeps} $(basename ${dep%-*})"
2644     done << EOF
2645    ${sdepsfull}
2646    EOF
2647    
2648     echo -e "${state}${pcat}/${pname}"${COLDEFAULT}
2649     echo -e "      Latest available:   ${latest_available}"
2650     echo "      Installed versions: ${all_installed}"
2651     echo "      Description: ${description}"
2652     echo "      Homepage: ${homepage}"
2653     echo "      Depends: ${deps}"
2654     echo "      SDepends: ${sdeps}"
2655     echo
2656    
2657     unset pcat
2658     unset pname
2659     unset magefile
2660     unset pver
2661     unset pbuild
2662     unset state
2663     unset descriptiom
2664     unset homepage
2665     unset all_installed
2666     unset ipver
2667     unset ipbuild
2668     unset depsfull
2669     unset sdepsfull
2670     unset deps
2671     unset sdeps
2672     unset dep
2673     unset sign
2674     done
2675    }
2676    
2677    export_inherits()
2678    {
2679     local include="$1"
2680     shift
2681    
2682     while [ "$1" ]
2683     do
2684     local functions="$1"
2685    
2686     # sanity checks
2687     [ -z "${include}" ] && die "export_inherits(): \$include not given."
2688     [ -z "${functions}" ] && die "export_inherits(): \$functions not given."
2689    
2690     eval "${functions}() { ${include}_${functions} ; }"
2691    
2692     # debug
2693     [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}"
2694    
2695     shift
2696     done
2697    }
2698    
2699    mlibdir()
2700    {
2701     local libdir=lib
2702     [[ ${ARCH} = x86_64 ]] && libdir=lib64
2703    
2704     echo "${libdir}"
2705    }
2706    
2707    ## blacklisted ${magefile}
2708    blacklisted()
2709    {
2710     [[ -z ${MAGE_DISTRIBUTION} ]] && local MAGE_DISTRIBUTION=stable
2711    
2712     # compat
2713     [[ ${USE_UNSTABLE} = true ]] && local MAGE_DISTRIBUTION=unstable
2714     [[ ${USE_TESTING} = true ]] && local MAGE_DISTRIBUTION=testing
2715    
2716     local EXCLUDED="${MROOT}/etc/mage-profile/package.blacklist-${ARCH}-${MAGE_DISTRIBUTION}"
2717    
2718     # return 0 if the list not exist; nothin is masked
2719     [[ ! -f ${EXCLUDED} ]] && return 0
2720    
2721     local MAGEFILE="$1"
2722    
2723     local PCAT="$(magename2pcat ${MAGEFILE})"
2724     local PNAME="$(magename2pname ${MAGEFILE})"
2725     local PVER="$(magename2pver ${MAGEFILE})"
2726     local PBUILD="$(magename2pbuild ${MAGEFILE})"
2727    
2728     local EXPCAT EXPNAME EXPVER EXPBUILD
2729     while read EXPCAT EXPNAME EXPVER EXPBUILD
2730     do
2731     # ignore spaces and comments
2732             case "${EXPCAT}" in
2733                     \#*|"") continue ;;
2734             esac
2735    
2736     # exclude full pver
2737     if [[ -n ${PCAT} ]] && [[ -n ${PNAME} ]] &&
2738     [[ -n ${EXPCAT} ]] && [[ -n ${EXPNAME} ]] &&
2739     [[ -n ${PVER} ]] && [[ -n ${PBUILD} ]] &&
2740     [[ -n ${EXPVER} ]] && [[ -n ${EXPBUILD} ]]
2741     then
2742     [[ ${EXPCAT}/${EXPNAME}-${EXPVER}-${EXPBUILD} = ${PCAT}/${PNAME}-${PVER}-${PBUILD} ]] && return 1
2743     fi
2744    
2745     # exclude pcat/pname only
2746     if [[ -n ${PCAT} ]] && [[ -n ${PNAME} ]] &&
2747     [[ -n ${EXPCAT} ]] && [[ -n ${EXPNAME} ]] &&
2748     [[ -z ${EXPVER} ]] && [[ -z ${EXPBUILD} ]]
2749     then
2750     [[ ${EXPCAT}/${EXPNAME} = ${PCAT}/${PNAME} ]] && return 1
2751     fi
2752     done << EOF
2753    $( cat ${EXCLUDED}; echo)
2754    EOF
2755    
2756     return 0
2757    }
2758    

Legend:
Removed from v.226  
changed lines
  Added in v.676