Magellan Linux

Diff of /trunk/mage/usr/lib/mage/mage4.functions.sh

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

revision 237 by niro, Sat Sep 10 13:35:55 2005 UTC revision 445 by niro, Mon Mar 19 20:00:35 2007 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.2 2005-09-10 13:35:55 niro Exp $  # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/mage4.functions.sh,v 1.28 2007-03-19 20:00:35 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 1269  get_highest_magefile() Line 1327  get_highest_magefile()
1327   fi   fi
1328   done   done
1329    
1330   # stop here if HIGHEST_MAGEFILE is zero  # do not so anything
1331   # this package must be unstable or old  # # stop here if HIGHEST_MAGEFILE is zero
1332   if [ -z "${HIGHEST_MAGEFILE}" ]  # # this package must be unstable or old
1333   then  # if [ -z "${HIGHEST_MAGEFILE}" ]
1334   echo  # then
1335   echo -n "All packages named "  # echo
1336   echo -en ${COLRED}\""${PKGNAME%-*-*-*}\""${COLDEFAULT}  # echo -n "All packages named "
1337   echo -n " are marked "  # echo -en ${COLRED}\""${PKGNAME%-*-*-*}\""${COLDEFAULT}
1338   echo -en ${COLRED}"*UNSTABLE*"${COLDEFAULT}  # echo -n " are marked "
1339   echo "."  # echo -en ${COLRED}"*UNSTABLE*"${COLDEFAULT}
1340   echo "You need to declare USE_UNSTABLE=true to install this."  # echo "."
1341   echo  # echo "You need to declare USE_UNSTABLE=true to install this."
1342   echo "Example:"  # echo
1343   echo "         USE_UNSTABLE=true mage install ${PKGNAME%-*-*-*}"  # echo "Example:"
1344   echo  # echo "         USE_UNSTABLE=true mage install ${PKGNAME%-*-*-*}"
1345   echo "Be warned that these packages are not stable and may cause serious problems."  # echo
1346   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."
1347   echo  # echo "You should know what you are doing, so don't complain about any damage."
1348   return 1  # echo
1349   fi  # return 1
1350    # fi
1351    
1352   echo "${HIGHEST_MAGEFILE}"   echo "${HIGHEST_MAGEFILE}"
1353   return 0   return 0
# Line 1400  get_uninstall_candidates() Line 1459  get_uninstall_candidates()
1459   shift   shift
1460   done   done
1461    
1462   # sanity checks; abort if not given  # it's not good to complain here about empty pnames; better to continue later anyway
1463   [ -z "${search_pname}" ] && die "get_uninstall_candidates() \$search_pname not given."  # # sanity checks; abort if not given
1464    # [ -z "${search_pname}" ] && die "get_uninstall_candidates() \$search_pname not given."
1465    
1466    
1467   # check needed global vars   # check needed global vars
1468   [ -z "${INSTALLDB}" ] && die "get_uninstall_candidates() \$INSTALLDB not set."   [ -z "${INSTALLDB}" ] && die "get_uninstall_candidates() \$INSTALLDB not set."
1469    
1470   # set pcatdir to '*' if empty   # set pcatdir to '*' if empty
1471   [ -z "${pcatdir}" ] && pcatdir=*   [ -z "${pcatdir}" ] && pcatdir='*'
1472    
1473   for pkg in ${MROOT}${INSTALLDB}/${pcatdir}/*   for pkg in ${MROOT}${INSTALLDB}/${pcatdir}/*
1474   do   do
# Line 1493  virtuals_add() Line 1553  virtuals_add()
1553   local oldline   local oldline
1554   local line i   local line i
1555   local installed_file   local installed_file
1556     local OLDIFS
1557    
1558   if virtuals_read ${virtualname}   if virtuals_read ${virtualname}
1559   then   then
1560   # make shure ${PKG_NAME} is *not* in ${VIRTUAL_NAME} already   # make sure ${PKG_NAME} is *not* in ${VIRTUAL_NAME} already
1561   for i in $(virtuals_read ${virtualname} showpkgs)   for i in $(virtuals_read ${virtualname} showpkgs)
1562   do   do
1563   if [[ ${i} = ${pkgname} ]]   if [[ ${i} = ${pkgname} ]]
# Line 1515  virtuals_add() Line 1576  virtuals_add()
1576   # make a backup   # make a backup
1577   mv ${MROOT}${VIRTUALDB_FILE} ${MROOT}${VIRTUALDB_FILE}.old   mv ${MROOT}${VIRTUALDB_FILE} ${MROOT}${VIRTUALDB_FILE}.old
1578    
1579     OLDIFS="${IFS}"
1580   IFS=$'\n'   IFS=$'\n'
1581   for line in $(< ${MROOT}${VIRTUALDB_FILE}.old)   for line in $(< ${MROOT}${VIRTUALDB_FILE}.old)
1582   do   do
# Line 1526  virtuals_add() Line 1588  virtuals_add()
1588   echo "${line}" >> ${MROOT}${VIRTUALDB_FILE}   echo "${line}" >> ${MROOT}${VIRTUALDB_FILE}
1589   fi   fi
1590   done   done
1591     # unset IFS
1592   #unset IFS   IFS="${OLDIFS}"
1593   else   else
1594   echo -ne "${COLBLUE} *** ${COLDEFAULT}"   echo -ne "${COLBLUE} >>> ${COLDEFAULT}"
1595   echo "register ${pkgname} as ${virtualname} ..."   echo "register ${pkgname} as ${virtualname} ..."
1596   echo "${virtualname} ${pkgname}" >> ${MROOT}${VIRTUALDB_FILE}   echo "${virtualname} ${pkgname}" >> ${MROOT}${VIRTUALDB_FILE}
1597   fi   fi
# Line 1541  virtuals_add() Line 1603  virtuals_add()
1603  #$1 virtualname; $2 pkgname  #$1 virtualname; $2 pkgname
1604  virtuals_del() {  virtuals_del() {
1605    
1606   local VIRTUAL_NAME PKG_NAME OLD_LINE METHOD line i x PKG_INSTALLED   local virtualname="$1"
1607     local pkgname="$2"
1608   VIRTUAL_NAME=$1   local oldline
1609   PKG_NAME=$2   local method
1610     local line i x
1611   #first check if exists   local pkg_installed
1612   if virtuals_read ${VIRTUAL_NAME}   local OLDIFS
1613    
1614     # first check if exists
1615     if virtuals_read ${virtualname}
1616   then   then
1617   #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}
1618   declare -i x=0   declare -i x=0
1619   for i in $(virtuals_read ${VIRTUAL_NAME} showpkgs)   for i in $(virtuals_read ${virtualname} showpkgs)
1620   do   do
1621   if [ "${i}" == "${PKG_NAME}" ]   if [[ ${i} = ${pkgname} ]]
1622   then   then
1623   PKG_INSTALLED=true   pkg_installed=true
1624   fi   fi
1625   ((x++))   ((x++))
1626   done   done
1627    
1628   #abort if not installed   # abort if not installed
1629   if [ "${PKG_INSTALLED}" != "true" ]   if [[ ${pkg_installed} != true ]]
1630   then   then
1631   echo "!!!! ${PKG_NAME} does not exists in ${VIRTUAL_NAME}."   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1632     echo "${pkgname} does not exists in ${virtualname}."
1633   return 0   return 0
1634   fi   fi
1635    
1636   if [ ${x} -ge 2 ]   if [ ${x} -ge 2 ]
1637   then   then
1638   METHOD=update   method=update
1639   else   else
1640   METHOD=delall   method=delall
1641   fi   fi
1642    
1643   #get the complete line   # get the complete line
1644   OLD_LINE="$(virtuals_read ${VIRTUAL_NAME} showline)"   oldline="$(virtuals_read ${virtualname} showline)"
1645    
1646   #make a backup   # make a backup of the db
1647   mv ${VIRTUALDB_FILE} ${VIRTUALDB_FILE}.old   mv ${VIRTUALDB_FILE} ${VIRTUALDB_FILE}.old
1648    
1649   #parse virtualdb   # parse virtualdb
1650     OLDIFS="${IFS}"
1651   IFS=$'\n'   IFS=$'\n'
1652   for line in $(< ${VIRTUALDB_FILE}.old)   for line in $(< ${VIRTUALDB_FILE}.old)
1653   do   do
1654   if [ "${line}" == "${OLD_LINE}" ]   if [[ ${line} = ${oldline} ]]
1655   then   then
1656   #delall or update?   #delall or update?
1657   case ${METHOD} in   case ${method} in
1658   update)   update)
1659   echo "<<<< Unlinking ${PKG_NAME} from ${VIRTUAL_NAME} in virtual database ..."   echo -ne "${COLBLUE} *** ${COLDEFAULT}"
1660   #del PKG_NAME from line   echo "Unlinking ${pkgname} from ${virtualname} in virtual database ..."
1661   echo "${line/ ${PKG_NAME}/}" >> ${VIRTUALDB_FILE}   # del PKG_NAME from line
1662     echo "${line/ ${pkgname}/}" >> ${VIRTUALDB_FILE}
1663   ;;   ;;
1664   delall)   delall)
1665   echo "<<<< Deleting ${VIRTUAL_NAME} in virtual database ..."   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"
1666   #continue; do not write anything   echo "Deleting ${virtualname} in virtual database ..."
1667     # continue; do not write anything
1668   continue   continue
1669   ;;   ;;
1670   esac   esac
# Line 1603  virtuals_del() { Line 1672  virtuals_del() {
1672   echo "${line}" >> ${VIRTUALDB_FILE}   echo "${line}" >> ${VIRTUALDB_FILE}
1673   fi   fi
1674   done   done
1675   unset IFS   # unset IFS
1676     IFS="${OLDIFS}"
1677   else   else
1678   echo "!!!! ${VIRTUAL_NAME} does not exists in virtual database."   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1679     echo "${virtualname} does not exists in virtual database."
1680   fi   fi
1681  }  }
1682    
# Line 1637  minclude() Line 1708  minclude()
1708  {  {
1709   local i   local i
1710    
1711   if [ -n "$@" ]   if [[ -n $* ]]
1712   then   then
1713   for i in $@   for i in $*
1714   do   do
1715   [[ ${MAGEDEBUG} = on ]] && \   [[ ${MAGEDEBUG} = on ]] && \
1716   echo "--- Including ${MAGEDIR}/include/${i}.minc"   echo "--- Including ${MAGEDIR}/include/${i}.minc"
# Line 1653  sminclude() Line 1724  sminclude()
1724  {  {
1725   local i   local i
1726    
1727   if [ -n "$@" ]   if [[ -n $* ]]
1728   then   then
1729   for i in $@   for i in $*
1730   do   do
1731   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"
1732   source ${SMAGESCRIPTSDIR}/include/${i}.sminc   source ${SMAGESCRIPTSDIR}/include/${i}.sminc
# Line 1670  is_newer_mage_version_available() Line 1741  is_newer_mage_version_available()
1741   local newest_mage   local newest_mage
1742   local installed_mage   local installed_mage
1743    
1744   newest_mage="$( CATEGORIE=app-mage MAGENAME=mage get_highest_magefile;echo $(basename ${MAGEFILE} .mage) )"   newest_mage="$(basename $(get_highest_magefile app-mage mage) .mage)"
1745   installed_mage="$(magequery -n mage | cut -d' ' -f5)"   installed_mage="$(magequery -n mage | cut -d' ' -f5)"
1746    
1747   if [[ ${newest_mage} > ${installed_mage} ]]   if [[ ${newest_mage} > ${installed_mage} ]]
# Line 1679  is_newer_mage_version_available() Line 1750  is_newer_mage_version_available()
1750   echo -en ${COLRED}"An update for your packetmanager is available. "${COLDEFAULT}   echo -en ${COLRED}"An update for your packetmanager is available. "${COLDEFAULT}
1751   echo -e ${COLBLUE}"[ ${newest_mage} ]"${COLDEFAULT}   echo -e ${COLBLUE}"[ ${newest_mage} ]"${COLDEFAULT}
1752   echo "It is recommened to install this newer version"   echo "It is recommened to install this newer version"
1753   echo "or your current system installation may brake."   echo "or your current system installation may break."
1754   echo   echo
1755   echo -en "Please update mage by running "   echo -en "Please update mage by running "
1756   echo -e ${COLGREEN}"'mage install mage'"${COLDEFAULT}   echo -e ${COLGREEN}"'mage install mage'"${COLDEFAULT}
# Line 1951  get_value_from_magefile() Line 2022  get_value_from_magefile()
2022   local magefile="$2"   local magefile="$2"
2023   local value   local value
2024    
2025     [[ -z ${var} ]] && return 1
2026     [[ -z ${magefile} ]] && return 1
2027    
2028   # local all possible vars of a mage file   # local all possible vars of a mage file
2029   # to prevent bad issues   # to prevent bad issues
2030   local PKGNAME   local PKGNAME
# Line 1963  get_value_from_magefile() Line 2037  get_value_from_magefile()
2037   local PKGTYPE   local PKGTYPE
2038   local preinstall   local preinstall
2039   local postinstall   local postinstall
2040     local preremove
2041     local postremove
2042    
2043   # sanity checks   # sanity checks
2044   [ -f ${magefile} ] && source ${magefile} || \   [ -f ${magefile} ] && source ${magefile} || \
# Line 1972  get_value_from_magefile() Line 2048  get_value_from_magefile()
2048   source ${magefile}   source ${magefile}
2049   eval value=\$$(echo ${var})   eval value=\$$(echo ${var})
2050   echo "${value}"   echo "${value}"
2051    
2052     # unset these functions
2053     unset -f preinstall
2054     unset -f postinstall
2055     unset -f preremove
2056     unset -f postremove
2057  }  }
2058    
2059  mage_install()  mage_install()
# Line 1988  mage_install() Line 2070  mage_install()
2070   local PKGTYPE   local PKGTYPE
2071   local preinstall   local preinstall
2072   local postinstall   local postinstall
2073     local preremove
2074     local postremove
2075    
2076   local pcat   local pcat
2077   local pname   local pname
# Line 2073  mage_install() Line 2157  mage_install()
2157   smage2file=${SMAGESCRIPTSDIR}/${pname}/${pname}-${pver}-${pbuild}.smage2   smage2file=${SMAGESCRIPTSDIR}/${pname}/${pname}-${pver}-${pbuild}.smage2
2158   if [ -f "${smage2file}" ]   if [ -f "${smage2file}" ]
2159   then   then
2160     echo -e " ${COLBLUE}***${COLDEFAULT} building package from source ... "
2161   smage2 ${smage2file} || die "compile failed"   smage2 ${smage2file} || die "compile failed"
2162   else   else
2163   echo   echo
# Line 2086  mage_install() Line 2171  mage_install()
2171   if [[ ${PKGTYPE} != virtual ]] && \   if [[ ${PKGTYPE} != virtual ]] && \
2172   [[ ${PKGTYPE} != sources ]]   [[ ${PKGTYPE} != sources ]]
2173   then   then
2174   # 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  
2175   build_doinstall ${PKGNAME}   build_doinstall ${PKGNAME}
2176   fi   fi
2177    
# Line 2149  mage_install() Line 2227  mage_install()
2227  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2228  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "
2229   echo "successfully installed."   echo "successfully installed."
2230    
2231     # unset these functions
2232     unset -f preinstall
2233     unset -f postinstall
2234     unset -f preremove
2235     unset -f postremove
2236  }  }
2237    
2238  md5sum_packages()  md5sum_packages()
# Line 2253  uninstall_packages() Line 2337  uninstall_packages()
2337   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2338   echo "following candidate(s) will be removed:"   echo "following candidate(s) will be removed:"
2339   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2340   echo -ne "\033[1m${can_pcat}/${can_pname}:${COLDEFAULT}"   echo -ne "${COLBOLD}${can_pcat}/${can_pname}:${COLDEFAULT}"
2341   echo -e "${COLRED} ${can_ver_list} ${COLDEFAULT}"   echo -e "${COLRED} ${can_ver_list} ${COLDEFAULT}"
2342   echo   echo
2343   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   if [ ${MAGE_UNINSTALL_TIMEOUT} -gt 0 ]
2344   echo "( Press [CTRL+C] to abort )"   then
2345   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2346   echo -n "Waiting ${MAGE_UNINSTALL_TIMEOUT} seconds ..."   echo "( Press [CTRL+C] to abort )"
2347   for ((i=MAGE_UNINSTALL_TIMEOUT; i >= 0; i--))   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2348   do   echo -n "Waiting ${MAGE_UNINSTALL_TIMEOUT} seconds ..."
2349   echo -ne "${COLRED} ${i}${COLDEFAULT}"   for ((i=MAGE_UNINSTALL_TIMEOUT; i >= 0; i--))
2350   sleep 1   do
2351   done   echo -ne "${COLRED} ${i}${COLDEFAULT}"
2352   echo   sleep 1
2353   echo   done
2354     echo
2355     echo
2356     fi
2357    
2358   for pkg in ${list}   for pkg in ${list}
2359   do   do
# Line 2304  mage_uninstall() Line 2391  mage_uninstall()
2391   local PKGTYPE   local PKGTYPE
2392   local preinstall   local preinstall
2393   local postinstall   local postinstall
2394     local preremove
2395     local postremove
2396    
2397   local pcat   local pcat
2398   local pname   local pname
# Line 2339  mage_uninstall() Line 2428  mage_uninstall()
2428   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"
2429   echo -n "removing: "   echo -n "removing: "
2430   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2431   echo -e "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT}"   echo -e "${COLRED}${pname}-${pver}-${pbuild}${COLDEFAULT}"
2432    
2433   magefile="${MAGEDIR}/${pcat}/${pname}/${pname}-${pver}-${pbuild}.mage"   magefile="${INSTALLDB}/${pcat}/${pname}-${pver}-${pbuild}/${pname}-${pver}-${pbuild}.mage"
2434   source ${magefile}   source ${magefile}
2435    
2436   ## preremove scripts   ## preremove scripts
# Line 2401  mage_uninstall() Line 2490  mage_uninstall()
2490  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2491  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "
2492   echo "successfully removed."   echo "successfully removed."
2493    
2494     # unset these functions
2495     unset -f preinstall
2496     unset -f postinstall
2497     unset -f preremove
2498     unset -f postremove
2499  }  }
2500    
2501  show_etc_update_mesg() {  show_etc_update_mesg() {
# Line 2433  pkgsearch() Line 2528  pkgsearch()
2528   local all_installed   local all_installed
2529   local ipver   local ipver
2530   local ipbuild   local ipbuild
2531     local latest_available
2532    
2533   # only names no versions   # only names no versions
2534   result="$(find ${MAGEDIR} -mindepth 2 -maxdepth 2 -type d -name *${string}*)"   result="$(find ${MAGEDIR} -mindepth 2 -maxdepth 2 -type d -name '*'${string}'*'| sed '/profiles/d' | sed '/includes/d')"
2535   #result="$(find ${MAGEDIR} -type f -name *${string}*.mage | sort)"   #result="$(find ${MAGEDIR} -type f -name '*'${string}'*'.mage | sort)"
2536    
2537   # nothing found   # nothing found
2538   [[ -z ${result} ]] && die "No package found containing '${string}' in the name."   [[ -z ${result} ]] && die "No package found containing '${string}' in the name."
# Line 2450  pkgsearch() Line 2546  pkgsearch()
2546   # get highest version available   # get highest version available
2547   magefile=$(get_highest_magefile ${pcat} ${pname})   magefile=$(get_highest_magefile ${pcat} ${pname})
2548    
2549   # now get all needed infos to print a nice output   if [[ ! -z ${magefile} ]]
2550   pver="$(magename2pver ${magefile})"   then
2551   pbuild="$(magename2pbuild ${magefile})"   # now get all needed infos to print a nice output
2552   state="$(get_value_from_magefile STATE ${magefile})"   pver="$(magename2pver ${magefile})"
2553   description="$(get_value_from_magefile DESCRIPTION ${magefile})"   pbuild="$(magename2pbuild ${magefile})"
2554   homepage="$(get_value_from_magefile HOMEPAGE ${magefile})"   state="$(get_value_from_magefile STATE ${magefile})"
2555     description="$(get_value_from_magefile DESCRIPTION ${magefile})"
2556   # all installed   homepage="$(get_value_from_magefile HOMEPAGE ${magefile})"
2557   for i in $(get_uninstall_candidates --pname ${pname} --pcat ${pcat})  
2558   do   # all installed
2559   ipver="$(magename2pver ${i})"   for i in $(get_uninstall_candidates --pname ${pname} --pcat ${pcat})
2560   ipbuild="$(magename2pbuild ${i})"   do
2561     ipver="$(magename2pver ${i})"
2562   if [[ -z ${all_installed} ]]   ipbuild="$(magename2pbuild ${i})"
2563   then  
2564   all_installed="${ipver}-${ipbuild}"   if [[ -z ${all_installed} ]]
2565   else   then
2566   all_installed="${all_installed} ${ipver}-${ipbuild}"   all_installed="${ipver}-${ipbuild}"
2567   fi   else
2568   done   all_installed="${all_installed} ${ipver}-${ipbuild}"
2569   [[ -z ${all_installed} ]] && all_installed="none"   fi
2570     done
2571     [[ -z ${all_installed} ]] && all_installed="none"
2572    
2573     case ${state} in
2574     stable) state=${COLGREEN}"[s] ";;
2575     testing) state=${COLYELLOW}"[t] ";;
2576     unstable) state=${COLRED}"[u] ";;
2577     old) state=${COLGRAY}"[o] ";;
2578     esac
2579    
2580   case ${state} in   latest_available="${pver}-${pbuild}"
2581   stable) state=${COLGREEN}"[s] ";;   else
2582   testing) state=${COLYELLOW}"[t] ";;   # package is masked
2583   unstable) state=${COLRED}"[u] ";;   state="${COLRED}[m] "
2584   old) state=${COLGRAY}"[o] ";;   latest_available="${COLRED}masked for this distribution.${COLDEFAULT}"
2585   esac   fi
2586    
2587   echo -e "${state}${pcat}/${pname}"${COLDEFAULT}   echo -e "${state}${pcat}/${pname}"${COLDEFAULT}
2588   echo "      Latest available:   ${pver}-${pbuild}"   echo -e "      Latest available:   ${latest_available}"
2589   echo "      Installed versions: ${all_installed}"   echo "      Installed versions: ${all_installed}"
2590   echo "      Description: ${description}"   echo "      Description: ${description}"
2591   echo "      Homepage: ${homepage}"   echo "      Homepage: ${homepage}"
# Line 2499  pkgsearch() Line 2604  pkgsearch()
2604   unset ipbuild   unset ipbuild
2605   done   done
2606  }  }
2607    
2608    export_inherits()
2609    {
2610     local include="$1"
2611     shift
2612    
2613     while [ "$1" ]
2614     do
2615     local functions="$1"
2616    
2617     # sanity checks
2618     [ -z "${include}" ] && die "export_inherits(): \$include not given."
2619     [ -z "${functions}" ] && die "export_inherits(): \$functions not given."
2620    
2621     eval "${functions}() { ${include}_${functions} ; }"
2622    
2623     # debug
2624     [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}"
2625    
2626     shift
2627     done
2628    }
2629    
2630    mlibdir()
2631    {
2632     local libdir=lib
2633     [[ ${ARCH} = x86_64 ]] && libdir=lib64
2634    
2635     echo "${libdir}"
2636    }
2637    
2638    ## blacklisted ${magefile}
2639    blacklisted()
2640    {
2641     [[ -z ${MAGE_DISTRIBUTION} ]] && local MAGE_DISTRIBUTION=stable
2642    
2643     # compat
2644     [[ ${USE_UNSTABLE} = true ]] && local MAGE_DISTRIBUTION=unstable
2645     [[ ${USE_TESTING} = true ]] && local MAGE_DISTRIBUTION=testing
2646    
2647     local EXCLUDED="${MROOT}/etc/mage-profile/package.blacklist-${ARCH}-${MAGE_DISTRIBUTION}"
2648    
2649     # return 0 if the list not exist; nothin is masked
2650     [[ ! -f ${EXCLUDED} ]] && return 0
2651    
2652     local MAGEFILE="$1"
2653    
2654     local PCAT="$(magename2pcat ${MAGEFILE})"
2655     local PNAME="$(magename2pname ${MAGEFILE})"
2656     local PVER="$(magename2pver ${MAGEFILE})"
2657     local PBUILD="$(magename2pbuild ${MAGEFILE})"
2658    
2659     local EXPCAT EXPNAME EXPVER EXPBUILD
2660     while read EXPCAT EXPNAME EXPVER EXPBUILD
2661     do
2662     # ignore spaces and comments
2663             case "${EXPCAT}" in
2664                     \#*|"") continue ;;
2665             esac
2666    
2667     # exclude full pver
2668     if [[ -n ${PCAT} ]] && [[ -n ${PNAME} ]] &&
2669     [[ -n ${EXPCAT} ]] && [[ -n ${EXPNAME} ]] &&
2670     [[ -n ${PVER} ]] && [[ -n ${PBUILD} ]] &&
2671     [[ -n ${EXPVER} ]] && [[ -n ${EXPBUILD} ]]
2672     then
2673     [[ ${EXPCAT}/${EXPNAME}-${EXPVER}-${EXPBUILD} = ${PCAT}/${PNAME}-${PVER}-${PBUILD} ]] && return 1
2674     fi
2675    
2676     # exclude pcat/pname only
2677     if [[ -n ${PCAT} ]] && [[ -n ${PNAME} ]] &&
2678     [[ -n ${EXPCAT} ]] && [[ -n ${EXPNAME} ]] &&
2679     [[ -z ${EXPVER} ]] && [[ -z ${EXPBUILD} ]]
2680     then
2681     [[ ${EXPCAT}/${EXPNAME} = ${PCAT}/${PNAME} ]] && return 1
2682     fi
2683     done << EOF
2684    $( cat ${EXCLUDED}; echo)
2685    EOF
2686    
2687     return 0
2688    }
2689    

Legend:
Removed from v.237  
changed lines
  Added in v.445