--- trunk/mage/usr/lib/mage/magequery.sh 2005/01/06 02:57:12 33 +++ trunk/mage/usr/lib/mage/magequery.sh 2011/08/30 12:19:11 1503 @@ -1,7 +1,7 @@ #!/bin/bash -#query mage database for installed packages -# version: 0.3.6-r9 +# query mage database for installed packages +# $Id$ print_usage() { @@ -10,6 +10,10 @@ echo " -n NAME searches for name NAME" echo " -v VER searches for version VER, needs -n" echo " -b BUILD searches for build number BUILD, needs -n -v" + echo " -c CAT shows all packages of given categorie" + echo " -i shows an inventory of all installed packages" + echo " -f PATH searches packages which own given file" + echo " -e PATH searches the package which owns the exact given filename" echo echo " Examples:" echo @@ -18,40 +22,109 @@ echo } -while getopts "n:v:b:h-" opt ; do - case "${opt}" in - n) - S_PNAME="${OPTARG}" - ;; - - v) - S_PVER="${OPTARG}" - ;; - - b) - S_PBUILD="${OPTARG}" - ;; - h) - print_usage - exit 0 - ;; - - -) break - ;; - - *) - print_usage - exit 1 - ;; +# default args: +GET_INVENTORY=false +SEARCH_ONLY_PATH=false +SEARCH_ONLY_CAT=false +SEARCH_EXACT_FILENAME=false + +# no params given, or is only an arg not ar param, exit +if [[ $# -lt 1 ]] || [[ ${1:0:1} != - ]] +then + print_usage + exit 1 +fi + +# very basic getops +for i in $* +do + case $1 in + -n) shift; S_PNAME="$1" ;; + -v) shift; S_PVER="$1" ;; + -b) shift; S_PBUILD="$1" ;; + -i) GET_INVENTORY="true" ;; + -f) SEARCH_ONLY_PATH="true"; shift; SEARCH_PATH="$1" ;; + -e) SEARCH_ONLY_PATH="true"; SEARCH_EXACT_FILENAME="true"; shift; SEARCH_PATH="$1" ;; + -c) SEARCH_ONLY_CAT="true"; shift; SEARCH_CAT="$1" ;; + -h) print_usage; exit 0 ;; + -*) print_usage; exit 1 ;; esac + shift done -shift $(($OPTIND - 1)) - +source /etc/mage.rc.global source /etc/mage.rc RETVAL=1 -for i in ${INSTALLDB}/*/* +if [[ ${SEARCH_ONLY_PATH} = true ]] +then + unset S_PACKAGES + unset i pkg + if [[ ${SEARCH_EXACT_FILENAME} = true ]] + then + S_CANDIDATES=$(egrep -rl "${SEARCH_PATH}ยง" ${INSTALLDB}) + else + S_CANDIDATES=$(fgrep -rl "${SEARCH_PATH}" ${INSTALLDB}) + fi + for i in ${S_CANDIDATES} + do + # ignore magefiles! + case ${i} in + *.mage) continue ;; + esac + + # print categorie and pkgname + pkg="$(basename ${i%/*/*})/$(basename ${i%/*})" + if [[ -z $(echo ${S_PACKAGES} | grep ${pkg}) ]] + then + S_PACKAGES="${S_PACKAGES} ${pkg}" + fi + done + + # show packages + for pkg in ${S_PACKAGES} + do + echo "${pkg}" + done + + exit 0 +fi + +if [[ ${SEARCH_ONLY_CAT} = true ]] +then + # no packages of SEARCH_CAT are installed + [[ ! -d ${MROOT}${INSTALLDB}/${SEARCH_CAT} ]] && exit 1 + + for i in ${INSTALLDB}/${SEARCH_CAT}/* + do + # print categorie and pkgname + echo "$(basename ${i%/*})/$(basename ${i})" + done + + exit 0 +fi + +if [[ ${GET_INVENTORY} = true ]] +then + for package in $(find ${MROOT}${INSTALLDB} -mindepth 2 -maxdepth 2 -type d -printf "%h,%f\n" | sort) + do + pcat="$(basename $(echo ${package} | cut -d, -f1))" + pname="$(echo ${package} | cut -d, -f2)" + if [[ -z ${invlist} ]] + then + invlist="${pcat}/${pname}" + else + invlist="${invlist} +${pcat}/${pname}" + fi + done + + # now show the list + echo "${invlist}" + exit 0 +fi + +for i in ${MROOT}${INSTALLDB}/*/* do INST_PNAME=no INST_PVER=no @@ -59,21 +132,21 @@ x=$(basename ${i}) PNAME=${x%-*-*} - PVER=$(echo ${x#${PNAME}-}| cut -d- -f1) - PBUILD=$(echo ${x#${PNAME}-}| cut -d- -f2) + PVER=$(echo ${x#${PNAME}-} | cut -d- -f1) + PBUILD=$(echo ${x#${PNAME}-} | cut -d- -f2) if [[ ${PNAME} == ${S_PNAME} ]] then INST_PNAME=yes - if [ -n "${S_PVER}" ] + if [[ -n ${S_PVER} ]] then if [[ ${PVER} == ${S_PVER} ]] then INST_PVER=yes fi - if [ -n "${S_PBUILD}" ] + if [[ -n ${S_PBUILD} ]] then if [[ ${PBUILD} == ${S_PBUILD} ]] then @@ -83,9 +156,9 @@ fi # search for pname only - if [ -n "${S_PNAME}" -a -z "${S_PVER}" -a -z "${S_PBUILD}" ] + if [[ -n ${S_PNAME} ]] && [[ -z ${S_PVER} ]] && [[ -z ${S_PBUILD} ]] then - if [ "${INST_PNAME}" = yes ] + if [[ ${INST_PNAME} = yes ]] then echo "${S_PNAME} is installed [ ${PNAME}-${PVER}-${PBUILD} ]" RETVAL=0 @@ -94,9 +167,9 @@ fi # search for pname and pver - if [ -n "${S_PNAME}" -a -n "${S_PVER}" -a -z "${S_PBUILD}" ] + if [[ -n ${S_PNAME} ]] && [[ -n ${S_PVER} ]] && [[ -z ${S_PBUILD} ]] then - if [ "${INST_PNAME}" = "yes" -a "${INST_PVER}" = "yes" ] + if [[ ${INST_PNAME} = yes ]] && [[ ${INST_PVER} = yes ]] then echo "${S_PNAME}-${S_PVER} is installed [ ${PNAME}-${PVER}-${PBUILD} ]" RETVAL=0 @@ -105,9 +178,9 @@ fi # search for pname, pver and pbuild - if [ -n "${S_PNAME}" -a -n "${S_PVER}" -a -n "${S_PBUILD}" ] + if [[ -n ${S_PNAME} ]] && [[ -n ${S_PVER} ]] && [[ -n ${S_PBUILD} ]] then - if [ "${INST_PNAME}" = "yes" -a "${INST_PVER}" = "yes" -a "${INST_PBUILD}" = "yes" ] + if [[ ${INST_PNAME} = yes ]] && [[ ${INST_PVER} = yes ]] && [[ ${INST_PBUILD} = yes ]] then echo "${S_PNAME}-${S_PVER}-${S_PBUILD} is installed [ ${PNAME}-${PVER}-${PBUILD} ]" RETVAL=0