Magellan Linux

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

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

revision 226 by niro, Fri Sep 9 16:35:46 2005 UTC revision 312 by niro, Sun Jan 1 23:15:54 2006 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.13 2006-01-01 23:15:48 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} -c "${MROOT}${pathto}" ${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 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 1222  check_stable_package() Line 1290  check_stable_package()
1290   STATE="$(get_value_from_magefile STATE "$1")"   STATE="$(get_value_from_magefile STATE "$1")"
1291    
1292   # state testing   # state testing
1293   if [[ ${USE_TESTING} = true ]]   if [[ ${USE_TESTING} = true ]] || [[ ${MAGE_DISTRIBUTION} = testing ]]
1294   then   then
1295   case ${STATE} in   case ${STATE} in
1296   testing|stable) return 0 ;;   testing|stable) return 0 ;;
# Line 1231  check_stable_package() Line 1299  check_stable_package()
1299   fi   fi
1300    
1301   # state unstable   # state unstable
1302   if [[ ${USE_UNSTABLE} = true ]]   if [[ ${USE_UNSTABLE} = true ]] || [[ ${MAGE_DISTRIBUTION} = unstable ]]
1303   then   then
1304   case ${STATE} in   case ${STATE} in
1305   unstable|testing|stable) return 0 ;;   unstable|testing|stable) return 0 ;;
# Line 1493  virtuals_add() Line 1561  virtuals_add()
1561   local oldline   local oldline
1562   local line i   local line i
1563   local installed_file   local installed_file
1564     local OLDIFS
1565    
1566   if virtuals_read ${virtualname}   if virtuals_read ${virtualname}
1567   then   then
# Line 1515  virtuals_add() Line 1584  virtuals_add()
1584   # make a backup   # make a backup
1585   mv ${MROOT}${VIRTUALDB_FILE} ${MROOT}${VIRTUALDB_FILE}.old   mv ${MROOT}${VIRTUALDB_FILE} ${MROOT}${VIRTUALDB_FILE}.old
1586    
1587     OLDIFS="${IFS}"
1588   IFS=$'\n'   IFS=$'\n'
1589   for line in $(< ${MROOT}${VIRTUALDB_FILE}.old)   for line in $(< ${MROOT}${VIRTUALDB_FILE}.old)
1590   do   do
# Line 1526  virtuals_add() Line 1596  virtuals_add()
1596   echo "${line}" >> ${MROOT}${VIRTUALDB_FILE}   echo "${line}" >> ${MROOT}${VIRTUALDB_FILE}
1597   fi   fi
1598   done   done
1599     # unset IFS
1600   #unset IFS   IFS="${OLDIFS}"
1601   else   else
1602   echo -ne "${COLBLUE} *** ${COLDEFAULT}"   echo -ne "${COLBLUE} >>> ${COLDEFAULT}"
1603   echo "register ${pkgname} as ${virtualname} ..."   echo "register ${pkgname} as ${virtualname} ..."
1604   echo "${virtualname} ${pkgname}" >> ${MROOT}${VIRTUALDB_FILE}   echo "${virtualname} ${pkgname}" >> ${MROOT}${VIRTUALDB_FILE}
1605   fi   fi
# Line 1541  virtuals_add() Line 1611  virtuals_add()
1611  #$1 virtualname; $2 pkgname  #$1 virtualname; $2 pkgname
1612  virtuals_del() {  virtuals_del() {
1613    
1614   local VIRTUAL_NAME PKG_NAME OLD_LINE METHOD line i x PKG_INSTALLED   local virtualname="$1"
1615     local pkgname="$2"
1616   VIRTUAL_NAME=$1   local oldline
1617   PKG_NAME=$2   local method
1618     local line i x
1619   #first check if exists   local pkg_installed
1620   if virtuals_read ${VIRTUAL_NAME}   local OLDIFS
1621    
1622     # first check if exists
1623     if virtuals_read ${virtualname}
1624   then   then
1625   #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}
1626   declare -i x=0   declare -i x=0
1627   for i in $(virtuals_read ${VIRTUAL_NAME} showpkgs)   for i in $(virtuals_read ${virtualname} showpkgs)
1628   do   do
1629   if [ "${i}" == "${PKG_NAME}" ]   if [[ ${i} = ${pkgname} ]]
1630   then   then
1631   PKG_INSTALLED=true   pkg_installed=true
1632   fi   fi
1633   ((x++))   ((x++))
1634   done   done
1635    
1636   #abort if not installed   # abort if not installed
1637   if [ "${PKG_INSTALLED}" != "true" ]   if [[ ${pkg_installed} != true ]]
1638   then   then
1639   echo "!!!! ${PKG_NAME} does not exists in ${VIRTUAL_NAME}."   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1640     echo "${pkgname} does not exists in ${virtualname}."
1641   return 0   return 0
1642   fi   fi
1643    
1644   if [ ${x} -ge 2 ]   if [ ${x} -ge 2 ]
1645   then   then
1646   METHOD=update   method=update
1647   else   else
1648   METHOD=delall   method=delall
1649   fi   fi
1650    
1651   #get the complete line   # get the complete line
1652   OLD_LINE="$(virtuals_read ${VIRTUAL_NAME} showline)"   oldline="$(virtuals_read ${virtualname} showline)"
1653    
1654   #make a backup   # make a backup of the db
1655   mv ${VIRTUALDB_FILE} ${VIRTUALDB_FILE}.old   mv ${VIRTUALDB_FILE} ${VIRTUALDB_FILE}.old
1656    
1657   #parse virtualdb   # parse virtualdb
1658     OLDIFS="${IFS}"
1659   IFS=$'\n'   IFS=$'\n'
1660   for line in $(< ${VIRTUALDB_FILE}.old)   for line in $(< ${VIRTUALDB_FILE}.old)
1661   do   do
1662   if [ "${line}" == "${OLD_LINE}" ]   if [[ ${line} = ${oldline} ]]
1663   then   then
1664   #delall or update?   #delall or update?
1665   case ${METHOD} in   case ${method} in
1666   update)   update)
1667   echo "<<<< Unlinking ${PKG_NAME} from ${VIRTUAL_NAME} in virtual database ..."   echo -ne "${COLBLUE} *** ${COLDEFAULT}"
1668   #del PKG_NAME from line   echo "Unlinking ${pkgname} from ${virtualname} in virtual database ..."
1669   echo "${line/ ${PKG_NAME}/}" >> ${VIRTUALDB_FILE}   # del PKG_NAME from line
1670     echo "${line/ ${pkgname}/}" >> ${VIRTUALDB_FILE}
1671   ;;   ;;
1672   delall)   delall)
1673   echo "<<<< Deleting ${VIRTUAL_NAME} in virtual database ..."   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"
1674   #continue; do not write anything   echo "Deleting ${virtualname} in virtual database ..."
1675     # continue; do not write anything
1676   continue   continue
1677   ;;   ;;
1678   esac   esac
# Line 1603  virtuals_del() { Line 1680  virtuals_del() {
1680   echo "${line}" >> ${VIRTUALDB_FILE}   echo "${line}" >> ${VIRTUALDB_FILE}
1681   fi   fi
1682   done   done
1683   unset IFS   # unset IFS
1684     IFS="${OLDIFS}"
1685   else   else
1686   echo "!!!! ${VIRTUAL_NAME} does not exists in virtual database."   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1687     echo "${virtualname} does not exists in virtual database."
1688   fi   fi
1689  }  }
1690    
# Line 1670  is_newer_mage_version_available() Line 1749  is_newer_mage_version_available()
1749   local newest_mage   local newest_mage
1750   local installed_mage   local installed_mage
1751    
1752   newest_mage="$( CATEGORIE=app-mage MAGENAME=mage get_highest_magefile;echo $(basename ${MAGEFILE} .mage) )"   newest_mage="$(basename $(get_highest_magefile app-mage mage) .mage)"
1753   installed_mage="$(magequery -n mage | cut -d' ' -f5)"   installed_mage="$(magequery -n mage | cut -d' ' -f5)"
1754    
1755   if [[ ${newest_mage} > ${installed_mage} ]]   if [[ ${newest_mage} > ${installed_mage} ]]
# Line 1963  get_value_from_magefile() Line 2042  get_value_from_magefile()
2042   local PKGTYPE   local PKGTYPE
2043   local preinstall   local preinstall
2044   local postinstall   local postinstall
2045     local preremove
2046     local postremove
2047    
2048   # sanity checks   # sanity checks
2049   [ -f ${magefile} ] && source ${magefile} || \   [ -f ${magefile} ] && source ${magefile} || \
# Line 1972  get_value_from_magefile() Line 2053  get_value_from_magefile()
2053   source ${magefile}   source ${magefile}
2054   eval value=\$$(echo ${var})   eval value=\$$(echo ${var})
2055   echo "${value}"   echo "${value}"
2056    
2057     # unset these functions
2058     unset -f preinstall
2059     unset -f postinstall
2060     unset -f preremove
2061     unset -f postremove
2062  }  }
2063    
2064  mage_install()  mage_install()
# Line 1988  mage_install() Line 2075  mage_install()
2075   local PKGTYPE   local PKGTYPE
2076   local preinstall   local preinstall
2077   local postinstall   local postinstall
2078     local preremove
2079     local postremove
2080    
2081   local pcat   local pcat
2082   local pname   local pname
# Line 2149  mage_install() Line 2238  mage_install()
2238  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2239  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "
2240   echo "successfully installed."   echo "successfully installed."
2241    
2242     # unset these functions
2243     unset -f preinstall
2244     unset -f postinstall
2245     unset -f preremove
2246     unset -f postremove
2247  }  }
2248    
2249  md5sum_packages()  md5sum_packages()
# Line 2253  uninstall_packages() Line 2348  uninstall_packages()
2348   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2349   echo "following candidate(s) will be removed:"   echo "following candidate(s) will be removed:"
2350   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2351   echo -ne "\033[1m${can_pcat}/${can_pname}:${COLDEFAULT}"   echo -ne "${COLBOLD}${can_pcat}/${can_pname}:${COLDEFAULT}"
2352   echo -e "${COLRED} ${can_ver_list} ${COLDEFAULT}"   echo -e "${COLRED} ${can_ver_list} ${COLDEFAULT}"
2353   echo   echo
2354   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   if [ ${MAGE_UNINSTALL_TIMEOUT} -gt 0 ]
2355   echo "( Press [CTRL+C] to abort )"   then
2356   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2357   echo -n "Waiting ${MAGE_UNINSTALL_TIMEOUT} seconds ..."   echo "( Press [CTRL+C] to abort )"
2358   for ((i=MAGE_UNINSTALL_TIMEOUT; i >= 0; i--))   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2359   do   echo -n "Waiting ${MAGE_UNINSTALL_TIMEOUT} seconds ..."
2360   echo -ne "${COLRED} ${i}${COLDEFAULT}"   for ((i=MAGE_UNINSTALL_TIMEOUT; i >= 0; i--))
2361   sleep 1   do
2362   done   echo -ne "${COLRED} ${i}${COLDEFAULT}"
2363   echo   sleep 1
2364   echo   done
2365     echo
2366     echo
2367     fi
2368    
2369   for pkg in ${list}   for pkg in ${list}
2370   do   do
# Line 2304  mage_uninstall() Line 2402  mage_uninstall()
2402   local PKGTYPE   local PKGTYPE
2403   local preinstall   local preinstall
2404   local postinstall   local postinstall
2405     local preremove
2406     local postremove
2407    
2408   local pcat   local pcat
2409   local pname   local pname
# Line 2341  mage_uninstall() Line 2441  mage_uninstall()
2441   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2442   echo -e "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT}"   echo -e "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT}"
2443    
2444   magefile="${MAGEDIR}/${pcat}/${pname}/${pname}-${pver}-${pbuild}.mage"   magefile="${INSTALLDB}/${pcat}/${pname}-${pver}-${pbuild}/${pname}-${pver}-${pbuild}.mage"
2445   source ${magefile}   source ${magefile}
2446    
2447   ## preremove scripts   ## preremove scripts
# Line 2401  mage_uninstall() Line 2501  mage_uninstall()
2501  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2502  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "
2503   echo "successfully removed."   echo "successfully removed."
2504    
2505     # unset these functions
2506     unset -f preinstall
2507     unset -f postinstall
2508     unset -f preremove
2509     unset -f postremove
2510  }  }
2511    
2512  show_etc_update_mesg() {  show_etc_update_mesg() {
# Line 2415  show_etc_update_mesg() { Line 2521  show_etc_update_mesg() {
2521   echo "Please run 'etc-update' to update your configuration files."   echo "Please run 'etc-update' to update your configuration files."
2522   echo   echo
2523  }  }
2524    
2525    pkgsearch()
2526    {
2527     local string="$1"
2528     local result
2529     local pkg
2530     local pcat
2531     local pname
2532     local magefile
2533     local pver
2534     local pbuild
2535     local state
2536     local descriptiom
2537     local homepage
2538     local i
2539     local all_installed
2540     local ipver
2541     local ipbuild
2542    
2543     # only names no versions
2544     result="$(find ${MAGEDIR} -mindepth 2 -maxdepth 2 -type d -name *${string}*)"
2545     #result="$(find ${MAGEDIR} -type f -name *${string}*.mage | sort)"
2546    
2547     # nothing found
2548     [[ -z ${result} ]] && die "No package found containing '${string}' in the name."
2549    
2550     for pkg in ${result}
2551     do
2552     # dirty, but does the job
2553     pcat="$(magename2pcat ${pkg}/foo)"
2554     pname="$(magename2pname ${pkg}-foo-foo)"
2555    
2556     # get highest version available
2557     magefile=$(get_highest_magefile ${pcat} ${pname})
2558    
2559     # now get all needed infos to print a nice output
2560     pver="$(magename2pver ${magefile})"
2561     pbuild="$(magename2pbuild ${magefile})"
2562     state="$(get_value_from_magefile STATE ${magefile})"
2563     description="$(get_value_from_magefile DESCRIPTION ${magefile})"
2564     homepage="$(get_value_from_magefile HOMEPAGE ${magefile})"
2565    
2566     # all installed
2567     for i in $(get_uninstall_candidates --pname ${pname} --pcat ${pcat})
2568     do
2569     ipver="$(magename2pver ${i})"
2570     ipbuild="$(magename2pbuild ${i})"
2571    
2572     if [[ -z ${all_installed} ]]
2573     then
2574     all_installed="${ipver}-${ipbuild}"
2575     else
2576     all_installed="${all_installed} ${ipver}-${ipbuild}"
2577     fi
2578     done
2579     [[ -z ${all_installed} ]] && all_installed="none"
2580    
2581     case ${state} in
2582     stable) state=${COLGREEN}"[s] ";;
2583     testing) state=${COLYELLOW}"[t] ";;
2584     unstable) state=${COLRED}"[u] ";;
2585     old) state=${COLGRAY}"[o] ";;
2586     esac
2587    
2588     echo -e "${state}${pcat}/${pname}"${COLDEFAULT}
2589     echo "      Latest available:   ${pver}-${pbuild}"
2590     echo "      Installed versions: ${all_installed}"
2591     echo "      Description: ${description}"
2592     echo "      Homepage: ${homepage}"
2593     echo
2594    
2595     unset pcat
2596     unset pname
2597     unset magefile
2598     unset pver
2599     unset pbuild
2600     unset state
2601     unset descriptiom
2602     unset homepage
2603     unset all_installed
2604     unset ipver
2605     unset ipbuild
2606     done
2607    }
2608    
2609    export_inherits()
2610    {
2611     local include="$1"
2612     shift
2613    
2614     while [ "$1" ]
2615     do
2616     local functions="$1"
2617    
2618     # sanity checks
2619     [ -z "${include}" ] && die "export_inherits(): \$include not given."
2620     [ -z "${functions}" ] && die "export_inherits(): \$functions not given."
2621    
2622     eval "${functions}() { ${include}_${functions} ; }"
2623    
2624     # debug
2625     [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}"
2626    
2627     shift
2628     done
2629    }

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