Contents of /trunk/mage/usr/lib/mage/magequery.sh
Parent Directory | Revision Log
Revision 1290 -
(show annotations)
(download)
(as text)
Thu May 12 22:20:59 2011 UTC (13 years, 1 month ago) by niro
File MIME type: application/x-sh
File size: 3831 byte(s)
Thu May 12 22:20:59 2011 UTC (13 years, 1 month ago) by niro
File MIME type: application/x-sh
File size: 3831 byte(s)
-reworked magequery getopts and fixed coding style
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 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 | # no params given, or is only an arg not ar param, exit |
30 | if [[ $# -lt 1 ]] || [[ ${1:0:1} != - ]] |
31 | then |
32 | print_usage |
33 | exit 1 |
34 | fi |
35 | |
36 | # very basic getops |
37 | for i in $* |
38 | do |
39 | case $1 in |
40 | -n) shift; S_PNAME="$1" ;; |
41 | -v) shift; S_PVER="$1" ;; |
42 | -b) shift; S_PBUILD="$1" ;; |
43 | -i) GET_INVENTORY="true" ;; |
44 | -f) SEARCH_ONLY_PATH="true"; shift; SEARCH_PATH="$1" ;; |
45 | -c) SEARCH_ONLY_CAT="true"; shift; SEARCH_CAT="$1" ;; |
46 | -h) print_usage; exit 0 ;; |
47 | -*) print_usage; exit 1 ;; |
48 | esac |
49 | shift |
50 | done |
51 | |
52 | source /etc/mage.rc.global |
53 | source /etc/mage.rc |
54 | RETVAL=1 |
55 | |
56 | if [[ ${SEARCH_ONLY_PATH} = true ]] |
57 | then |
58 | unset S_PACKAGES |
59 | unset i pkg |
60 | for i in $(fgrep -rl "${SEARCH_PATH}" ${INSTALLDB}) |
61 | do |
62 | # ignore magefiles! |
63 | case ${i} in |
64 | *.mage) continue ;; |
65 | esac |
66 | |
67 | # print categorie and pkgname |
68 | pkg="$(basename ${i%/*/*})/$(basename ${i%/*})" |
69 | if [[ -z $(echo ${S_PACKAGES} | grep ${pkg}) ]] |
70 | then |
71 | S_PACKAGES="${S_PACKAGES} ${pkg}" |
72 | fi |
73 | done |
74 | |
75 | # show packages |
76 | for pkg in ${S_PACKAGES} |
77 | do |
78 | echo "${pkg}" |
79 | done |
80 | |
81 | exit 0 |
82 | fi |
83 | |
84 | if [[ ${SEARCH_ONLY_CAT} = true ]] |
85 | then |
86 | # no packages of SEARCH_CAT are installed |
87 | [[ ! -d ${MROOT}${INSTALLDB}/${SEARCH_CAT} ]] && exit 1 |
88 | |
89 | for i in ${INSTALLDB}/${SEARCH_CAT}/* |
90 | do |
91 | # print categorie and pkgname |
92 | echo "$(basename ${i%/*})/$(basename ${i})" |
93 | done |
94 | |
95 | exit 0 |
96 | fi |
97 | |
98 | if [[ ${GET_INVENTORY} = true ]] |
99 | then |
100 | for package in $(find ${MROOT}${INSTALLDB} -mindepth 2 -maxdepth 2 -type d -printf "%h,%f\n" | sort) |
101 | do |
102 | pcat="$(basename $(echo ${package} | cut -d, -f1))" |
103 | pname="$(echo ${package} | cut -d, -f2)" |
104 | if [[ -z ${invlist} ]] |
105 | then |
106 | invlist="${pcat}/${pname}" |
107 | else |
108 | invlist="${invlist} |
109 | ${pcat}/${pname}" |
110 | fi |
111 | done |
112 | |
113 | # now show the list |
114 | echo "${invlist}" |
115 | exit 0 |
116 | fi |
117 | |
118 | for i in ${MROOT}${INSTALLDB}/*/* |
119 | do |
120 | INST_PNAME=no |
121 | INST_PVER=no |
122 | INST_PBUILD=no |
123 | |
124 | x=$(basename ${i}) |
125 | PNAME=${x%-*-*} |
126 | PVER=$(echo ${x#${PNAME}-} | cut -d- -f1) |
127 | PBUILD=$(echo ${x#${PNAME}-} | cut -d- -f2) |
128 | |
129 | if [[ ${PNAME} == ${S_PNAME} ]] |
130 | then |
131 | INST_PNAME=yes |
132 | |
133 | if [[ -n ${S_PVER} ]] |
134 | then |
135 | if [[ ${PVER} == ${S_PVER} ]] |
136 | then |
137 | INST_PVER=yes |
138 | fi |
139 | |
140 | if [[ -n ${S_PBUILD} ]] |
141 | then |
142 | if [[ ${PBUILD} == ${S_PBUILD} ]] |
143 | then |
144 | INST_PBUILD=yes |
145 | fi |
146 | fi |
147 | fi |
148 | |
149 | # search for pname only |
150 | if [[ -n ${S_PNAME} ]] && [[ -z ${S_PVER} ]] && [[ -z ${S_PBUILD} ]] |
151 | then |
152 | if [[ ${INST_PNAME} = yes ]] |
153 | then |
154 | echo "${S_PNAME} is installed [ ${PNAME}-${PVER}-${PBUILD} ]" |
155 | RETVAL=0 |
156 | break |
157 | fi |
158 | fi |
159 | |
160 | # search for pname and pver |
161 | if [[ -n ${S_PNAME} ]] && [[ -n ${S_PVER} ]] && [[ -z ${S_PBUILD} ]] |
162 | then |
163 | if [[ ${INST_PNAME} = yes ]] && [[ ${INST_PVER} = yes ]] |
164 | then |
165 | echo "${S_PNAME}-${S_PVER} is installed [ ${PNAME}-${PVER}-${PBUILD} ]" |
166 | RETVAL=0 |
167 | break |
168 | fi |
169 | fi |
170 | |
171 | # search for pname, pver and pbuild |
172 | if [[ -n ${S_PNAME} ]] && [[ -n ${S_PVER} ]] && [[ -n ${S_PBUILD} ]] |
173 | then |
174 | if [[ ${INST_PNAME} = yes ]] && [[ ${INST_PVER} = yes ]] && [[ ${INST_PBUILD} = yes ]] |
175 | then |
176 | echo "${S_PNAME}-${S_PVER}-${S_PBUILD} is installed [ ${PNAME}-${PVER}-${PBUILD} ]" |
177 | RETVAL=0 |
178 | break |
179 | fi |
180 | fi |
181 | fi |
182 | done |
183 | |
184 | exit ${RETVAL} |