Magellan Linux

Diff of /trunk/mage/usr/lib/mage/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 675 by niro, Sun Feb 10 12:26:09 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.35 2008-02-10 12:26:09 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 1316  is_config_protected() Line 1375  is_config_protected()
1375   EXPFILE="${MROOT}$1"   EXPFILE="${MROOT}$1"
1376    
1377   # file does not exist; it can be written   # file does not exist; it can be written
1378   [ ! -e ${EXPFILE} ] && return 0   [[ ! -e ${EXPFILE} ]] && return 0
1379    
1380   # to be safe; it may be '§'   # to be safe; it may be '§'
1381   IFS=' '   IFS=' '
# Line 1326  is_config_protected() Line 1385  is_config_protected()
1385   do   do
1386   # ersetzen von $i nur wenn am anfang der variable   # ersetzen von $i nur wenn am anfang der variable
1387   TEST="${EXPFILE/#${MROOT}${i}/Protected}"   TEST="${EXPFILE/#${MROOT}${i}/Protected}"
1388   if [ "${TEST}" != "${EXPFILE}" ]   if [[ ${TEST} != ${EXPFILE} ]]
1389   then   then
1390   # setzen das es protected ist   # setzen das es protected ist
1391   PROTECTED=TRUE   PROTECTED=TRUE
# Line 1335  is_config_protected() Line 1394  is_config_protected()
1394   for x in ${CONFIG_PROTECT_MASK}   for x in ${CONFIG_PROTECT_MASK}
1395   do   do
1396   TEST="${EXPFILE/#${MROOT}${x}/Protect_Masked}"   TEST="${EXPFILE/#${MROOT}${x}/Protect_Masked}"
1397   if [ "${TEST}" != "${EXPFILE}" ]   if [[ ${TEST} != ${EXPFILE} ]]
1398   then   then
1399   PROTECTED=MASKED   PROTECTED=MASKED
1400   fi   fi
# Line 1371  is_config_protected() Line 1430  is_config_protected()
1430  ###################################################  ###################################################
1431  count_protected_files()  count_protected_files()
1432  {  {
1433   ${MLIBDIR}/writeprotected "$1"   local file="$1"
1434     local dirname="${file%/*}"
1435     local filename="${file##*/}"
1436     local count
1437     local output
1438     local i
1439    
1440     declare -i count=0
1441    
1442     # check if there are already protected files
1443     for oldpretected in $(find ${dirname} -iname "._cfg????_${filename}" |
1444     sed -e "s:\(^.*/\)\(._cfg*_\)\(/.*$\):\1\2\3\%\2\%\3:" |
1445     sort -t'%' -k3 -k2 | cut -f1 -d'%')
1446     do
1447     count=$(echo ${oldpretected} | cut -d_ -f2 | sed -e "s:cfg::")
1448     done
1449     (( count ++ ))
1450    
1451     # fill output up with zeros
1452     for (( i=${#count}; i < 4; i++ )); do output="${output}0"; done
1453     output="${output}${count}"
1454    
1455     echo "${output}"
1456  }  }
1457    
1458  # call with  # call with
# Line 1388  get_uninstall_candidates() Line 1469  get_uninstall_candidates()
1469   local list   local list
1470   local pcatdir   local pcatdir
1471   local protected   local protected
1472     local i
1473    
1474   # very basic getops   # very basic getops
1475   for i in $*   for i in $*
# Line 1400  get_uninstall_candidates() Line 1482  get_uninstall_candidates()
1482   shift   shift
1483   done   done
1484    
1485   # sanity checks; abort if not given  # it's not good to complain here about empty pnames; better to continue later anyway
1486   [ -z "${search_pname}" ] && die "get_uninstall_candidates() \$search_pname not given."  # # sanity checks; abort if not given
1487    # [ -z "${search_pname}" ] && die "get_uninstall_candidates() \$search_pname not given."
1488    
1489    
1490   # check needed global vars   # check needed global vars
1491   [ -z "${INSTALLDB}" ] && die "get_uninstall_candidates() \$INSTALLDB not set."   [ -z "${INSTALLDB}" ] && die "get_uninstall_candidates() \$INSTALLDB not set."
1492    
1493   # set pcatdir to '*' if empty   # set pcatdir to '*' if empty
1494   [ -z "${pcatdir}" ] && pcatdir=*   [ -z "${pcatdir}" ] && pcatdir='*'
1495    
1496   for pkg in ${MROOT}${INSTALLDB}/${pcatdir}/*   for pkg in ${MROOT}${INSTALLDB}/${pcatdir}/*
1497   do   do
# Line 1493  virtuals_add() Line 1576  virtuals_add()
1576   local oldline   local oldline
1577   local line i   local line i
1578   local installed_file   local installed_file
1579     local OLDIFS
1580    
1581   if virtuals_read ${virtualname}   if virtuals_read ${virtualname}
1582   then   then
1583   # make shure ${PKG_NAME} is *not* in ${VIRTUAL_NAME} already   # make sure ${PKG_NAME} is *not* in ${VIRTUAL_NAME} already
1584   for i in $(virtuals_read ${virtualname} showpkgs)   for i in $(virtuals_read ${virtualname} showpkgs)
1585   do   do
1586   if [[ ${i} = ${pkgname} ]]   if [[ ${i} = ${pkgname} ]]
# Line 1515  virtuals_add() Line 1599  virtuals_add()
1599   # make a backup   # make a backup
1600   mv ${MROOT}${VIRTUALDB_FILE} ${MROOT}${VIRTUALDB_FILE}.old   mv ${MROOT}${VIRTUALDB_FILE} ${MROOT}${VIRTUALDB_FILE}.old
1601    
1602     OLDIFS="${IFS}"
1603   IFS=$'\n'   IFS=$'\n'
1604   for line in $(< ${MROOT}${VIRTUALDB_FILE}.old)   for line in $(< ${MROOT}${VIRTUALDB_FILE}.old)
1605   do   do
# Line 1526  virtuals_add() Line 1611  virtuals_add()
1611   echo "${line}" >> ${MROOT}${VIRTUALDB_FILE}   echo "${line}" >> ${MROOT}${VIRTUALDB_FILE}
1612   fi   fi
1613   done   done
1614     # unset IFS
1615   #unset IFS   IFS="${OLDIFS}"
1616   else   else
1617   echo -ne "${COLBLUE} *** ${COLDEFAULT}"   echo -ne "${COLBLUE} >>> ${COLDEFAULT}"
1618   echo "register ${pkgname} as ${virtualname} ..."   echo "register ${pkgname} as ${virtualname} ..."
1619   echo "${virtualname} ${pkgname}" >> ${MROOT}${VIRTUALDB_FILE}   echo "${virtualname} ${pkgname}" >> ${MROOT}${VIRTUALDB_FILE}
1620   fi   fi
# Line 1541  virtuals_add() Line 1626  virtuals_add()
1626  #$1 virtualname; $2 pkgname  #$1 virtualname; $2 pkgname
1627  virtuals_del() {  virtuals_del() {
1628    
1629   local VIRTUAL_NAME PKG_NAME OLD_LINE METHOD line i x PKG_INSTALLED   local virtualname="$1"
1630     local pkgname="$2"
1631   VIRTUAL_NAME=$1   local oldline
1632   PKG_NAME=$2   local method
1633     local line i x
1634   #first check if exists   local pkg_installed
1635   if virtuals_read ${VIRTUAL_NAME}   local OLDIFS
1636    
1637     # first check if exists
1638     if virtuals_read ${virtualname}
1639   then   then
1640   #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}
1641   declare -i x=0   declare -i x=0
1642   for i in $(virtuals_read ${VIRTUAL_NAME} showpkgs)   for i in $(virtuals_read ${virtualname} showpkgs)
1643   do   do
1644   if [ "${i}" == "${PKG_NAME}" ]   if [[ ${i} = ${pkgname} ]]
1645   then   then
1646   PKG_INSTALLED=true   pkg_installed=true
1647   fi   fi
1648   ((x++))   ((x++))
1649   done   done
1650    
1651   #abort if not installed   # abort if not installed
1652   if [ "${PKG_INSTALLED}" != "true" ]   if [[ ${pkg_installed} != true ]]
1653   then   then
1654   echo "!!!! ${PKG_NAME} does not exists in ${VIRTUAL_NAME}."   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1655     echo "${pkgname} does not exists in ${virtualname}."
1656   return 0   return 0
1657   fi   fi
1658    
1659   if [ ${x} -ge 2 ]   if [ ${x} -ge 2 ]
1660   then   then
1661   METHOD=update   method=update
1662   else   else
1663   METHOD=delall   method=delall
1664   fi   fi
1665    
1666   #get the complete line   # get the complete line
1667   OLD_LINE="$(virtuals_read ${VIRTUAL_NAME} showline)"   oldline="$(virtuals_read ${virtualname} showline)"
1668    
1669   #make a backup   # make a backup of the db
1670   mv ${VIRTUALDB_FILE} ${VIRTUALDB_FILE}.old   mv ${VIRTUALDB_FILE} ${VIRTUALDB_FILE}.old
1671    
1672   #parse virtualdb   # parse virtualdb
1673     OLDIFS="${IFS}"
1674   IFS=$'\n'   IFS=$'\n'
1675   for line in $(< ${VIRTUALDB_FILE}.old)   for line in $(< ${VIRTUALDB_FILE}.old)
1676   do   do
1677   if [ "${line}" == "${OLD_LINE}" ]   if [[ ${line} = ${oldline} ]]
1678   then   then
1679   #delall or update?   #delall or update?
1680   case ${METHOD} in   case ${method} in
1681   update)   update)
1682   echo "<<<< Unlinking ${PKG_NAME} from ${VIRTUAL_NAME} in virtual database ..."   echo -ne "${COLBLUE} *** ${COLDEFAULT}"
1683   #del PKG_NAME from line   echo "Unlinking ${pkgname} from ${virtualname} in virtual database ..."
1684   echo "${line/ ${PKG_NAME}/}" >> ${VIRTUALDB_FILE}   # del PKG_NAME from line
1685     echo "${line/ ${pkgname}/}" >> ${VIRTUALDB_FILE}
1686   ;;   ;;
1687   delall)   delall)
1688   echo "<<<< Deleting ${VIRTUAL_NAME} in virtual database ..."   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"
1689   #continue; do not write anything   echo "Deleting ${virtualname} in virtual database ..."
1690     # continue; do not write anything
1691   continue   continue
1692   ;;   ;;
1693   esac   esac
# Line 1603  virtuals_del() { Line 1695  virtuals_del() {
1695   echo "${line}" >> ${VIRTUALDB_FILE}   echo "${line}" >> ${VIRTUALDB_FILE}
1696   fi   fi
1697   done   done
1698   unset IFS   # unset IFS
1699     IFS="${OLDIFS}"
1700   else   else
1701   echo "!!!! ${VIRTUAL_NAME} does not exists in virtual database."   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1702     echo "${virtualname} does not exists in virtual database."
1703   fi   fi
1704  }  }
1705    
# Line 1637  minclude() Line 1731  minclude()
1731  {  {
1732   local i   local i
1733    
1734   if [ -n "$@" ]   if [[ -n $* ]]
1735   then   then
1736   for i in $@   for i in $*
1737   do   do
1738   [[ ${MAGEDEBUG} = on ]] && \   [[ ${MAGEDEBUG} = on ]] && \
1739   echo "--- Including ${MAGEDIR}/include/${i}.minc"   echo "--- Including ${MAGEDIR}/include/${i}.minc"
# Line 1653  sminclude() Line 1747  sminclude()
1747  {  {
1748   local i   local i
1749    
1750   if [ -n "$@" ]   if [[ -n $* ]]
1751   then   then
1752   for i in $@   for i in $*
1753   do   do
1754   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"
1755   source ${SMAGESCRIPTSDIR}/include/${i}.sminc   source ${SMAGESCRIPTSDIR}/include/${i}.sminc
# Line 1670  is_newer_mage_version_available() Line 1764  is_newer_mage_version_available()
1764   local newest_mage   local newest_mage
1765   local installed_mage   local installed_mage
1766    
1767   newest_mage="$( CATEGORIE=app-mage MAGENAME=mage get_highest_magefile;echo $(basename ${MAGEFILE} .mage) )"   newest_mage="$(basename $(get_highest_magefile app-mage mage) .mage)"
1768   installed_mage="$(magequery -n mage | cut -d' ' -f5)"   installed_mage="$(magequery -n mage | cut -d' ' -f5)"
1769    
1770   if [[ ${newest_mage} > ${installed_mage} ]]   if [[ ${newest_mage} > ${installed_mage} ]]
# Line 1679  is_newer_mage_version_available() Line 1773  is_newer_mage_version_available()
1773   echo -en ${COLRED}"An update for your packetmanager is available. "${COLDEFAULT}   echo -en ${COLRED}"An update for your packetmanager is available. "${COLDEFAULT}
1774   echo -e ${COLBLUE}"[ ${newest_mage} ]"${COLDEFAULT}   echo -e ${COLBLUE}"[ ${newest_mage} ]"${COLDEFAULT}
1775   echo "It is recommened to install this newer version"   echo "It is recommened to install this newer version"
1776   echo "or your current system installation may brake."   echo "or your current system installation may break."
1777   echo   echo
1778   echo -en "Please update mage by running "   echo -en "Please update mage by running "
1779   echo -e ${COLGREEN}"'mage install mage'"${COLDEFAULT}   echo -e ${COLGREEN}"'mage install mage'"${COLDEFAULT}
# Line 1951  get_value_from_magefile() Line 2045  get_value_from_magefile()
2045   local magefile="$2"   local magefile="$2"
2046   local value   local value
2047    
2048     [[ -z ${var} ]] && return 1
2049     [[ -z ${magefile} ]] && return 1
2050    
2051   # local all possible vars of a mage file   # local all possible vars of a mage file
2052   # to prevent bad issues   # to prevent bad issues
2053   local PKGNAME   local PKGNAME
# Line 1963  get_value_from_magefile() Line 2060  get_value_from_magefile()
2060   local PKGTYPE   local PKGTYPE
2061   local preinstall   local preinstall
2062   local postinstall   local postinstall
2063     local preremove
2064     local postremove
2065    
2066   # sanity checks   # sanity checks
2067   [ -f ${magefile} ] && source ${magefile} || \   [ -f ${magefile} ] && source ${magefile} || \
# Line 1972  get_value_from_magefile() Line 2071  get_value_from_magefile()
2071   source ${magefile}   source ${magefile}
2072   eval value=\$$(echo ${var})   eval value=\$$(echo ${var})
2073   echo "${value}"   echo "${value}"
2074    
2075     # unset these functions
2076     unset -f preinstall
2077     unset -f postinstall
2078     unset -f preremove
2079     unset -f postremove
2080  }  }
2081    
2082  mage_install()  mage_install()
# Line 1988  mage_install() Line 2093  mage_install()
2093   local PKGTYPE   local PKGTYPE
2094   local preinstall   local preinstall
2095   local postinstall   local postinstall
2096     local preremove
2097     local postremove
2098    
2099   local pcat   local pcat
2100   local pname   local pname
# Line 2070  mage_install() Line 2177  mage_install()
2177   echo B:${pbuild}   echo B:${pbuild}
2178   fi   fi
2179    
2180   smage2file=${SMAGESCRIPTSDIR}/${pname}/${pname}-${pver}-${pbuild}.smage2   if [[ -z ${MAGE_TARGETS} ]]
2181     then
2182     smage2file=${SMAGESCRIPTSDIR}/${pname}/${pname}-${pver}-${pbuild}.smage2
2183     else
2184     smage2file=${SMAGESCRIPTSDIR}/${pname/${MAGE_TARGETS}/}/${pname/${MAGE_TARGETS}/}-${pver}-${pbuild}.smage2
2185     fi
2186   if [ -f "${smage2file}" ]   if [ -f "${smage2file}" ]
2187   then   then
2188     echo -e " ${COLBLUE}***${COLDEFAULT} building package from source ... "
2189   smage2 ${smage2file} || die "compile failed"   smage2 ${smage2file} || die "compile failed"
2190   else   else
2191   echo   echo
# Line 2086  mage_install() Line 2199  mage_install()
2199   if [[ ${PKGTYPE} != virtual ]] && \   if [[ ${PKGTYPE} != virtual ]] && \
2200   [[ ${PKGTYPE} != sources ]]   [[ ${PKGTYPE} != sources ]]
2201   then   then
2202   # 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  
2203   build_doinstall ${PKGNAME}   build_doinstall ${PKGNAME}
2204   fi   fi
2205    
# Line 2149  mage_install() Line 2255  mage_install()
2255  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2256  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "
2257   echo "successfully installed."   echo "successfully installed."
2258    
2259     # unset these functions
2260     unset -f preinstall
2261     unset -f postinstall
2262     unset -f preremove
2263     unset -f postremove
2264  }  }
2265    
2266  md5sum_packages()  md5sum_packages()
# Line 2253  uninstall_packages() Line 2365  uninstall_packages()
2365   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2366   echo "following candidate(s) will be removed:"   echo "following candidate(s) will be removed:"
2367   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2368   echo -ne "\033[1m${can_pcat}/${can_pname}:${COLDEFAULT}"   echo -ne "${COLBOLD}${can_pcat}/${can_pname}:${COLDEFAULT}"
2369   echo -e "${COLRED} ${can_ver_list} ${COLDEFAULT}"   echo -e "${COLRED} ${can_ver_list} ${COLDEFAULT}"
2370   echo   echo
2371   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   if [ ${MAGE_UNINSTALL_TIMEOUT} -gt 0 ]
2372   echo "( Press [CTRL+C] to abort )"   then
2373   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2374   echo -n "Waiting ${MAGE_UNINSTALL_TIMEOUT} seconds ..."   echo "( Press [CTRL+C] to abort )"
2375   for ((i=MAGE_UNINSTALL_TIMEOUT; i >= 0; i--))   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2376   do   echo -n "Waiting ${MAGE_UNINSTALL_TIMEOUT} seconds ..."
2377   echo -ne "${COLRED} ${i}${COLDEFAULT}"   for ((i=MAGE_UNINSTALL_TIMEOUT; i >= 0; i--))
2378   sleep 1   do
2379   done   echo -ne "${COLRED} ${i}${COLDEFAULT}"
2380   echo   sleep 1
2381   echo   done
2382     echo
2383     echo
2384     fi
2385    
2386   for pkg in ${list}   for pkg in ${list}
2387   do   do
# Line 2304  mage_uninstall() Line 2419  mage_uninstall()
2419   local PKGTYPE   local PKGTYPE
2420   local preinstall   local preinstall
2421   local postinstall   local postinstall
2422     local preremove
2423     local postremove
2424    
2425   local pcat   local pcat
2426   local pname   local pname
# Line 2339  mage_uninstall() Line 2456  mage_uninstall()
2456   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"
2457   echo -n "removing: "   echo -n "removing: "
2458   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2459   echo -e "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT}"   echo -e "${COLRED}${pname}-${pver}-${pbuild}${COLDEFAULT}"
2460    
2461   magefile="${MAGEDIR}/${pcat}/${pname}/${pname}-${pver}-${pbuild}.mage"   magefile="${MROOT}${INSTALLDB}/${pcat}/${pname}-${pver}-${pbuild}/${pname}-${pver}-${pbuild}.mage"
2462   source ${magefile}   source ${magefile}
2463    
2464   ## preremove scripts   ## preremove scripts
# Line 2401  mage_uninstall() Line 2518  mage_uninstall()
2518  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2519  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "
2520   echo "successfully removed."   echo "successfully removed."
2521    
2522     # unset these functions
2523     unset -f preinstall
2524     unset -f postinstall
2525     unset -f preremove
2526     unset -f postremove
2527  }  }
2528    
2529  show_etc_update_mesg() {  show_etc_update_mesg() {
# Line 2415  show_etc_update_mesg() { Line 2538  show_etc_update_mesg() {
2538   echo "Please run 'etc-update' to update your configuration files."   echo "Please run 'etc-update' to update your configuration files."
2539   echo   echo
2540  }  }
2541    
2542    pkgsearch()
2543    {
2544     local string="$1"
2545     local result
2546     local pkg
2547     local pcat
2548     local pname
2549     local magefile
2550     local pver
2551     local pbuild
2552     local state
2553     local descriptiom
2554     local homepage
2555     local i
2556     local all_installed
2557     local ipver
2558     local ipbuild
2559     local latest_available
2560     local depsfull
2561     local sdepsfull
2562     local deps
2563     local sdeps
2564     local dep
2565     local sign
2566    
2567     # only names no versions
2568     result="$(find ${MAGEDIR} -mindepth 2 -maxdepth 2 -type d -name '*'${string}'*'| sed '/profiles/d' | sed '/includes/d')"
2569     #result="$(find ${MAGEDIR} -type f -name '*'${string}'*'.mage | sort)"
2570    
2571     # nothing found
2572     [[ -z ${result} ]] && die "No package found containing '${string}' in the name."
2573    
2574     for pkg in ${result}
2575     do
2576     # dirty, but does the job
2577     pcat="$(magename2pcat ${pkg}/foo)"
2578     pname="$(magename2pname ${pkg}-foo-foo)"
2579    
2580     # get highest version available
2581     magefile=$(get_highest_magefile ${pcat} ${pname})
2582    
2583     if [[ ! -z ${magefile} ]]
2584     then
2585     # now get all needed infos to print a nice output
2586     pver="$(magename2pver ${magefile})"
2587     pbuild="$(magename2pbuild ${magefile})"
2588     state="$(get_value_from_magefile STATE ${magefile})"
2589     description="$(get_value_from_magefile DESCRIPTION ${magefile})"
2590     homepage="$(get_value_from_magefile HOMEPAGE ${magefile})"
2591    
2592     # all installed
2593     for i in $(get_uninstall_candidates --pname ${pname} --pcat ${pcat})
2594     do
2595     ipver="$(magename2pver ${i})"
2596     ipbuild="$(magename2pbuild ${i})"
2597    
2598     if [[ -z ${all_installed} ]]
2599     then
2600     all_installed="${ipver}-${ipbuild}"
2601     else
2602     all_installed="${all_installed} ${ipver}-${ipbuild}"
2603     fi
2604     done
2605     [[ -z ${all_installed} ]] && all_installed="none"
2606    
2607     case ${state} in
2608     stable) state=${COLGREEN}"[s] ";;
2609     testing) state=${COLYELLOW}"[t] ";;
2610     unstable) state=${COLRED}"[u] ";;
2611     old) state=${COLGRAY}"[o] ";;
2612     esac
2613    
2614     latest_available="${pver}-${pbuild}"
2615     else
2616     # package is masked
2617     state="${COLRED}[m] "
2618     latest_available="${COLRED}masked for this distribution.${COLDEFAULT}"
2619     fi
2620    
2621     depsfull="$(get_value_from_magefile DEPEND ${magefile})"
2622     sdepsfull="$(get_value_from_magefile SDEPEND ${magefile})"
2623    
2624     while read sign dep
2625     do
2626     case ${dep} in
2627     "") continue;;
2628     esac
2629    
2630     deps="${deps} $(basename ${dep%-*})"
2631     done << EOF
2632    ${depsfull}
2633    EOF
2634    
2635     while read sign dep
2636     do
2637     case ${dep} in
2638     "") continue;;
2639     esac
2640    
2641     sdeps="${sdeps} $(basename ${dep%-*})"
2642     done << EOF
2643    ${sdepsfull}
2644    EOF
2645    
2646     echo -e "${state}${pcat}/${pname}"${COLDEFAULT}
2647     echo -e "      Latest available:   ${latest_available}"
2648     echo "      Installed versions: ${all_installed}"
2649     echo "      Description: ${description}"
2650     echo "      Homepage: ${homepage}"
2651     echo "      Depends: ${deps}"
2652     echo "      SDepends: ${sdeps}"
2653     echo
2654    
2655     unset pcat
2656     unset pname
2657     unset magefile
2658     unset pver
2659     unset pbuild
2660     unset state
2661     unset descriptiom
2662     unset homepage
2663     unset all_installed
2664     unset ipver
2665     unset ipbuild
2666     unset depsfull
2667     unset sdepsfull
2668     unset deps
2669     unset sdeps
2670     unset dep
2671     unset sign
2672     done
2673    }
2674    
2675    export_inherits()
2676    {
2677     local include="$1"
2678     shift
2679    
2680     while [ "$1" ]
2681     do
2682     local functions="$1"
2683    
2684     # sanity checks
2685     [ -z "${include}" ] && die "export_inherits(): \$include not given."
2686     [ -z "${functions}" ] && die "export_inherits(): \$functions not given."
2687    
2688     eval "${functions}() { ${include}_${functions} ; }"
2689    
2690     # debug
2691     [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}"
2692    
2693     shift
2694     done
2695    }
2696    
2697    mlibdir()
2698    {
2699     local libdir=lib
2700     [[ ${ARCH} = x86_64 ]] && libdir=lib64
2701    
2702     echo "${libdir}"
2703    }
2704    
2705    ## blacklisted ${magefile}
2706    blacklisted()
2707    {
2708     [[ -z ${MAGE_DISTRIBUTION} ]] && local MAGE_DISTRIBUTION=stable
2709    
2710     # compat
2711     [[ ${USE_UNSTABLE} = true ]] && local MAGE_DISTRIBUTION=unstable
2712     [[ ${USE_TESTING} = true ]] && local MAGE_DISTRIBUTION=testing
2713    
2714     local EXCLUDED="${MROOT}/etc/mage-profile/package.blacklist-${ARCH}-${MAGE_DISTRIBUTION}"
2715    
2716     # return 0 if the list not exist; nothin is masked
2717     [[ ! -f ${EXCLUDED} ]] && return 0
2718    
2719     local MAGEFILE="$1"
2720    
2721     local PCAT="$(magename2pcat ${MAGEFILE})"
2722     local PNAME="$(magename2pname ${MAGEFILE})"
2723     local PVER="$(magename2pver ${MAGEFILE})"
2724     local PBUILD="$(magename2pbuild ${MAGEFILE})"
2725    
2726     local EXPCAT EXPNAME EXPVER EXPBUILD
2727     while read EXPCAT EXPNAME EXPVER EXPBUILD
2728     do
2729     # ignore spaces and comments
2730             case "${EXPCAT}" in
2731                     \#*|"") continue ;;
2732             esac
2733    
2734     # exclude full pver
2735     if [[ -n ${PCAT} ]] && [[ -n ${PNAME} ]] &&
2736     [[ -n ${EXPCAT} ]] && [[ -n ${EXPNAME} ]] &&
2737     [[ -n ${PVER} ]] && [[ -n ${PBUILD} ]] &&
2738     [[ -n ${EXPVER} ]] && [[ -n ${EXPBUILD} ]]
2739     then
2740     [[ ${EXPCAT}/${EXPNAME}-${EXPVER}-${EXPBUILD} = ${PCAT}/${PNAME}-${PVER}-${PBUILD} ]] && return 1
2741     fi
2742    
2743     # exclude pcat/pname only
2744     if [[ -n ${PCAT} ]] && [[ -n ${PNAME} ]] &&
2745     [[ -n ${EXPCAT} ]] && [[ -n ${EXPNAME} ]] &&
2746     [[ -z ${EXPVER} ]] && [[ -z ${EXPBUILD} ]]
2747     then
2748     [[ ${EXPCAT}/${EXPNAME} = ${PCAT}/${PNAME} ]] && return 1
2749     fi
2750     done << EOF
2751    $( cat ${EXCLUDED}; echo)
2752    EOF
2753    
2754     return 0
2755    }
2756    

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