Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1540 - (show annotations) (download) (as text)
Tue Dec 20 12:50:13 2011 UTC (12 years, 4 months ago) by niro
File MIME type: application/x-sh
File size: 4344 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 # fix [, which gets interpreted as a regex
68 SEARCH_PATH="${SEARCH_PATH//[/\\[}"
69 S_CANDIDATES=$(egrep -rl "^${SEARCH_PATH}§" ${INSTALLDB})
70 else
71 S_CANDIDATES=$(fgrep -rl "${SEARCH_PATH}" ${INSTALLDB})
72 fi
73 for i in ${S_CANDIDATES}
74 do
75 # ignore magefiles!
76 case ${i} in
77 *.mage) continue ;;
78 esac
79
80 # print categorie and pkgname
81 pkg="$(basename ${i%/*/*})/$(basename ${i%/*})"
82 if [[ -z $(echo ${S_PACKAGES} | grep ${pkg}) ]]
83 then
84 S_PACKAGES="${S_PACKAGES} ${pkg}"
85 fi
86 done
87
88 # show packages
89 for pkg in ${S_PACKAGES}
90 do
91 echo "${pkg}"
92 done
93
94 exit 0
95 fi
96
97 if [[ ${SEARCH_ONLY_CAT} = true ]]
98 then
99 # no packages of SEARCH_CAT are installed
100 [[ ! -d ${MROOT}${INSTALLDB}/${SEARCH_CAT} ]] && exit 1
101
102 for i in ${INSTALLDB}/${SEARCH_CAT}/*
103 do
104 # print categorie and pkgname
105 echo "$(basename ${i%/*})/$(basename ${i})"
106 done
107
108 exit 0
109 fi
110
111 if [[ ${GET_INVENTORY} = true ]]
112 then
113 for package in $(find ${MROOT}${INSTALLDB} -mindepth 2 -maxdepth 2 -type d -printf "%h,%f\n" | sort)
114 do
115 pcat="$(basename $(echo ${package} | cut -d, -f1))"
116 pname="$(echo ${package} | cut -d, -f2)"
117 if [[ -z ${invlist} ]]
118 then
119 invlist="${pcat}/${pname}"
120 else
121 invlist="${invlist}
122 ${pcat}/${pname}"
123 fi
124 done
125
126 # now show the list
127 echo "${invlist}"
128 exit 0
129 fi
130
131 for i in ${MROOT}${INSTALLDB}/*/*
132 do
133 INST_PNAME=no
134 INST_PVER=no
135 INST_PBUILD=no
136
137 x=$(basename ${i})
138 PNAME=${x%-*-*}
139 PVER=$(echo ${x#${PNAME}-} | cut -d- -f1)
140 PBUILD=$(echo ${x#${PNAME}-} | cut -d- -f2)
141
142 if [[ ${PNAME} == ${S_PNAME} ]]
143 then
144 INST_PNAME=yes
145
146 if [[ -n ${S_PVER} ]]
147 then
148 if [[ ${PVER} == ${S_PVER} ]]
149 then
150 INST_PVER=yes
151 fi
152
153 if [[ -n ${S_PBUILD} ]]
154 then
155 if [[ ${PBUILD} == ${S_PBUILD} ]]
156 then
157 INST_PBUILD=yes
158 fi
159 fi
160 fi
161
162 # search for pname only
163 if [[ -n ${S_PNAME} ]] && [[ -z ${S_PVER} ]] && [[ -z ${S_PBUILD} ]]
164 then
165 if [[ ${INST_PNAME} = yes ]]
166 then
167 echo "${S_PNAME} is installed [ ${PNAME}-${PVER}-${PBUILD} ]"
168 RETVAL=0
169 break
170 fi
171 fi
172
173 # search for pname and pver
174 if [[ -n ${S_PNAME} ]] && [[ -n ${S_PVER} ]] && [[ -z ${S_PBUILD} ]]
175 then
176 if [[ ${INST_PNAME} = yes ]] && [[ ${INST_PVER} = yes ]]
177 then
178 echo "${S_PNAME}-${S_PVER} is installed [ ${PNAME}-${PVER}-${PBUILD} ]"
179 RETVAL=0
180 break
181 fi
182 fi
183
184 # search for pname, pver and pbuild
185 if [[ -n ${S_PNAME} ]] && [[ -n ${S_PVER} ]] && [[ -n ${S_PBUILD} ]]
186 then
187 if [[ ${INST_PNAME} = yes ]] && [[ ${INST_PVER} = yes ]] && [[ ${INST_PBUILD} = yes ]]
188 then
189 echo "${S_PNAME}-${S_PVER}-${S_PBUILD} is installed [ ${PNAME}-${PVER}-${PBUILD} ]"
190 RETVAL=0
191 break
192 fi
193 fi
194 fi
195 done
196
197 exit ${RETVAL}