Magellan Linux

Diff of /trunk/mage/usr/lib/mage/magequery.sh

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

revision 33 by niro, Thu Jan 6 02:57:12 2005 UTC revision 3095 by niro, Mon Jun 4 16:52:54 2018 UTC
# Line 1  Line 1 
1  #!/bin/bash  #!/bin/bash
2    
3  #query mage database for installed packages  # query mage database for installed packages
4  # version: 0.3.6-r9  # $Id$
5    
6    # always export C locale to fix utf-8 issues
7    export LC_ALL=C
8    
9  print_usage()  print_usage()
10  {  {
# Line 10  print_usage() Line 13  print_usage()
13   echo "    -n NAME   searches for name NAME"   echo "    -n NAME   searches for name NAME"
14   echo "    -v VER    searches for version VER, needs -n"   echo "    -v VER    searches for version VER, needs -n"
15   echo "    -b BUILD  searches for build number BUILD, needs -n -v"   echo "    -b BUILD  searches for build number BUILD, needs -n -v"
16     echo "    -c CAT    shows all packages of given categorie"
17     echo "    -i        shows an inventory of all installed packages"
18     echo "    -f PATH   searches packages which own given file"
19     echo "    -e PATH   searches the package which owns the exact given filename"
20   echo   echo
21   echo " Examples:"   echo " Examples:"
22   echo   echo
# Line 18  print_usage() Line 25  print_usage()
25   echo   echo
26  }  }
27    
28  while getopts "n:v:b:h-" opt ; do  # default args:
29   case "${opt}" in  GET_INVENTORY=0
30   n)  SEARCH_ONLY_PATH=0
31   S_PNAME="${OPTARG}"  SEARCH_ONLY_CAT=0
32   ;;  SEARCH_EXACT_FILENAME=0
33    
34   v)  # no params given, or is only an arg not ar param, exit
35   S_PVER="${OPTARG}"  if [[ $# -lt 1 ]] || [[ ${1:0:1} != - ]]
36   ;;  then
37     print_usage
38   b)   exit 1
39   S_PBUILD="${OPTARG}"  fi
40   ;;  
41   h)  # very basic getops
42   print_usage  for i in $*
43   exit 0  do
44   ;;   case $1 in
45     -n) shift; S_PNAME="$1"; if [[ -z ${S_PNAME} ]]; then print_usage; exit 1; fi ;;
46   -) break   -v) shift; S_PVER="$1"; if [[ -z ${S_PVER} ]]; then print_usage; exit 1; fi ;;
47   ;;   -b) shift; S_PBUILD="$1"; if [[ -z ${S_PBUILD} ]]; then print_usage; exit 1; fi ;;
48     -i) GET_INVENTORY="1" ;;
49   *)   -f) SEARCH_ONLY_PATH="1"; shift; SEARCH_PATH="$1"; if [[ -z ${SEARCH_PATH} ]]; then print_usage; exit 1; fi ;;
50   print_usage   -e) SEARCH_ONLY_PATH="1"; SEARCH_EXACT_FILENAME="1"; shift; SEARCH_PATH="$1"; if [[ -z ${SEARCH_PATH} ]]; then print_usage; exit 1; fi  ;;
51   exit 1   -c) SEARCH_ONLY_CAT="1"; shift; SEARCH_CAT="$1"; if [[ -z ${SEARCH_CAT} ]]; then print_usage; exit 1; fi ;;
52   ;;   -h) print_usage; exit 0 ;;
53     -*) print_usage; exit 1 ;;
54   esac   esac
55     shift
56  done  done
 shift $(($OPTIND - 1))  
57    
58    source /etc/mage.rc.global
59  source /etc/mage.rc  source ${MAGERC}
60  RETVAL=1  RETVAL=1
61    
62  for i in ${INSTALLDB}/*/*  if [[ ${SEARCH_ONLY_PATH} = 1 ]]
63    then
64     unset S_PACKAGES
65     unset i pkg
66     if [[ ${SEARCH_EXACT_FILENAME} = 1 ]]
67     then
68     # fix ++, which gets interpreted as a regex
69     SEARCH_PATH="${SEARCH_PATH//+/\\+}"
70     # fix [, which gets interpreted as a regex
71     SEARCH_PATH="${SEARCH_PATH//[/\\[}"
72     S_CANDIDATES=$(egrep -rl "^${SEARCH_PATH}§" ${INSTALLDB})
73     else
74     S_CANDIDATES=$(fgrep -rl "${SEARCH_PATH}" ${INSTALLDB})
75     fi
76     for i in ${S_CANDIDATES}
77     do
78     # ignore magefiles!
79     case ${i} in
80     *.mage) continue ;;
81     esac
82    
83     # print categorie and pkgname
84     pkg="$(basename ${i%/*/*})/$(basename ${i%/*})"
85     if [[ -z $(echo ${S_PACKAGES} | grep ${pkg}) ]]
86     then
87     S_PACKAGES="${S_PACKAGES} ${pkg}"
88     fi
89     done
90    
91     # show packages
92     for pkg in ${S_PACKAGES}
93     do
94     echo "${pkg}"
95     done
96    
97     exit 0
98    fi
99    
100    if [[ ${SEARCH_ONLY_CAT} = 1 ]]
101    then
102     # no packages of SEARCH_CAT are installed
103     [[ ! -d ${MROOT}${INSTALLDB}/${SEARCH_CAT} ]] && exit 1
104     find ${MROOT}${INSTALLDB}/${SEARCH_CAT} -maxdepth 1 -mindepth 1 -printf "${SEARCH_CAT}/%P\n" | sort
105    
106     exit 0
107    fi
108    
109    # generate multidim array
110    declare -i INSTALL_DATABASE_COUNT=0
111    for line in $(find ${MROOT}${INSTALLDB} -maxdepth 2 -mindepth 2 -printf '%P\n' | sort)
112  do  do
113   INST_PNAME=no   INSTALL_DATABASE_PCAT[${INSTALL_DATABASE_COUNT}]="${line%/*}"
114   INST_PVER=no   pkgname="${line#*/}"
115   INST_PBUILD=no   INSTALL_DATABASE_PNAME[${INSTALL_DATABASE_COUNT}]="${pkgname%-*-*}"
116     pkgversion="${pkgname//${pkgname%-*-*}-}"
117   x=$(basename ${i})   INSTALL_DATABASE_PVER[${INSTALL_DATABASE_COUNT}]="${pkgversion%-*}"
118   PNAME=${x%-*-*}   INSTALL_DATABASE_PBUILD[${INSTALL_DATABASE_COUNT}]="${pkgname##*-}"
119   PVER=$(echo ${x#${PNAME}-}| cut -d- -f1)   (( INSTALL_DATABASE_COUNT++ ))
120   PBUILD=$(echo ${x#${PNAME}-}| cut -d- -f2)  done
121    
122   if [[ ${PNAME} == ${S_PNAME} ]]  if [[ ${GET_INVENTORY} = 1 ]]
123    then
124     # build the list first
125     for ((i=0; i<INSTALL_DATABASE_COUNT; i++))
126     do
127     echo "${INSTALL_DATABASE_PCAT[${i}]}/${INSTALL_DATABASE_PNAME[${i}]}-${INSTALL_DATABASE_PVER[${i}]}-${INSTALL_DATABASE_PBUILD[${i}]}"
128     done
129    
130     exit 0
131    fi
132    
133    for ((i=0; i<INSTALL_DATABASE_COUNT; i++))
134    do
135     if [[ ${INSTALL_DATABASE_PNAME[${i}]} == ${S_PNAME} ]]
136   then   then
137   INST_PNAME=yes   INST_PNAME=1
138    
139   if [ -n "${S_PVER}" ]   if [[ -n ${S_PVER} ]]
140   then   then
141   if [[ ${PVER} == ${S_PVER} ]]   if [[ ${INSTALL_DATABASE_PVER[${i}]} == ${S_PVER} ]]
142   then   then
143   INST_PVER=yes   INST_PVER=1
144   fi   fi
145    
146   if [ -n "${S_PBUILD}" ]   if [[ -n ${S_PBUILD} ]]
147   then   then
148   if [[ ${PBUILD} == ${S_PBUILD} ]]   if [[ ${INSTALL_DATABASE_PBUILD[${i}]} == ${S_PBUILD} ]]
149   then   then
150   INST_PBUILD=yes   INST_PBUILD=1
151   fi   fi
152   fi   fi
153   fi   fi
154    
155   # search for pname only   # search for pname only
156   if [ -n "${S_PNAME}" -a -z "${S_PVER}" -a -z "${S_PBUILD}" ]   if [[ -n ${S_PNAME} ]] && [[ -z ${S_PVER} ]] && [[ -z ${S_PBUILD} ]]
157   then   then
158   if [ "${INST_PNAME}" = yes ]   if [[ ${INST_PNAME} = 1 ]]
159   then   then
160   echo "${S_PNAME} is installed [ ${PNAME}-${PVER}-${PBUILD} ]"   echo "${S_PNAME} is installed [ ${INSTALL_DATABASE_PCAT[${i}]}/${INSTALL_DATABASE_PNAME[${i}]}-${INSTALL_DATABASE_PVER[${i}]}-${INSTALL_DATABASE_PBUILD[${i}]} ]"
161   RETVAL=0   RETVAL=0
162   break   break
163   fi   fi
164   fi   fi
165    
166   # search for pname and pver   # search for pname and pver
167   if [ -n "${S_PNAME}" -a -n "${S_PVER}" -a -z "${S_PBUILD}" ]   if [[ -n ${S_PNAME} ]] && [[ -n ${S_PVER} ]] && [[ -z ${S_PBUILD} ]]
168   then   then
169   if [ "${INST_PNAME}" = "yes" -a "${INST_PVER}" = "yes" ]   if [[ ${INST_PNAME} = 1 ]] && [[ ${INST_PVER} = 1 ]]
170   then   then
171   echo "${S_PNAME}-${S_PVER} is installed [ ${PNAME}-${PVER}-${PBUILD} ]"   echo "${S_PNAME}-${S_PVER} is installed [ ${INSTALL_DATABASE_PCAT[${i}]}/${INSTALL_DATABASE_PNAME[${i}]}-${INSTALL_DATABASE_PVER[${i}]}-${INSTALL_DATABASE_PBUILD[${i}]} ]"
172   RETVAL=0   RETVAL=0
173   break   break
174   fi   fi
175   fi   fi
176    
177   # search for pname, pver and pbuild   # search for pname, pver and pbuild
178   if [ -n "${S_PNAME}" -a -n "${S_PVER}" -a -n "${S_PBUILD}" ]   if [[ -n ${S_PNAME} ]] && [[ -n ${S_PVER} ]] && [[ -n ${S_PBUILD} ]]
179   then   then
180   if [ "${INST_PNAME}" = "yes" -a "${INST_PVER}" = "yes"  -a "${INST_PBUILD}" = "yes" ]   if [[ ${INST_PNAME} = 1 ]] && [[ ${INST_PVER} = 1 ]] && [[ ${INST_PBUILD} = 1 ]]
181   then   then
182   echo "${S_PNAME}-${S_PVER}-${S_PBUILD} is installed [ ${PNAME}-${PVER}-${PBUILD} ]"   echo "${S_PNAME}-${S_PVER}-${S_PBUILD} is installed [ ${INSTALL_DATABASE_PCAT[${i}]}/${INSTALL_DATABASE_PNAME[${i}]}-${INSTALL_DATABASE_PVER[${i}]}-${INSTALL_DATABASE_PBUILD[${i}]} ]"
183   RETVAL=0   RETVAL=0
184   break   break
185   fi   fi

Legend:
Removed from v.33  
changed lines
  Added in v.3095