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 892 by niro, Tue Aug 4 19:52:16 2009 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.38 2008-10-05 10:32:24 niro Exp $
4    
5  mage_setup()  mage_setup()
6  {  {
# Line 298  install_symlinks() Line 298  install_symlinks()
298    
299   ln -snf "${link}" "${MROOT}${pathto}"   ln -snf "${link}" "${MROOT}${pathto}"
300    
301   # fix mtime and db  # # fix mtime and db
302   fix_descriptor ${pkgname}/.symlinks \  # fix_descriptor ${pkgname}/.symlinks \
303   "${pathto}" \  # "${pathto}" \
304   "${posix}" \  # "${posix}" \
305   "${link}" \  # "${link}" \
306   "$(fix_mtime "${BUILDDIR}/${pkgname}"/.mtime \  # "$(fix_mtime "${BUILDDIR}/${pkgname}"/.mtime \
307   "${MROOT}${pathto}")"  # "${MROOT}${pathto}")"
308    
309   done < ${BUILDDIR}/${pkgname}/.symlinks   done < ${BUILDDIR}/${pkgname}/.symlinks
310    
311   # now copy the fixed file over the old one  # # now copy the fixed file over the old one
312   [ -f ${BUILDDIR}/${pkgname}/.symlinks_fixed ] && \  # [ -f ${BUILDDIR}/${pkgname}/.symlinks_fixed ] && \
313   cp -f ${BUILDDIR}/${pkgname}/.symlinks{_fixed,}  # cp -f ${BUILDDIR}/${pkgname}/.symlinks{_fixed,}
314    
315   # very important: unsetting the '§' fieldseperator   # very important: unsetting the '§' fieldseperator
316   IFS=$'\n'   IFS=$'\n'
# 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 1148  syncmage() Line 1203  syncmage()
1203   is_newer_mage_version_available   is_newer_mage_version_available
1204  }  }
1205    
1206    syncmage_tarball()
1207    {
1208     local latest_tarball
1209     local temp="$(mktemp -d)"
1210     local mirr mymirr
1211    
1212     # try to get the tarball marked as latest on the server
1213     latest_tarball="mage-latest.tar.bz2"
1214    
1215     for mirr in ${MIRRORS}
1216     do
1217     # path without distribution
1218     mymirr="${mirr%/*}"
1219    
1220     echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1221     echo "fetching latest tarball from ${mymirr} ..."
1222    
1223     wget \
1224     --passive-ftp \
1225     --tries 3 \
1226     --continue \
1227     --progress bar \
1228     --directory-prefix=${temp} \
1229     ${mymirr}/rsync/tarballs/${latest_tarball}
1230     if [[ $? = 0 ]]
1231     then
1232     break
1233     else
1234     continue
1235     fi
1236     done
1237    
1238     if [[ -f ${temp}/${latest_tarball} ]]
1239     then
1240     if [[ -d ${MAGEDIR} ]]
1241     then
1242     echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1243     echo "cleaning old mage-tree ${MAGEDIR}..."
1244     rm -rf ${MAGEDIR}
1245     fi
1246    
1247     echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1248     echo "updating mage-tree from tarball ..."
1249     # unpack in dirname of MAGEDIR, as the tarball has already the mage
1250     tar xjmf ${temp}/${latest_tarball} -C ${MAGEDIR%/*} || die "Unpacking tarball"
1251    
1252     if [[ -d ${temp} ]]
1253     then
1254     echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1255     echo "clenaing temp-files ..."
1256     rm -rf ${temp}
1257     fi
1258     else
1259     die "Could not fetch the latest tarball ... aborting"
1260     fi
1261    }
1262    
1263  cleanpkg()  cleanpkg()
1264  {  {
1265   if [ -d "${PKGDIR}" ]   if [ -d "${PKGDIR}" ]
# Line 1185  choppkgname() Line 1297  choppkgname()
1297   if [ -n "$(echo ${MAGENAME}|fgrep .mage)" ]   if [ -n "$(echo ${MAGENAME}|fgrep .mage)" ]
1298   then   then
1299   #cuts ARCH and PBUILD   #cuts ARCH and PBUILD
1300   #ARCH comes from /etc/mage.rc   #ARCH comes from ${MAGERC}
1301   MAGENAME=$(echo ${MAGENAME} |sed -e "s:-${ARCH}-r*.::g")   MAGENAME=$(echo ${MAGENAME} |sed -e "s:-${ARCH}-r*.::g")
1302    
1303   #cuts version number   #cuts version number
# Line 1218  pname2pcat() Line 1330  pname2pcat()
1330  # returns 0=stable 1=unstable  # returns 0=stable 1=unstable
1331  check_stable_package()  check_stable_package()
1332  {  {
1333     # first check if this magefile is not blacklisted
1334     blacklisted "$1" || return 1
1335    
1336   local STATE   local STATE
1337   STATE="$(get_value_from_magefile STATE "$1")"   STATE="$(get_value_from_magefile STATE "$1")"
1338    
1339   # state testing   # state testing
1340   if [[ ${USE_TESTING} = true ]]   if [[ ${USE_TESTING} = true ]] || [[ ${MAGE_DISTRIBUTION} = testing ]]
1341   then   then
1342   case ${STATE} in   case ${STATE} in
1343   testing|stable) return 0 ;;   testing|stable) return 0 ;;
# Line 1231  check_stable_package() Line 1346  check_stable_package()
1346   fi   fi
1347    
1348   # state unstable   # state unstable
1349   if [[ ${USE_UNSTABLE} = true ]]   if [[ ${USE_UNSTABLE} = true ]] || [[ ${MAGE_DISTRIBUTION} = unstable ]]
1350   then   then
1351   case ${STATE} in   case ${STATE} in
1352   unstable|testing|stable) return 0 ;;   unstable|testing|stable) return 0 ;;
# Line 1257  get_highest_magefile() Line 1372  get_highest_magefile()
1372   local PNAME="$2"   local PNAME="$2"
1373   local magefile   local magefile
1374    
1375   for magefile in $(ls --format=single-column -v ${MAGEDIR}/${PCAT}/${PNAME}/*)   # do not list the content of a directory, only the name (-d)
1376     for magefile in $(ls --format=single-column -v -d ${MAGEDIR}/${PCAT}/${PNAME}/*)
1377   do   do
1378     [[ -z ${magefile} ]] && continue
1379   # we exclude subdirs (for stuff like a md5sum dir)   # we exclude subdirs (for stuff like a md5sum dir)
1380   [ -d ${magefile} ] && continue   [[ -d ${magefile} ]] && continue
1381   if check_stable_package ${magefile}   if check_stable_package ${magefile}
1382   then   then
1383   HIGHEST_MAGEFILE=${magefile}   HIGHEST_MAGEFILE=${magefile}
# Line 1269  get_highest_magefile() Line 1386  get_highest_magefile()
1386   fi   fi
1387   done   done
1388    
1389   # stop here if HIGHEST_MAGEFILE is zero  # do not so anything
1390   # this package must be unstable or old  # # stop here if HIGHEST_MAGEFILE is zero
1391   if [ -z "${HIGHEST_MAGEFILE}" ]  # # this package must be unstable or old
1392   then  # if [ -z "${HIGHEST_MAGEFILE}" ]
1393   echo  # then
1394   echo -n "All packages named "  # echo
1395   echo -en ${COLRED}\""${PKGNAME%-*-*-*}\""${COLDEFAULT}  # echo -n "All packages named "
1396   echo -n " are marked "  # echo -en ${COLRED}\""${PKGNAME%-*-*-*}\""${COLDEFAULT}
1397   echo -en ${COLRED}"*UNSTABLE*"${COLDEFAULT}  # echo -n " are marked "
1398   echo "."  # echo -en ${COLRED}"*UNSTABLE*"${COLDEFAULT}
1399   echo "You need to declare USE_UNSTABLE=true to install this."  # echo "."
1400   echo  # echo "You need to declare USE_UNSTABLE=true to install this."
1401   echo "Example:"  # echo
1402   echo "         USE_UNSTABLE=true mage install ${PKGNAME%-*-*-*}"  # echo "Example:"
1403   echo  # echo "         USE_UNSTABLE=true mage install ${PKGNAME%-*-*-*}"
1404   echo "Be warned that these packages are not stable and may cause serious problems."  # echo
1405   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."
1406   echo  # echo "You should know what you are doing, so don't complain about any damage."
1407   return 1  # echo
1408   fi  # return 1
1409    # fi
1410    
1411   echo "${HIGHEST_MAGEFILE}"   echo "${HIGHEST_MAGEFILE}"
1412   return 0   return 0
# Line 1316  is_config_protected() Line 1434  is_config_protected()
1434   EXPFILE="${MROOT}$1"   EXPFILE="${MROOT}$1"
1435    
1436   # file does not exist; it can be written   # file does not exist; it can be written
1437   [ ! -e ${EXPFILE} ] && return 0   [[ ! -e ${EXPFILE} ]] && return 0
1438    
1439   # to be safe; it may be '§'   # to be safe; it may be '§'
1440   IFS=' '   IFS=' '
# Line 1326  is_config_protected() Line 1444  is_config_protected()
1444   do   do
1445   # ersetzen von $i nur wenn am anfang der variable   # ersetzen von $i nur wenn am anfang der variable
1446   TEST="${EXPFILE/#${MROOT}${i}/Protected}"   TEST="${EXPFILE/#${MROOT}${i}/Protected}"
1447   if [ "${TEST}" != "${EXPFILE}" ]   if [[ ${TEST} != ${EXPFILE} ]]
1448   then   then
1449   # setzen das es protected ist   # setzen das es protected ist
1450   PROTECTED=TRUE   PROTECTED=TRUE
# Line 1335  is_config_protected() Line 1453  is_config_protected()
1453   for x in ${CONFIG_PROTECT_MASK}   for x in ${CONFIG_PROTECT_MASK}
1454   do   do
1455   TEST="${EXPFILE/#${MROOT}${x}/Protect_Masked}"   TEST="${EXPFILE/#${MROOT}${x}/Protect_Masked}"
1456   if [ "${TEST}" != "${EXPFILE}" ]   if [[ ${TEST} != ${EXPFILE} ]]
1457   then   then
1458   PROTECTED=MASKED   PROTECTED=MASKED
1459   fi   fi
# Line 1371  is_config_protected() Line 1489  is_config_protected()
1489  ###################################################  ###################################################
1490  count_protected_files()  count_protected_files()
1491  {  {
1492   ${MLIBDIR}/writeprotected "$1"   local file="$1"
1493     local dirname="${file%/*}"
1494     local filename="${file##*/}"
1495     local count
1496     local output
1497     local i
1498    
1499     declare -i count=0
1500    
1501     # check if there are already protected files
1502     for oldpretected in $(find ${dirname} -iname "._cfg????_${filename}" |
1503     sed -e "s:\(^.*/\)\(._cfg*_\)\(/.*$\):\1\2\3\%\2\%\3:" |
1504     sort -t'%' -k3 -k2 | cut -f1 -d'%')
1505     do
1506     count=$(echo ${oldpretected} | cut -d_ -f2 | sed -e "s:cfg::")
1507     done
1508     (( count ++ ))
1509    
1510     # fill output up with zeros
1511     for (( i=${#count}; i < 4; i++ )); do output="${output}0"; done
1512     output="${output}${count}"
1513    
1514     echo "${output}"
1515  }  }
1516    
1517  # call with  # call with
# Line 1388  get_uninstall_candidates() Line 1528  get_uninstall_candidates()
1528   local list   local list
1529   local pcatdir   local pcatdir
1530   local protected   local protected
1531     local i
1532    
1533   # very basic getops   # very basic getops
1534   for i in $*   for i in $*
# Line 1400  get_uninstall_candidates() Line 1541  get_uninstall_candidates()
1541   shift   shift
1542   done   done
1543    
1544   # sanity checks; abort if not given  # it's not good to complain here about empty pnames; better to continue later anyway
1545   [ -z "${search_pname}" ] && die "get_uninstall_candidates() \$search_pname not given."  # # sanity checks; abort if not given
1546    # [ -z "${search_pname}" ] && die "get_uninstall_candidates() \$search_pname not given."
1547    
1548    
1549   # check needed global vars   # check needed global vars
1550   [ -z "${INSTALLDB}" ] && die "get_uninstall_candidates() \$INSTALLDB not set."   [ -z "${INSTALLDB}" ] && die "get_uninstall_candidates() \$INSTALLDB not set."
1551    
1552   # set pcatdir to '*' if empty   # set pcatdir to '*' if empty
1553   [ -z "${pcatdir}" ] && pcatdir=*   [ -z "${pcatdir}" ] && pcatdir='*'
1554    
1555   for pkg in ${MROOT}${INSTALLDB}/${pcatdir}/*   for pkg in ${MROOT}${INSTALLDB}/${pcatdir}/*
1556   do   do
# Line 1493  virtuals_add() Line 1635  virtuals_add()
1635   local oldline   local oldline
1636   local line i   local line i
1637   local installed_file   local installed_file
1638     local OLDIFS
1639    
1640   if virtuals_read ${virtualname}   if virtuals_read ${virtualname}
1641   then   then
1642   # make shure ${PKG_NAME} is *not* in ${VIRTUAL_NAME} already   # make sure ${PKG_NAME} is *not* in ${VIRTUAL_NAME} already
1643   for i in $(virtuals_read ${virtualname} showpkgs)   for i in $(virtuals_read ${virtualname} showpkgs)
1644   do   do
1645   if [[ ${i} = ${pkgname} ]]   if [[ ${i} = ${pkgname} ]]
# Line 1515  virtuals_add() Line 1658  virtuals_add()
1658   # make a backup   # make a backup
1659   mv ${MROOT}${VIRTUALDB_FILE} ${MROOT}${VIRTUALDB_FILE}.old   mv ${MROOT}${VIRTUALDB_FILE} ${MROOT}${VIRTUALDB_FILE}.old
1660    
1661     OLDIFS="${IFS}"
1662   IFS=$'\n'   IFS=$'\n'
1663   for line in $(< ${MROOT}${VIRTUALDB_FILE}.old)   for line in $(< ${MROOT}${VIRTUALDB_FILE}.old)
1664   do   do
# Line 1526  virtuals_add() Line 1670  virtuals_add()
1670   echo "${line}" >> ${MROOT}${VIRTUALDB_FILE}   echo "${line}" >> ${MROOT}${VIRTUALDB_FILE}
1671   fi   fi
1672   done   done
1673     # unset IFS
1674   #unset IFS   IFS="${OLDIFS}"
1675   else   else
1676   echo -ne "${COLBLUE} *** ${COLDEFAULT}"   echo -ne "${COLBLUE} >>> ${COLDEFAULT}"
1677   echo "register ${pkgname} as ${virtualname} ..."   echo "register ${pkgname} as ${virtualname} ..."
1678   echo "${virtualname} ${pkgname}" >> ${MROOT}${VIRTUALDB_FILE}   echo "${virtualname} ${pkgname}" >> ${MROOT}${VIRTUALDB_FILE}
1679   fi   fi
# Line 1541  virtuals_add() Line 1685  virtuals_add()
1685  #$1 virtualname; $2 pkgname  #$1 virtualname; $2 pkgname
1686  virtuals_del() {  virtuals_del() {
1687    
1688   local VIRTUAL_NAME PKG_NAME OLD_LINE METHOD line i x PKG_INSTALLED   local virtualname="$1"
1689     local pkgname="$2"
1690   VIRTUAL_NAME=$1   local oldline
1691   PKG_NAME=$2   local method
1692     local line i x
1693   #first check if exists   local pkg_installed
1694   if virtuals_read ${VIRTUAL_NAME}   local OLDIFS
1695    
1696     # first check if exists
1697     if virtuals_read ${virtualname}
1698   then   then
1699   #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}
1700   declare -i x=0   declare -i x=0
1701   for i in $(virtuals_read ${VIRTUAL_NAME} showpkgs)   for i in $(virtuals_read ${virtualname} showpkgs)
1702   do   do
1703   if [ "${i}" == "${PKG_NAME}" ]   if [[ ${i} = ${pkgname} ]]
1704   then   then
1705   PKG_INSTALLED=true   pkg_installed=true
1706   fi   fi
1707   ((x++))   ((x++))
1708   done   done
1709    
1710   #abort if not installed   # abort if not installed
1711   if [ "${PKG_INSTALLED}" != "true" ]   if [[ ${pkg_installed} != true ]]
1712   then   then
1713   echo "!!!! ${PKG_NAME} does not exists in ${VIRTUAL_NAME}."   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1714     echo "${pkgname} does not exists in ${virtualname}."
1715   return 0   return 0
1716   fi   fi
1717    
1718   if [ ${x} -ge 2 ]   if [ ${x} -ge 2 ]
1719   then   then
1720   METHOD=update   method=update
1721   else   else
1722   METHOD=delall   method=delall
1723   fi   fi
1724    
1725   #get the complete line   # get the complete line
1726   OLD_LINE="$(virtuals_read ${VIRTUAL_NAME} showline)"   oldline="$(virtuals_read ${virtualname} showline)"
1727    
1728   #make a backup   # make a backup of the db
1729   mv ${VIRTUALDB_FILE} ${VIRTUALDB_FILE}.old   mv ${VIRTUALDB_FILE} ${VIRTUALDB_FILE}.old
1730    
1731   #parse virtualdb   # parse virtualdb
1732     OLDIFS="${IFS}"
1733   IFS=$'\n'   IFS=$'\n'
1734   for line in $(< ${VIRTUALDB_FILE}.old)   for line in $(< ${VIRTUALDB_FILE}.old)
1735   do   do
1736   if [ "${line}" == "${OLD_LINE}" ]   if [[ ${line} = ${oldline} ]]
1737   then   then
1738   #delall or update?   #delall or update?
1739   case ${METHOD} in   case ${method} in
1740   update)   update)
1741   echo "<<<< Unlinking ${PKG_NAME} from ${VIRTUAL_NAME} in virtual database ..."   echo -ne "${COLBLUE} *** ${COLDEFAULT}"
1742   #del PKG_NAME from line   echo "Unlinking ${pkgname} from ${virtualname} in virtual database ..."
1743   echo "${line/ ${PKG_NAME}/}" >> ${VIRTUALDB_FILE}   # del PKG_NAME from line
1744     echo "${line/ ${pkgname}/}" >> ${VIRTUALDB_FILE}
1745   ;;   ;;
1746   delall)   delall)
1747   echo "<<<< Deleting ${VIRTUAL_NAME} in virtual database ..."   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"
1748   #continue; do not write anything   echo "Deleting ${virtualname} in virtual database ..."
1749     # continue; do not write anything
1750   continue   continue
1751   ;;   ;;
1752   esac   esac
# Line 1603  virtuals_del() { Line 1754  virtuals_del() {
1754   echo "${line}" >> ${VIRTUALDB_FILE}   echo "${line}" >> ${VIRTUALDB_FILE}
1755   fi   fi
1756   done   done
1757   unset IFS   # unset IFS
1758     IFS="${OLDIFS}"
1759   else   else
1760   echo "!!!! ${VIRTUAL_NAME} does not exists in virtual database."   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1761     echo "${virtualname} does not exists in virtual database."
1762   fi   fi
1763  }  }
1764    
# Line 1637  minclude() Line 1790  minclude()
1790  {  {
1791   local i   local i
1792    
1793   if [ -n "$@" ]   if [[ -n $* ]]
1794   then   then
1795   for i in $@   for i in $*
1796   do   do
1797   [[ ${MAGEDEBUG} = on ]] && \   [[ ${MAGEDEBUG} = on ]] && \
1798   echo "--- Including ${MAGEDIR}/include/${i}.minc"   echo "--- Including ${MAGEDIR}/include/${i}.minc"
# Line 1653  sminclude() Line 1806  sminclude()
1806  {  {
1807   local i   local i
1808    
1809   if [ -n "$@" ]   if [[ -n $* ]]
1810   then   then
1811   for i in $@   for i in $*
1812   do   do
1813   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"
1814   source ${SMAGESCRIPTSDIR}/include/${i}.sminc   source ${SMAGESCRIPTSDIR}/include/${i}.sminc
# Line 1670  is_newer_mage_version_available() Line 1823  is_newer_mage_version_available()
1823   local newest_mage   local newest_mage
1824   local installed_mage   local installed_mage
1825    
1826   newest_mage="$( CATEGORIE=app-mage MAGENAME=mage get_highest_magefile;echo $(basename ${MAGEFILE} .mage) )"   newest_mage="$(basename $(get_highest_magefile app-mage mage) .mage)"
1827   installed_mage="$(magequery -n mage | cut -d' ' -f5)"   installed_mage="$(magequery -n mage | cut -d' ' -f5)"
1828    
1829   if [[ ${newest_mage} > ${installed_mage} ]]   if [[ ${newest_mage} > ${installed_mage} ]]
# Line 1679  is_newer_mage_version_available() Line 1832  is_newer_mage_version_available()
1832   echo -en ${COLRED}"An update for your packetmanager is available. "${COLDEFAULT}   echo -en ${COLRED}"An update for your packetmanager is available. "${COLDEFAULT}
1833   echo -e ${COLBLUE}"[ ${newest_mage} ]"${COLDEFAULT}   echo -e ${COLBLUE}"[ ${newest_mage} ]"${COLDEFAULT}
1834   echo "It is recommened to install this newer version"   echo "It is recommened to install this newer version"
1835   echo "or your current system installation may brake."   echo "or your current system installation may break."
1836   echo   echo
1837   echo -en "Please update mage by running "   echo -en "Please update mage by running "
1838   echo -e ${COLGREEN}"'mage install mage'"${COLDEFAULT}   echo -e ${COLGREEN}"'mage install mage'"${COLDEFAULT}
# Line 1951  get_value_from_magefile() Line 2104  get_value_from_magefile()
2104   local magefile="$2"   local magefile="$2"
2105   local value   local value
2106    
2107     [[ -z ${var} ]] && return 1
2108     [[ -z ${magefile} ]] && return 1
2109    
2110   # local all possible vars of a mage file   # local all possible vars of a mage file
2111   # to prevent bad issues   # to prevent bad issues
2112   local PKGNAME   local PKGNAME
# Line 1963  get_value_from_magefile() Line 2119  get_value_from_magefile()
2119   local PKGTYPE   local PKGTYPE
2120   local preinstall   local preinstall
2121   local postinstall   local postinstall
2122     local preremove
2123     local postremove
2124    
2125   # sanity checks   # sanity checks
2126   [ -f ${magefile} ] && source ${magefile} || \   [ -f ${magefile} ] && source ${magefile} || \
# Line 1972  get_value_from_magefile() Line 2130  get_value_from_magefile()
2130   source ${magefile}   source ${magefile}
2131   eval value=\$$(echo ${var})   eval value=\$$(echo ${var})
2132   echo "${value}"   echo "${value}"
2133    
2134     # unset these functions
2135     unset -f preinstall
2136     unset -f postinstall
2137     unset -f preremove
2138     unset -f postremove
2139  }  }
2140    
2141  mage_install()  mage_install()
# Line 1988  mage_install() Line 2152  mage_install()
2152   local PKGTYPE   local PKGTYPE
2153   local preinstall   local preinstall
2154   local postinstall   local postinstall
2155     local preremove
2156     local postremove
2157    
2158   local pcat   local pcat
2159   local pname   local pname
# Line 1997  mage_install() Line 2163  mage_install()
2163   local count_current   local count_current
2164   local magefile   local magefile
2165   local src_install   local src_install
2166     local i
2167    
2168   # very basic getops   # very basic getops
2169   for i in $*   for i in $*
# Line 2070  mage_install() Line 2237  mage_install()
2237   echo B:${pbuild}   echo B:${pbuild}
2238   fi   fi
2239    
2240   smage2file=${SMAGESCRIPTSDIR}/${pname}/${pname}-${pver}-${pbuild}.smage2   if [[ -z ${MAGE_TARGETS} ]]
2241     then
2242     # basic svn compat
2243     if [[ -d ${SMAGESCRIPTSDIR}/trunk ]]
2244     then
2245     for i in ${SMAGESCRIPTSDIR}/trunk/*/${pname}/${pname}-${pver}-${pbuild}.smage2
2246     do
2247     smage2file="${i}"
2248     done
2249     else
2250     smage2file=${SMAGESCRIPTSDIR}/${pname}/${pname}-${pver}-${pbuild}.smage2
2251     fi
2252     else
2253     # basic svn compat
2254     if [[ -d ${SMAGESCRIPTSDIR}/trunk ]]
2255     then
2256     for i in ${SMAGESCRIPTSDIR}/trunk/*/${pname/${MAGE_TARGETS}/}/${pname/${MAGE_TARGETS}/}-${pver}-${pbuild}.smage2
2257     do
2258     smage2file="${i}"
2259     done
2260     else
2261     smage2file=${SMAGESCRIPTSDIR}/${pname/${MAGE_TARGETS}/}/${pname/${MAGE_TARGETS}/}-${pver}-${pbuild}.smage2
2262     fi
2263     fi
2264   if [ -f "${smage2file}" ]   if [ -f "${smage2file}" ]
2265   then   then
2266     echo -e " ${COLBLUE}***${COLDEFAULT} building package from source ... "
2267   smage2 ${smage2file} || die "compile failed"   smage2 ${smage2file} || die "compile failed"
2268   else   else
2269   echo   echo
# Line 2086  mage_install() Line 2277  mage_install()
2277   if [[ ${PKGTYPE} != virtual ]] && \   if [[ ${PKGTYPE} != virtual ]] && \
2278   [[ ${PKGTYPE} != sources ]]   [[ ${PKGTYPE} != sources ]]
2279   then   then
2280   # 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  
2281   build_doinstall ${PKGNAME}   build_doinstall ${PKGNAME}
2282   fi   fi
2283    
# Line 2149  mage_install() Line 2333  mage_install()
2333  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2334  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "
2335   echo "successfully installed."   echo "successfully installed."
2336    
2337     # unset these functions
2338     unset -f preinstall
2339     unset -f postinstall
2340     unset -f preremove
2341     unset -f postremove
2342  }  }
2343    
2344  md5sum_packages()  md5sum_packages()
# Line 2253  uninstall_packages() Line 2443  uninstall_packages()
2443   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2444   echo "following candidate(s) will be removed:"   echo "following candidate(s) will be removed:"
2445   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2446   echo -ne "\033[1m${can_pcat}/${can_pname}:${COLDEFAULT}"   echo -ne "${COLBOLD}${can_pcat}/${can_pname}:${COLDEFAULT}"
2447   echo -e "${COLRED} ${can_ver_list} ${COLDEFAULT}"   echo -e "${COLRED} ${can_ver_list} ${COLDEFAULT}"
2448   echo   echo
2449   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   if [ ${MAGE_UNINSTALL_TIMEOUT} -gt 0 ]
2450   echo "( Press [CTRL+C] to abort )"   then
2451   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2452   echo -n "Waiting ${MAGE_UNINSTALL_TIMEOUT} seconds ..."   echo "( Press [CTRL+C] to abort )"
2453   for ((i=MAGE_UNINSTALL_TIMEOUT; i >= 0; i--))   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2454   do   echo -n "Waiting ${MAGE_UNINSTALL_TIMEOUT} seconds ..."
2455   echo -ne "${COLRED} ${i}${COLDEFAULT}"   for ((i=MAGE_UNINSTALL_TIMEOUT; i >= 0; i--))
2456   sleep 1   do
2457   done   echo -ne "${COLRED} ${i}${COLDEFAULT}"
2458   echo   sleep 1
2459   echo   done
2460     echo
2461     echo
2462     fi
2463    
2464   for pkg in ${list}   for pkg in ${list}
2465   do   do
# Line 2304  mage_uninstall() Line 2497  mage_uninstall()
2497   local PKGTYPE   local PKGTYPE
2498   local preinstall   local preinstall
2499   local postinstall   local postinstall
2500     local preremove
2501     local postremove
2502    
2503   local pcat   local pcat
2504   local pname   local pname
# Line 2339  mage_uninstall() Line 2534  mage_uninstall()
2534   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"
2535   echo -n "removing: "   echo -n "removing: "
2536   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2537   echo -e "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT}"   echo -e "${COLRED}${pname}-${pver}-${pbuild}${COLDEFAULT}"
2538    
2539   magefile="${MAGEDIR}/${pcat}/${pname}/${pname}-${pver}-${pbuild}.mage"   magefile="${MROOT}${INSTALLDB}/${pcat}/${pname}-${pver}-${pbuild}/${pname}-${pver}-${pbuild}.mage"
2540   source ${magefile}   source ${magefile}
2541    
2542   ## preremove scripts   ## preremove scripts
# Line 2401  mage_uninstall() Line 2596  mage_uninstall()
2596  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2597  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "
2598   echo "successfully removed."   echo "successfully removed."
2599    
2600     # unset these functions
2601     unset -f preinstall
2602     unset -f postinstall
2603     unset -f preremove
2604     unset -f postremove
2605  }  }
2606    
2607  show_etc_update_mesg() {  show_etc_update_mesg() {
# Line 2415  show_etc_update_mesg() { Line 2616  show_etc_update_mesg() {
2616   echo "Please run 'etc-update' to update your configuration files."   echo "Please run 'etc-update' to update your configuration files."
2617   echo   echo
2618  }  }
2619    
2620    pkgsearch()
2621    {
2622     local string="$1"
2623     local result
2624     local pkg
2625     local pcat
2626     local pname
2627     local magefile
2628     local pver
2629     local pbuild
2630     local state
2631     local descriptiom
2632     local homepage
2633     local i
2634     local all_installed
2635     local ipver
2636     local ipbuild
2637     local latest_available
2638     local depsfull
2639     local sdepsfull
2640     local deps
2641     local sdeps
2642     local dep
2643     local sign
2644    
2645     # only names no versions
2646     result="$(find ${MAGEDIR} -mindepth 2 -maxdepth 2 -type d -name '*'${string}'*'| sed '/profiles/d' | sed '/includes/d')"
2647     #result="$(find ${MAGEDIR} -type f -name '*'${string}'*'.mage | sort)"
2648    
2649     # nothing found
2650     [[ -z ${result} ]] && die "No package found containing '${string}' in the name."
2651    
2652     for pkg in ${result}
2653     do
2654     # dirty, but does the job
2655     pcat="$(magename2pcat ${pkg}/foo)"
2656     pname="$(magename2pname ${pkg}-foo-foo)"
2657    
2658     # get highest version available
2659     magefile=$(get_highest_magefile ${pcat} ${pname})
2660    
2661     if [[ ! -z ${magefile} ]]
2662     then
2663     # now get all needed infos to print a nice output
2664     pver="$(magename2pver ${magefile})"
2665     pbuild="$(magename2pbuild ${magefile})"
2666     state="$(get_value_from_magefile STATE ${magefile})"
2667     description="$(get_value_from_magefile DESCRIPTION ${magefile})"
2668     homepage="$(get_value_from_magefile HOMEPAGE ${magefile})"
2669    
2670     # all installed
2671     for i in $(get_uninstall_candidates --pname ${pname} --pcat ${pcat})
2672     do
2673     ipver="$(magename2pver ${i})"
2674     ipbuild="$(magename2pbuild ${i})"
2675    
2676     if [[ -z ${all_installed} ]]
2677     then
2678     all_installed="${ipver}-${ipbuild}"
2679     else
2680     all_installed="${all_installed} ${ipver}-${ipbuild}"
2681     fi
2682     done
2683     [[ -z ${all_installed} ]] && all_installed="none"
2684    
2685     case ${state} in
2686     stable) state=${COLGREEN}"[s] ";;
2687     testing) state=${COLYELLOW}"[t] ";;
2688     unstable) state=${COLRED}"[u] ";;
2689     old) state=${COLGRAY}"[o] ";;
2690     esac
2691    
2692     latest_available="${pver}-${pbuild}"
2693     else
2694     # package is masked
2695     state="${COLRED}[m] "
2696     latest_available="${COLRED}masked for this distribution.${COLDEFAULT}"
2697     fi
2698    
2699     depsfull="$(get_value_from_magefile DEPEND ${magefile})"
2700     sdepsfull="$(get_value_from_magefile SDEPEND ${magefile})"
2701    
2702     while read sign dep
2703     do
2704     case ${dep} in
2705     "") continue;;
2706     esac
2707    
2708     deps="${deps} $(basename ${dep%-*})"
2709     done << EOF
2710    ${depsfull}
2711    EOF
2712    
2713     while read sign dep
2714     do
2715     case ${dep} in
2716     "") continue;;
2717     esac
2718    
2719     sdeps="${sdeps} $(basename ${dep%-*})"
2720     done << EOF
2721    ${sdepsfull}
2722    EOF
2723    
2724     echo -e "${state}${pcat}/${pname}"${COLDEFAULT}
2725     echo -e "      Latest available:   ${latest_available}"
2726     echo "      Installed versions: ${all_installed}"
2727     echo "      Description: ${description}"
2728     echo "      Homepage: ${homepage}"
2729     echo "      Depends: ${deps}"
2730     echo "      SDepends: ${sdeps}"
2731     echo
2732    
2733     unset pcat
2734     unset pname
2735     unset magefile
2736     unset pver
2737     unset pbuild
2738     unset state
2739     unset descriptiom
2740     unset homepage
2741     unset all_installed
2742     unset ipver
2743     unset ipbuild
2744     unset depsfull
2745     unset sdepsfull
2746     unset deps
2747     unset sdeps
2748     unset dep
2749     unset sign
2750     done
2751    }
2752    
2753    export_inherits()
2754    {
2755     local include="$1"
2756     shift
2757    
2758     while [ "$1" ]
2759     do
2760     local functions="$1"
2761    
2762     # sanity checks
2763     [ -z "${include}" ] && die "export_inherits(): \$include not given."
2764     [ -z "${functions}" ] && die "export_inherits(): \$functions not given."
2765    
2766     eval "${functions}() { ${include}_${functions} ; }"
2767    
2768     # debug
2769     [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}"
2770    
2771     shift
2772     done
2773    }
2774    
2775    mlibdir()
2776    {
2777     local libdir=lib
2778     [[ ${ARCH} = x86_64 ]] && libdir=lib64
2779    
2780     echo "${libdir}"
2781    }
2782    
2783    ## blacklisted ${magefile}
2784    blacklisted()
2785    {
2786     [[ -z ${MAGE_DISTRIBUTION} ]] && local MAGE_DISTRIBUTION=stable
2787    
2788     # compat
2789     [[ ${USE_UNSTABLE} = true ]] && local MAGE_DISTRIBUTION=unstable
2790     [[ ${USE_TESTING} = true ]] && local MAGE_DISTRIBUTION=testing
2791    
2792     # support both types for the moment
2793     if [[ -f /etc/mage-profile/package.blacklist-${ARCH}-${MAGE_DISTRIBUTION} ]]
2794     then
2795     local EXCLUDED="/etc/mage-profile/package.blacklist-${ARCH}-${MAGE_DISTRIBUTION}"
2796     else
2797     local EXCLUDED="/etc/mage-profile/package.blacklist-${ARCH}"
2798     fi
2799    
2800     # return 0 if the list not exist; nothin is masked
2801     [[ ! -f ${EXCLUDED} ]] && return 0
2802    
2803     local MAGEFILE="$1"
2804    
2805     local PCAT="$(magename2pcat ${MAGEFILE})"
2806     local PNAME="$(magename2pname ${MAGEFILE})"
2807     local PVER="$(magename2pver ${MAGEFILE})"
2808     local PBUILD="$(magename2pbuild ${MAGEFILE})"
2809    
2810     local EXPCAT EXPNAME EXPVER EXPBUILD
2811     while read EXPCAT EXPNAME EXPVER EXPBUILD
2812     do
2813     # ignore spaces and comments
2814             case "${EXPCAT}" in
2815                     \#*|"") continue ;;
2816             esac
2817    
2818     # exclude full pver
2819     if [[ -n ${PCAT} ]] && [[ -n ${PNAME} ]] &&
2820     [[ -n ${EXPCAT} ]] && [[ -n ${EXPNAME} ]] &&
2821     [[ -n ${PVER} ]] && [[ -n ${PBUILD} ]] &&
2822     [[ -n ${EXPVER} ]] && [[ -n ${EXPBUILD} ]]
2823     then
2824     [[ ${EXPCAT}/${EXPNAME}-${EXPVER}-${EXPBUILD} = ${PCAT}/${PNAME}-${PVER}-${PBUILD} ]] && return 1
2825     fi
2826    
2827     # exclude pcat/pname only
2828     if [[ -n ${PCAT} ]] && [[ -n ${PNAME} ]] &&
2829     [[ -n ${EXPCAT} ]] && [[ -n ${EXPNAME} ]] &&
2830     [[ -z ${EXPVER} ]] && [[ -z ${EXPBUILD} ]]
2831     then
2832     [[ ${EXPCAT}/${EXPNAME} = ${PCAT}/${PNAME} ]] && return 1
2833     fi
2834     done << EOF
2835    $( cat ${EXCLUDED}; echo)
2836    EOF
2837    
2838     return 0
2839    }
2840    

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