Contents of /branches/mage-next/src/magequery.in
Parent Directory | Revision Log
Revision 1288 -
(show annotations)
(download)
(as text)
Thu May 12 21:28:23 2011 UTC (13 years, 4 months ago) by niro
Original Path: trunk/mage/usr/lib/mage/magequery.sh
File MIME type: application/x-sh
File size: 3879 byte(s)
Thu May 12 21:28:23 2011 UTC (13 years, 4 months ago) by niro
Original Path: trunk/mage/usr/lib/mage/magequery.sh
File MIME type: application/x-sh
File size: 3879 byte(s)
-ignore included mage files
1 | #!/bin/bash |
2 | |
3 | #query mage database for installed packages |
4 | # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/magequery.sh,v 1.13 2008-10-05 10:33:04 niro Exp $ |
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 package names in given path" |
16 | echo |
17 | echo " Examples:" |
18 | echo |
19 | echo " $(basename $0 .sh) -n xorg -v 6.8.0 -b r1" |
20 | echo " searches for package xorg-6.8.0-r1" |
21 | echo |
22 | } |
23 | |
24 | # default args: |
25 | GET_INVENTORY=false |
26 | SEARCH_ONLY_PATH=false |
27 | SEARCH_ONLY_CAT=false |
28 | |
29 | while getopts "n:v:b:f:c:hi-" opt |
30 | do |
31 | case "${opt}" in |
32 | n) |
33 | S_PNAME="${OPTARG}" |
34 | ;; |
35 | |
36 | v) |
37 | S_PVER="${OPTARG}" |
38 | ;; |
39 | |
40 | b) |
41 | S_PBUILD="${OPTARG}" |
42 | ;; |
43 | i) |
44 | GET_INVENTORY="true" |
45 | ;; |
46 | f) |
47 | SEARCH_ONLY_PATH="true" |
48 | SEARCH_PATH="${OPTARG}" |
49 | ;; |
50 | c) |
51 | SEARCH_ONLY_CAT="true" |
52 | SEARCH_CAT="${OPTARG}" |
53 | ;; |
54 | h) |
55 | print_usage |
56 | exit 0 |
57 | ;; |
58 | |
59 | -) break |
60 | ;; |
61 | |
62 | *) |
63 | print_usage |
64 | exit 1 |
65 | ;; |
66 | esac |
67 | done |
68 | shift $(($OPTIND - 1)) |
69 | |
70 | source /etc/mage.rc.global |
71 | source /etc/mage.rc |
72 | RETVAL=1 |
73 | |
74 | if [[ ${SEARCH_ONLY_PATH} = true ]] |
75 | then |
76 | unset S_PACKAGES |
77 | unset i pkg |
78 | for i in $(fgrep -rl "${SEARCH_PATH}" ${INSTALLDB}) |
79 | do |
80 | # ignore magefiles! |
81 | case ${i} in |
82 | *.mage) continue ;; |
83 | esac |
84 | |
85 | # print categorie and pkgname |
86 | pkg="$(basename ${i%/*/*})/$(basename ${i%/*})" |
87 | if [[ -z $(echo ${S_PACKAGES} | grep ${pkg}) ]] |
88 | then |
89 | S_PACKAGES="${S_PACKAGES} ${pkg}" |
90 | fi |
91 | done |
92 | |
93 | # show packages |
94 | for pkg in ${S_PACKAGES} |
95 | do |
96 | echo "${pkg}" |
97 | done |
98 | |
99 | exit 0 |
100 | fi |
101 | |
102 | if [[ ${SEARCH_ONLY_CAT} = true ]] |
103 | then |
104 | # no packages of SEARCH_CAT are installed |
105 | [[ ! -d ${MROOT}${INSTALLDB}/${SEARCH_CAT} ]] && exit 1 |
106 | |
107 | for i in ${INSTALLDB}/${SEARCH_CAT}/* |
108 | do |
109 | # print categorie and pkgname |
110 | echo "$(basename ${i%/*})/$(basename ${i})" |
111 | done |
112 | |
113 | exit 0 |
114 | fi |
115 | |
116 | if [[ ${GET_INVENTORY} = true ]] |
117 | then |
118 | for package in $(find ${MROOT}${INSTALLDB} -mindepth 2 -maxdepth 2 -type d -printf "%h,%f\n" | sort) |
119 | do |
120 | pcat="$(basename $(echo ${package} | cut -d, -f1))" |
121 | pname="$(echo ${package} | cut -d, -f2)" |
122 | if [ -z "${invlist}" ] |
123 | then |
124 | invlist="${pcat}/${pname}" |
125 | else |
126 | invlist="${invlist} |
127 | ${pcat}/${pname}" |
128 | fi |
129 | done |
130 | |
131 | # now show the list |
132 | echo "${invlist}" |
133 | exit 0 |
134 | fi |
135 | |
136 | for i in ${MROOT}${INSTALLDB}/*/* |
137 | do |
138 | INST_PNAME=no |
139 | INST_PVER=no |
140 | INST_PBUILD=no |
141 | |
142 | x=$(basename ${i}) |
143 | PNAME=${x%-*-*} |
144 | PVER=$(echo ${x#${PNAME}-}| cut -d- -f1) |
145 | PBUILD=$(echo ${x#${PNAME}-}| cut -d- -f2) |
146 | |
147 | if [[ ${PNAME} == ${S_PNAME} ]] |
148 | then |
149 | INST_PNAME=yes |
150 | |
151 | if [ -n "${S_PVER}" ] |
152 | then |
153 | if [[ ${PVER} == ${S_PVER} ]] |
154 | then |
155 | INST_PVER=yes |
156 | fi |
157 | |
158 | if [ -n "${S_PBUILD}" ] |
159 | then |
160 | if [[ ${PBUILD} == ${S_PBUILD} ]] |
161 | then |
162 | INST_PBUILD=yes |
163 | fi |
164 | fi |
165 | fi |
166 | |
167 | # search for pname only |
168 | if [ -n "${S_PNAME}" -a -z "${S_PVER}" -a -z "${S_PBUILD}" ] |
169 | then |
170 | if [ "${INST_PNAME}" = yes ] |
171 | then |
172 | echo "${S_PNAME} is installed [ ${PNAME}-${PVER}-${PBUILD} ]" |
173 | RETVAL=0 |
174 | break |
175 | fi |
176 | fi |
177 | |
178 | # search for pname and pver |
179 | if [ -n "${S_PNAME}" -a -n "${S_PVER}" -a -z "${S_PBUILD}" ] |
180 | then |
181 | if [ "${INST_PNAME}" = "yes" -a "${INST_PVER}" = "yes" ] |
182 | then |
183 | echo "${S_PNAME}-${S_PVER} is installed [ ${PNAME}-${PVER}-${PBUILD} ]" |
184 | RETVAL=0 |
185 | break |
186 | fi |
187 | fi |
188 | |
189 | # search for pname, pver and pbuild |
190 | if [ -n "${S_PNAME}" -a -n "${S_PVER}" -a -n "${S_PBUILD}" ] |
191 | then |
192 | if [ "${INST_PNAME}" = "yes" -a "${INST_PVER}" = "yes" -a "${INST_PBUILD}" = "yes" ] |
193 | then |
194 | echo "${S_PNAME}-${S_PVER}-${S_PBUILD} is installed [ ${PNAME}-${PVER}-${PBUILD} ]" |
195 | RETVAL=0 |
196 | break |
197 | fi |
198 | fi |
199 | fi |
200 | done |
201 | |
202 | exit ${RETVAL} |