Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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