Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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