Contents of /tags/mage-0_4_113/usr/lib/mage/magequery.sh
Parent Directory | Revision Log
Revision 1509 -
(show annotations)
(download)
(as text)
Tue Aug 30 14:17:45 2011 UTC (13 years, 1 month ago) by niro
Original Path: trunk/mage/usr/lib/mage/magequery.sh
File MIME type: application/x-sh
File size: 4261 byte(s)
Tue Aug 30 14:17:45 2011 UTC (13 years, 1 month ago) by niro
Original Path: trunk/mage/usr/lib/mage/magequery.sh
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} |