rev |
line source |
pankso@230
|
1 #!/bin/sh
|
pankso@230
|
2 # Tiny CGI search engine for SliTaz packages on http://pkgs.slitaz.org/
|
pankso@230
|
3 # Christophe Lincoln <pankso@slitaz.org>
|
pankso@230
|
4 #
|
pankso@230
|
5
|
pankso@230
|
6 renice 20
|
pankso@230
|
7 read QUERY_STRING
|
pankso@230
|
8 for i in $(echo $QUERY_STRING | sed 's/&/ /g'); do
|
pankso@230
|
9 i=$(httpd -d $i)
|
pankso@230
|
10 eval $i
|
pankso@230
|
11 done
|
pankso@230
|
12 LANG=$lang
|
pankso@230
|
13 SEARCH=$query
|
pankso@230
|
14 SLITAZ_VERSION=$version
|
pankso@230
|
15 OBJECT=$object
|
pankso@231
|
16 DATE=$(date +%Y-%m-%d\ %H:%M:%S)
|
pankso@230
|
17 VERSION=cooking
|
pankso@239
|
18
|
pankso@230
|
19 if [ "$REQUEST_METHOD" = "GET" ]; then
|
pankso@230
|
20 SEARCH=""
|
pankso@230
|
21 VERBOSE=0
|
pankso@230
|
22 for i in $(echo $REQUEST_URI | sed 's/[?&]/ /g'); do
|
pankso@230
|
23 # i=$(httpd -d $i)
|
pankso@230
|
24 SLITAZ_VERSION=cooking
|
pankso@230
|
25 case "$(echo $i | tr [A-Z] [a-z])" in
|
pankso@230
|
26 query=*|search=*)
|
pankso@230
|
27 [ ${i#*=} == Search ] || SEARCH=${i#*=};;
|
pankso@230
|
28 object=*)
|
pankso@230
|
29 OBJECT=${i#*=};;
|
pankso@230
|
30 verbose=*)
|
pankso@230
|
31 VERBOSE=${i#*=};;
|
pankso@230
|
32 lang=*)
|
pankso@230
|
33 LANG=${i#*=};;
|
pankso@230
|
34 file=*)
|
pankso@230
|
35 SEARCH=${i#*=}
|
pankso@230
|
36 OBJECT=File;;
|
pankso@230
|
37 desc=*)
|
pankso@230
|
38 SEARCH=${i#*=}
|
pankso@230
|
39 OBJECT=Desc;;
|
pankso@230
|
40 tags=*)
|
pankso@230
|
41 SEARCH=${i#*=}
|
pankso@230
|
42 OBJECT=Tags;;
|
pankso@230
|
43 receipt=*)
|
pankso@230
|
44 SEARCH=${i#*=}
|
pankso@230
|
45 OBJECT=Receipt;;
|
pankso@230
|
46 filelist=*)
|
pankso@230
|
47 SEARCH=${i#*=}
|
pankso@230
|
48 OBJECT=File_list;;
|
pankso@230
|
49 package=*)
|
pankso@230
|
50 SEARCH=${i#*=}
|
pankso@230
|
51 OBJECT=Package;;
|
pankso@230
|
52 depends=*)
|
pankso@230
|
53 SEARCH=${i#*=}
|
pankso@230
|
54 OBJECT=Depends;;
|
pankso@230
|
55 builddepends=*)
|
pankso@230
|
56 SEARCH=${i#*=}
|
pankso@230
|
57 OBJECT=BuildDepends;;
|
pankso@230
|
58 fileoverlap=*)
|
pankso@230
|
59 SEARCH=${i#*=}
|
pankso@230
|
60 OBJECT=FileOverlap;;
|
pankso@230
|
61 version=s*|version=3*)
|
pankso@230
|
62 SLITAZ_VERSION=stable;;
|
pankso@230
|
63 version=[1-9]*)
|
pankso@230
|
64 i=${i%%.*}
|
pankso@230
|
65 SLITAZ_VERSION=${i#*=}.0;;
|
pankso@230
|
66 version=u*)
|
pankso@230
|
67 SLITAZ_VERSION=undigest;;
|
pankso@230
|
68 esac
|
pankso@230
|
69 done
|
pankso@230
|
70 [ -n "$SEARCH" ] && REQUEST_METHOD="POST"
|
pankso@230
|
71 [ "$SEARCH" == "." ] && SEARCH=
|
pankso@230
|
72 fi
|
pankso@230
|
73
|
pankso@230
|
74 case "$OBJECT" in
|
pankso@230
|
75 File) selected_file="selected";;
|
pankso@230
|
76 Desc) selected_desc="selected";;
|
pankso@230
|
77 Tags) selected_tags="selected";;
|
pankso@230
|
78 Receipt) selected_receipt="selected";;
|
pankso@230
|
79 File_list) selected_file_list="selected";;
|
pankso@230
|
80 Depends) selected_depends="selected";;
|
pankso@230
|
81 BuildDepends) selected_build_depends="selected";;
|
pankso@230
|
82 FileOverlap) selected_overlap="selected";;
|
pankso@230
|
83 esac
|
pankso@230
|
84
|
pankso@230
|
85 case "$SLITAZ_VERSION" in
|
pankso@230
|
86 tiny) selected_tiny="selected";;
|
pankso@230
|
87 1.0) selected_1="selected";;
|
pankso@230
|
88 2.0) selected_2="selected";;
|
pankso@230
|
89 stable) selected_stable="selected";;
|
pankso@230
|
90 undigest) selected_undigest="selected";;
|
pankso@230
|
91 esac
|
pankso@230
|
92
|
pankso@230
|
93 # unescape query
|
pankso@230
|
94 SEARCH="$(echo $SEARCH | sed 's/%2B/+/g' | sed 's/%3A/:/g' | sed 's|%2F|/|g')"
|
pankso@230
|
95
|
pankso@230
|
96 if [ -z "$LANG" ]; then
|
pankso@230
|
97 for i in $(echo $HTTP_ACCEPT_LANGUAGE | sed 's/[,;]/ /g'); do
|
pankso@230
|
98 case "$i" in
|
al@236
|
99 fr|de|pt|ru|cn)
|
pankso@230
|
100 LANG=$i
|
pankso@230
|
101 break;;
|
pankso@230
|
102 esac
|
pankso@230
|
103 done
|
pankso@230
|
104 fi
|
pankso@230
|
105
|
al@236
|
106 # --- Search form
|
al@236
|
107 _package="Package"
|
al@236
|
108 _desc="Description"
|
al@236
|
109 _tags="Tags"
|
al@236
|
110 _receipt="Receipt"
|
al@236
|
111 _depends="Depends"
|
al@236
|
112 _bdepends="Build depends"
|
al@236
|
113 _file="File"
|
al@236
|
114 _file_list="File list"
|
al@236
|
115 _overlap="common files"
|
al@236
|
116 _cooking="cooking"
|
al@236
|
117 _search="Search"
|
al@236
|
118 # --- Titles
|
al@236
|
119 _noresult="No package $SEARCH"
|
al@236
|
120 _search_title="Search"
|
al@236
|
121 _depends_loops="Depends loops"
|
al@236
|
122 _deptree="Dependency tree for: $SEARCH"
|
al@236
|
123 _deptree_suggested="$_deptree (SUGGESTED)"
|
al@236
|
124 _rdeptree="Reverse dependency tree for: $SEARCH"
|
al@236
|
125 _bdepends_loops="Build depends loops"
|
al@236
|
126 _bdeplist="$SEARCH needs these packages to be built"
|
al@236
|
127 _rbdeplist="Packages who need $SEARCH to be built"
|
al@236
|
128 _overloading="Theses packages may overload files of $SEARCH"
|
al@236
|
129 _result="Result for: $SEARCH"
|
al@236
|
130 _result_providing="$_result (package providing %VPKG%)"
|
al@236
|
131 # --- Messages
|
al@236
|
132 _main_libs_warn="glibc-base and gcc-lib-base are implicit dependencies, <b>every</b> package is supposed to depend on them."
|
al@236
|
133 _description="description"
|
al@236
|
134 _pkgs_report="%PKGS% packages and %FILES% files in $SLITAZ_VERSION database"
|
al@236
|
135 # --- HTML Header
|
al@236
|
136 _h_title="SliTaz Packages - Search %SEARCH%"
|
pankso@230
|
137
|
pankso@230
|
138 case "$LANG" in
|
pankso@230
|
139
|
al@236
|
140 fr) _package="Paquet"
|
al@236
|
141 # _desc=
|
al@236
|
142 # _tags=
|
al@236
|
143 _receipt="Recette"
|
pascal@238
|
144 _depends="Dépendances"
|
al@236
|
145 _bdepends="Fabrication"
|
al@236
|
146 _file="Fichier"
|
al@236
|
147 _file_list="Liste des fichiers"
|
al@236
|
148 _overlap="Fichiers communs"
|
al@236
|
149 # _cooking=
|
al@236
|
150 _search="Recherche"
|
pankso@230
|
151
|
al@236
|
152 _noresult="Paquet $SEARCH introuvable"
|
al@236
|
153 _search_title="Search"
|
pascal@238
|
154 _depends_loops="Dépendances sans fin"
|
pascal@238
|
155 _deptree="Arbre des dépendances de $SEARCH"
|
al@236
|
156 _deptree_suggested="$_deptree (SUGGESTED)"
|
pascal@238
|
157 _rdeptree="Arbre inversé des dépendances de $SEARCH"
|
al@236
|
158 _bdepends_loops="Fabrication sans fin"
|
pascal@238
|
159 _bdeplist="$SEARCH a besion de ces paquets pour être fabriqué"
|
pascal@238
|
160 _rbdeplist="Paquets ayant besion de $SEARCH pour être fabriqués"
|
pascal@238
|
161 _overloading="Paquets pouvant écraser des fichiers de $SEARCH"
|
al@236
|
162 _result="Recherche de : $SEARCH"
|
al@236
|
163 _result_providing="$_result (package providing %VPKG%)"
|
pankso@230
|
164
|
al@236
|
165 _main_libs_warn=" glibc-base and gcc-lib-base are implicit dependencies,
|
al@236
|
166 <b>every</b> package is supposed to depend on them."
|
al@236
|
167 _description="description"
|
al@236
|
168 _pkgs_report="%PKGS% packages and %FILES% files in $SLITAZ_VERSION database"
|
al@236
|
169 ;;
|
pankso@230
|
170
|
al@236
|
171 de) _package="Paket"
|
al@236
|
172 _desc="Beschreibung"
|
al@236
|
173 # _tags=
|
al@236
|
174 # _receipt=
|
al@236
|
175 _depends="Abhängigkeiten"
|
al@236
|
176 # _bdepends=
|
al@236
|
177 _file="Datei"
|
al@236
|
178 _file_list="Datei liste"
|
al@236
|
179 # _overlap=
|
al@236
|
180 _cooking="Cooking"
|
al@236
|
181 _search="Suche"
|
al@236
|
182
|
al@236
|
183 _noresult="Kein Paket für $SEARCH"
|
al@236
|
184 _search_title="Search"
|
al@236
|
185 _depends_loops="Abhängigkeiten loops"
|
al@236
|
186 _deptree="Abhängigkeiten von: $SEARCH"
|
al@236
|
187 _deptree_suggested="$_deptree (SUGGESTED)"
|
al@236
|
188 _rdeptree="Abhängigkeit für: $SEARCH"
|
al@236
|
189 # _bdepends_loops=
|
al@236
|
190 # _bdeplist=
|
al@236
|
191 # _rbdeplist=
|
al@236
|
192 # _overloading=
|
al@236
|
193 _result="Resultate für : $SEARCH"
|
al@236
|
194 _result_providing="$_result (package providing %VPKG%)"
|
al@236
|
195
|
al@236
|
196 # _main_libs_warn=
|
al@236
|
197 # _description=
|
al@236
|
198 # _pkgs_report=
|
al@236
|
199 ;;
|
al@236
|
200
|
al@236
|
201 pt) _package="Pacote"
|
al@236
|
202 _desc="Descrição"
|
al@236
|
203 # _tags=
|
al@236
|
204 # _receipt=
|
al@236
|
205 _depends="Dependências"
|
al@236
|
206 # _bdepends=
|
al@236
|
207 _file="Arquivo"
|
al@236
|
208 _file_list="Arquivo lista"
|
al@236
|
209 # _overlap=
|
al@236
|
210 # _cooking=
|
al@236
|
211 _search="Buscar"
|
al@236
|
212
|
al@236
|
213 _noresult="Sem resultado: $SEARCH"
|
al@236
|
214 # _search_title=
|
al@236
|
215 _depends_loops="Dependências loops"
|
al@236
|
216 _deptree="Árvore de dependências para: $SEARCH"
|
al@236
|
217 _deptree_suggested="$_deptree (SUGGESTED)"
|
al@236
|
218 _rdeptree="Árvore de dependências reversa para: $SEARCH"
|
al@236
|
219 # _bdepends_loops=
|
al@236
|
220 # _bdeplist=
|
al@236
|
221 # _rbdeplist=
|
al@236
|
222 # _overloading=
|
al@236
|
223 _result="Resultado para : $SEARCH"
|
al@236
|
224 _result_providing="$_result (package providing %VPKG%)"
|
al@236
|
225
|
al@236
|
226 # _main_libs_warn=
|
al@236
|
227 # _description=
|
al@236
|
228 # _pkgs_report=
|
al@236
|
229 ;;
|
al@236
|
230
|
al@236
|
231 cn) _package="软件包:"
|
al@236
|
232 _desc="描述"
|
al@236
|
233 _tags="标签"
|
al@236
|
234 # _receipt=
|
al@236
|
235 _depends="依赖"
|
al@236
|
236 # _bdepends=
|
al@236
|
237 _file="文件"
|
al@236
|
238 _file_list="文件列表"
|
al@236
|
239 # _overlap=
|
al@236
|
240 _cooking="开发版"
|
al@236
|
241 # _search=
|
al@236
|
242
|
al@236
|
243 # _noresult=
|
al@236
|
244 # _search_title=
|
al@236
|
245 _depends_loops="依赖 loops"
|
al@236
|
246 # _deptree=
|
al@236
|
247 # _deptree_suggested=
|
al@236
|
248 # _rdeptree=
|
al@236
|
249 # _bdepends_loops=
|
al@236
|
250 # _bdeplist=
|
al@236
|
251 # _rbdeplist=
|
al@236
|
252 # _overloading=
|
al@236
|
253 # _result=
|
al@236
|
254 # _result_providing=
|
al@236
|
255
|
al@236
|
256 # _main_libs_warn=
|
al@236
|
257 # _description=
|
al@236
|
258 # _pkgs_report=
|
al@236
|
259 # _stable="稳定版"
|
al@236
|
260 ;;
|
al@236
|
261
|
al@236
|
262 ru) _package="пакет"
|
al@236
|
263 _desc="описание"
|
al@236
|
264 _tags="теги"
|
al@236
|
265 _receipt="рецепт"
|
al@236
|
266 _depends="зависимости"
|
al@236
|
267 _bdepends="зависимости сборки"
|
al@236
|
268 _file="файл"
|
al@236
|
269 _file_list="список файлов"
|
al@236
|
270 _overlap="общие файлы"
|
al@236
|
271 # _cooking=
|
al@236
|
272 _search="Искать"
|
al@236
|
273
|
al@236
|
274 _noresult="Пакет $SEARCH отсутствует"
|
al@236
|
275 _search_title="Поиск"
|
al@236
|
276 _depends_loops="Циклические зависимости"
|
al@236
|
277 _deptree="Дерево зависимостей для $SEARCH"
|
al@236
|
278 _deptree_suggested="Дерево необязательных зависимостей для $SEARCH"
|
al@236
|
279 _rdeptree="Обратное дерево зависимостей для $SEARCH"
|
al@236
|
280 _bdepends_loops="Циклические зависимости сборки"
|
al@236
|
281 _bdeplist="Следующие пакеты нужны, чтобы собрать $SEARCH"
|
al@236
|
282 _rbdeplist="$SEARCH нужен, чтобы собрать следующие пакеты"
|
al@236
|
283 _overloading="Следующие пакеты могут заменить файлы $SEARCH"
|
al@236
|
284 _result="Результаты поиска $SEARCH"
|
al@236
|
285 _result_providing="$_result (пакеты, предлагающие %VPKG%)"
|
al@236
|
286
|
al@236
|
287 _main_libs_warn="glibc-base и gcc-lib-base являются неявными зависимостями <b>любого</b> пакета."
|
al@236
|
288 _description="описание"
|
al@236
|
289 _pkgs_report="%PKGS% пакетов и %FILES% файлов в базе данных $SLITAZ_VERSION"
|
al@236
|
290 ;;
|
pankso@230
|
291
|
pankso@230
|
292 *) LANG="en";;
|
pankso@230
|
293
|
pankso@230
|
294 esac
|
pankso@230
|
295
|
pankso@230
|
296 WOK=/home/slitaz/$SLITAZ_VERSION/wok
|
pankso@230
|
297 PACKAGES_REPOSITORY=/home/slitaz/$SLITAZ_VERSION/packages
|
pankso@230
|
298
|
pankso@233
|
299 echo "Content-type: text/html"
|
pankso@230
|
300 echo
|
pankso@230
|
301
|
pankso@230
|
302 # Search form
|
pankso@230
|
303 search_form()
|
pankso@230
|
304 {
|
pankso@230
|
305 cat << _EOT_
|
pankso@230
|
306
|
pankso@230
|
307 <div style="text-align: center; padding: 20px;">
|
pankso@230
|
308 <form method="post" action="$(basename $SCRIPT_NAME)">
|
pankso@230
|
309 <input type="hidden" name="lang" value="$LANG" />
|
pankso@230
|
310 <select name="object">
|
al@236
|
311 <option value="Package">$_package</option>
|
al@236
|
312 <option $selected_desc value="Desc">$_desc</option>
|
al@236
|
313 <option $selected_tags value="Tags">$_tags</option>
|
al@236
|
314 <option $selected_receipt value="Receipt">$_receipt</option>
|
al@236
|
315 <option $selected_depends value="Depends">$_depends</option>
|
al@236
|
316 <option $selected_build_depends value="BuildDepends">$_bdepends</option>
|
al@236
|
317 <option $selected_file value="File">$_file</option>
|
al@236
|
318 <option $selected_file_list value="File_list">$_file_list</option>
|
al@236
|
319 <option $selected_overlap value="FileOverlap">$_overlap</option>
|
pankso@230
|
320 </select>
|
pankso@230
|
321 <input type="text" name="query" size="20" value="$SEARCH" />
|
pankso@230
|
322 <select name="version">
|
al@236
|
323 <option value="cooking">$_cooking</option>
|
pankso@230
|
324 <option $selected_stable value="stable">3.0</option>
|
pankso@230
|
325 <option $selected_2 value="2.0">2.0</option>
|
pankso@230
|
326 <option $selected_1 value="1.0">1.0</option>
|
pankso@230
|
327 <option $selected_tiny value="tiny">tiny</option>
|
pankso@230
|
328 <option $selected_undigest value="undigest">undigest</option>
|
pankso@230
|
329 </select>
|
al@236
|
330 <input type="submit" name="search" value="$_search" />
|
pankso@230
|
331 </form>
|
pankso@230
|
332 </div>
|
pankso@230
|
333 _EOT_
|
pankso@230
|
334 }
|
pankso@230
|
335
|
pankso@230
|
336 # xHTML Header.
|
pankso@231
|
337 xhtml_header() {
|
al@236
|
338 header=$(cat lib/header.html | sed s/'%SEARCH%'/"$SEARCH"/)
|
al@236
|
339 # header i18n
|
al@236
|
340 case "$LANG" in
|
al@236
|
341 pt)
|
al@236
|
342 header=$(echo "$header" | sed 's/SliTaz Packages/SliTaz Pacotes/g;s/Community/Comunidade/;s/Forum/Fórum');;
|
al@236
|
343 ru)
|
al@236
|
344 header=$(echo "$header" | sed 's/SliTaz Packages/Пакеты SliTaz/g;s/Home/Сайт/;s/Community/Сообщество/;s/Doc/Документация/;s/Forum/Форум/;s/Pro/PRO/;s/Shop/Магазин/;s/Bugs/Баг-трекер/');;
|
al@236
|
345 esac
|
al@236
|
346 echo "$header"
|
pankso@230
|
347 }
|
pankso@230
|
348
|
pankso@230
|
349 # xHTML Footer.
|
pankso@231
|
350 xhtml_footer() {
|
al@236
|
351 # Is it not too hard? (unlzma etc...) -- lexeii
|
al@236
|
352 PKGS=$(ls $WOK/ | wc -l)
|
al@236
|
353 FILES=$(unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | wc -l)
|
pankso@230
|
354 cat << _EOT_
|
pankso@231
|
355
|
pankso@230
|
356 <center>
|
al@236
|
357 <i>$(echo $_pkgs_report | sed s/'%PKGS%'/"$PKGS"/ | sed s/'%FILES%'/"$FILES"/)</i>
|
pankso@230
|
358 </center>
|
pankso@230
|
359
|
pankso@230
|
360 _EOT_
|
pankso@231
|
361 cat lib/footer.html
|
pankso@230
|
362 }
|
pankso@230
|
363
|
pankso@230
|
364 installed_size()
|
pankso@230
|
365 {
|
pankso@230
|
366 [ $VERBOSE -gt 0 ] &&
|
pankso@230
|
367 grep -A 3 "^$1\$" $PACKAGES_REPOSITORY/packages.txt | \
|
pankso@230
|
368 grep installed | sed 's/.*(\(.*\) installed.*/(\1) /'
|
pankso@230
|
369 }
|
pankso@230
|
370
|
pankso@230
|
371 package_entry()
|
pankso@230
|
372 {
|
pankso@230
|
373 if [ -s "$(dirname $0)/$SLITAZ_VERSION/$CATEGORY.html" ]; then
|
pankso@230
|
374 cat << _EOT_
|
pankso@230
|
375 <a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> $(installed_size $PACKAGE): $SHORT_DESC
|
pankso@230
|
376 _EOT_
|
pankso@230
|
377 else
|
pankso@230
|
378 PACKAGE_HREF="<u>$PACKAGE</u>"
|
pankso@230
|
379 PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg"
|
pankso@230
|
380 nslookup mirror.slitaz.org | grep -q 127.0.0.1 &&
|
pankso@230
|
381 PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$(cd /var/www/slitaz/mirror/packages/$SLITAZ_VERSION ; ls $PACKAGE-$VERSION*.tazpkg)"
|
al@236
|
382 busybox wget -s $PACKAGE_URL 2> /dev/null &&
|
pankso@230
|
383 PACKAGE_HREF="<a href=\"$PACKAGE_URL\">$PACKAGE</a>"
|
pankso@230
|
384 cat << _EOT_
|
pankso@230
|
385 $PACKAGE_HREF $(installed_size $PACKAGE): $SHORT_DESC
|
pankso@230
|
386 _EOT_
|
pankso@230
|
387 fi
|
pankso@230
|
388 }
|
pankso@230
|
389
|
pankso@230
|
390 # Show loop in depends/build_depends chains
|
pankso@230
|
391 show_loops()
|
pankso@230
|
392 {
|
pankso@230
|
393 awk '
|
pankso@230
|
394 function chkloop(pkg, i, n)
|
pankso@230
|
395 {
|
pankso@230
|
396 if (n < 8)
|
pankso@230
|
397 for (i = 1; i <= split(deps[pkg],curdep," "); i++) {
|
pankso@230
|
398 if (curdep[i] == base || chkloop(curdep[i], 0, n+1)) {
|
pankso@230
|
399 split(deps[pkg],curdep," ")
|
pankso@230
|
400 p = curdep[i] " " p
|
pankso@230
|
401 return 1
|
pankso@230
|
402 }
|
pankso@230
|
403 }
|
pankso@230
|
404 return 0
|
pankso@230
|
405 }
|
pankso@230
|
406 {
|
pankso@230
|
407 for (i = 2; i <= NF; i++)
|
pankso@230
|
408 deps[$1] = deps[$1] " " $i
|
pankso@230
|
409 }
|
pankso@230
|
410 END {
|
pankso@230
|
411 for (pkg in deps) {
|
pankso@230
|
412 base = pkg
|
pankso@230
|
413 p = ""
|
pankso@230
|
414 if (chkloop(pkg, 0, 0))
|
pankso@230
|
415 print pkg " " p
|
pankso@230
|
416 #print pkg " : " p "..."
|
pankso@230
|
417 }
|
pankso@230
|
418 }' | while read line; do
|
pankso@230
|
419 set -- $line
|
pankso@230
|
420 case " $last " in
|
pankso@230
|
421 *\ $1\ *) continue
|
pankso@230
|
422 esac
|
pankso@230
|
423 last="$line"
|
pankso@230
|
424 pkg=$1
|
pankso@230
|
425 shift
|
pankso@230
|
426 echo $pkg ":" $@ "..."
|
pankso@230
|
427 done
|
pankso@230
|
428 }
|
pankso@230
|
429
|
pankso@230
|
430 # recursive dependencies scan
|
pankso@230
|
431 dep_scan()
|
pankso@230
|
432 {
|
pankso@230
|
433 for i in $1; do
|
pankso@230
|
434 case " $ALL_DEPS " in
|
pankso@230
|
435 *\ $i\ *) continue;;
|
pankso@230
|
436 esac
|
pankso@230
|
437 ALL_DEPS="$ALL_DEPS $i"
|
pankso@230
|
438 if [ -n "$2" ]; then
|
pankso@230
|
439 echo -n "$2"
|
pankso@230
|
440 (
|
pankso@230
|
441 . $WOK/$i/receipt
|
pankso@230
|
442 package_entry
|
pankso@230
|
443 )
|
pankso@230
|
444 fi
|
pankso@230
|
445 [ -f $WOK/$i/receipt ] || continue
|
pankso@230
|
446 DEPENDS=""
|
pankso@230
|
447 BUILD_DEPENDS=""
|
pankso@230
|
448 WANTED=""
|
pankso@230
|
449 . $WOK/$i/receipt
|
pankso@230
|
450 if [ -n "$3" ]; then
|
al@236
|
451 [ -n "$BUILD_DEPENDS$WANTED" ] &&
|
pankso@230
|
452 dep_scan "$WANTED $BUILD_DEPENDS" "$2 " $3
|
pankso@230
|
453 else
|
pankso@230
|
454 [ -n "$DEPENDS" ] && dep_scan "$DEPENDS" "$2 "
|
pankso@230
|
455 fi
|
pankso@230
|
456 done
|
pankso@230
|
457 }
|
pankso@230
|
458
|
pankso@230
|
459 # recursive reverse dependencies scan
|
pankso@230
|
460 rdep_scan()
|
pankso@230
|
461 {
|
pankso@230
|
462 SEARCH=$1
|
pankso@230
|
463 case "$SEARCH" in
|
al@236
|
464 glibc-base|gcc-lib-base) echo $_main_libs_warn
|
pankso@230
|
465 return;;
|
pankso@230
|
466 esac
|
pankso@230
|
467 for i in $WOK/* ; do
|
pankso@230
|
468 DEPENDS=""
|
pankso@230
|
469 BUILD_DEPENDS=""
|
pankso@230
|
470 WANTED=""
|
pankso@230
|
471 . $i/receipt
|
pankso@230
|
472 if [ -n "$2" ]; then
|
pankso@230
|
473 echo "$(basename $i) $(echo $WANTED $BUILD_DEPENDS)"
|
pankso@230
|
474 else
|
pankso@230
|
475 echo "$(basename $i) $(echo $DEPENDS)"
|
pankso@230
|
476 fi
|
pankso@230
|
477 done | awk -v search=$SEARCH '
|
pankso@230
|
478 function show_deps(deps, all_deps, pkg, space)
|
pankso@230
|
479 {
|
pankso@230
|
480 if (all_deps[pkg] == 1) return
|
pankso@230
|
481 all_deps[pkg] = 1
|
pankso@230
|
482 if (space != "") printf "%s%s\n",space,pkg
|
pankso@230
|
483 for (i = 1; i <= split(deps[pkg], mydeps, " "); i++) {
|
pankso@230
|
484 show_deps(deps, all_deps, mydeps[i],"////" space)
|
pankso@230
|
485 }
|
pankso@230
|
486 }
|
pankso@230
|
487
|
pankso@230
|
488 {
|
pankso@230
|
489 all_deps[$1] = 0
|
pankso@230
|
490 for (i = 2; i <= NF; i++)
|
pankso@230
|
491 deps[$i] = deps[$i] " " $1
|
pankso@230
|
492 }
|
pankso@230
|
493
|
pankso@230
|
494 END {
|
pankso@230
|
495 show_deps(deps, all_deps, search, "")
|
pankso@230
|
496 }
|
pankso@230
|
497 ' | while read pkg; do
|
pankso@230
|
498 . $WOK/${pkg##*/}/receipt
|
pankso@230
|
499 cat << _EOT_
|
al@236
|
500 $(echo ${pkg%/*} | sed 's|/| |g') $(package_entry)
|
pankso@230
|
501 _EOT_
|
pankso@230
|
502 done
|
pankso@230
|
503 }
|
pankso@230
|
504
|
pankso@230
|
505 # Check package exists
|
pankso@230
|
506 package_exist()
|
pankso@230
|
507 {
|
pankso@230
|
508 [ -f $WOK/$1/receipt ] && return 0
|
pankso@230
|
509 cat << _EOT_
|
pankso@230
|
510
|
al@236
|
511 <h3>$_noresult</h3>
|
pankso@235
|
512 <pre>
|
pankso@230
|
513 _EOT_
|
pankso@230
|
514 return 1
|
pankso@230
|
515 }
|
pankso@230
|
516
|
pankso@230
|
517 # Display < > &
|
pankso@230
|
518 htmlize()
|
pankso@230
|
519 {
|
pankso@230
|
520 sed -e 's/&/\&/g' -e 's/</\</g' -e 's/>/\>/g'
|
pankso@230
|
521 }
|
pankso@230
|
522
|
pankso@230
|
523 echonb()
|
pankso@230
|
524 {
|
pankso@230
|
525 read n
|
pankso@230
|
526 echo -n "$n $1"
|
pankso@230
|
527 [ $n -gt 1 ] && echo -n s
|
pankso@230
|
528 }
|
pankso@230
|
529
|
pankso@230
|
530 display_packages_and_files()
|
pankso@230
|
531 {
|
pankso@230
|
532 last=""
|
pankso@230
|
533 while read pkg file; do
|
pankso@230
|
534 pkg=${pkg%:}
|
pankso@230
|
535 if [ "$pkg" != "$last" ]; then
|
pankso@230
|
536 . $WOK/$pkg/receipt
|
al@236
|
537
|
pankso@230
|
538 package_entry
|
pankso@230
|
539 last=$pkg
|
pankso@230
|
540 fi
|
pankso@230
|
541 echo " $file"
|
pankso@230
|
542 done
|
pankso@230
|
543 }
|
pankso@230
|
544
|
pankso@230
|
545 # Display search form and result if requested.
|
pankso@230
|
546 if [ "$REQUEST_METHOD" != "POST" ]; then
|
pankso@230
|
547 xhtml_header
|
pankso@230
|
548 cat << _EOT_
|
pankso@230
|
549
|
pankso@230
|
550 <!-- Content -->
|
pankso@230
|
551 <div id="content">
|
pankso@230
|
552 <a name="content"></a>
|
pankso@230
|
553
|
al@236
|
554 <h2>$_search_title</h2>
|
pankso@230
|
555 _EOT_
|
pankso@230
|
556 search_form
|
pankso@230
|
557 xhtml_footer
|
pankso@230
|
558 else
|
pankso@230
|
559 xhtml_header
|
pankso@230
|
560 cat << _EOT_
|
pankso@230
|
561
|
pankso@230
|
562 <!-- Content -->
|
pankso@230
|
563 <div id="content">
|
pankso@230
|
564 <a name="content"></a>
|
pankso@230
|
565
|
al@236
|
566 <h2>$_search_title</h2>
|
pankso@230
|
567 _EOT_
|
pankso@230
|
568 search_form
|
pankso@230
|
569 if [ "$OBJECT" = "Depends" ]; then
|
pankso@230
|
570 if [ -z "$SEARCH" ]; then
|
pankso@230
|
571 cat << _EOT_
|
pankso@230
|
572
|
al@236
|
573 <h3>$_depends_loops</h3>
|
pankso@235
|
574 <pre>
|
pankso@230
|
575 _EOT_
|
pankso@230
|
576 for i in $WOK/*/receipt; do
|
pankso@230
|
577 PACKAGE=
|
pankso@230
|
578 DEPENDS=
|
pankso@230
|
579 . $i
|
pankso@230
|
580 echo "$PACKAGE $(echo $DEPENDS)"
|
pankso@230
|
581 done | show_loops
|
pankso@230
|
582 cat << _EOT_
|
pankso@230
|
583 </pre>
|
pankso@230
|
584 _EOT_
|
pankso@230
|
585 elif package_exist $SEARCH ; then
|
pankso@230
|
586 cat << _EOT_
|
pankso@230
|
587
|
al@236
|
588 <h3>$_deptree</h3>
|
pankso@235
|
589 <pre>
|
pankso@230
|
590 _EOT_
|
pankso@230
|
591 ALL_DEPS=""
|
pankso@230
|
592 dep_scan $SEARCH ""
|
pankso@230
|
593 SUGGESTED=""
|
pankso@230
|
594 . $WOK/$SEARCH/receipt
|
pankso@230
|
595 if [ -n "$SUGGESTED" ]; then
|
pankso@230
|
596 cat << _EOT_
|
pankso@230
|
597 </pre>
|
pankso@230
|
598
|
al@236
|
599 <h3>$_deptree_suggested</h3>
|
pankso@235
|
600 <pre>
|
pankso@230
|
601 _EOT_
|
pankso@230
|
602 ALL_DEPS=""
|
pankso@230
|
603 dep_scan "$SUGGESTED" " "
|
pankso@230
|
604 fi
|
pankso@230
|
605 cat << _EOT_
|
pankso@230
|
606 </pre>
|
pankso@230
|
607
|
al@236
|
608 <h3>$_rdeptree</h3>
|
pankso@235
|
609 <pre>
|
pankso@230
|
610 _EOT_
|
pankso@230
|
611 ALL_DEPS=""
|
pankso@230
|
612 rdep_scan $SEARCH
|
pankso@230
|
613 cat << _EOT_
|
pankso@230
|
614 </pre>
|
pankso@230
|
615 _EOT_
|
pankso@230
|
616 fi
|
pankso@230
|
617 elif [ "$OBJECT" = "BuildDepends" ]; then
|
pankso@230
|
618 if [ -z "$SEARCH" ]; then
|
pankso@230
|
619 cat << _EOT_
|
pankso@230
|
620
|
al@236
|
621 <h3>$_bdepends_loops</h3>
|
pankso@235
|
622 <pre>
|
pankso@230
|
623 _EOT_
|
pankso@230
|
624 for i in $WOK/*/receipt; do
|
pankso@230
|
625 PACKAGE=
|
pankso@230
|
626 WANTED=
|
pankso@230
|
627 BUILD_DEPENDS=
|
pankso@230
|
628 . $i
|
pankso@230
|
629 echo "$PACKAGE $WANTED $(echo $BUILD_DEPENDS)"
|
pankso@230
|
630 done | show_loops
|
pankso@230
|
631 cat << _EOT_
|
pankso@230
|
632 </pre>
|
pankso@230
|
633 _EOT_
|
pankso@230
|
634 elif package_exist $SEARCH ; then
|
pankso@230
|
635 cat << _EOT_
|
pankso@230
|
636
|
al@236
|
637 <h3>$_bdeplist</h3>
|
pankso@235
|
638 <pre>
|
pankso@230
|
639 _EOT_
|
pankso@230
|
640 ALL_DEPS=""
|
pankso@230
|
641 dep_scan $SEARCH "" build
|
pankso@230
|
642 cat << _EOT_
|
pankso@230
|
643 </pre>
|
pankso@230
|
644
|
al@236
|
645 <h3>$_rbdeplist</h3>
|
pankso@235
|
646 <pre>
|
pankso@230
|
647 _EOT_
|
pankso@230
|
648 ALL_DEPS=""
|
pankso@230
|
649 rdep_scan $SEARCH build
|
pankso@230
|
650 cat << _EOT_
|
pankso@230
|
651 </pre>
|
pankso@230
|
652 _EOT_
|
pankso@230
|
653 fi
|
pankso@230
|
654 elif [ "$OBJECT" = "FileOverlap" ]; then
|
pankso@230
|
655 if package_exist $SEARCH ; then
|
pankso@230
|
656 cat << _EOT_
|
pankso@230
|
657
|
al@236
|
658 <h3>$_overloading</h3>
|
pankso@235
|
659 <pre>
|
pankso@230
|
660 _EOT_
|
pankso@230
|
661 ( unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep ^$SEARCH: ;
|
pankso@230
|
662 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep -v ^$SEARCH: ) | awk '
|
pankso@230
|
663 BEGIN { pkg=""; last="x" }
|
pankso@230
|
664 {
|
pankso@230
|
665 if ($2 == "") next
|
pankso@230
|
666 if (index($2,last) == 1 && substr($2,1+length(last),1) == "/")
|
pankso@230
|
667 delete file[last]
|
pankso@230
|
668 last=$2
|
pankso@230
|
669 if (pkg == "") pkg=$1
|
pankso@230
|
670 if ($1 == pkg) file[$2]=$1
|
pankso@230
|
671 else if (file[$2] == pkg) print
|
pankso@230
|
672 }
|
pankso@230
|
673 ' | display_packages_and_files
|
pankso@230
|
674 cat << _EOT_
|
pankso@230
|
675 </pre>
|
pankso@230
|
676 _EOT_
|
pankso@230
|
677 fi
|
pankso@230
|
678 elif [ "$OBJECT" = "File" ]; then
|
pankso@230
|
679 cat << _EOT_
|
pankso@230
|
680
|
al@236
|
681 <h3>$_result</h3>
|
pankso@235
|
682 <pre>
|
pankso@230
|
683 _EOT_
|
pankso@230
|
684 last=""
|
pankso@230
|
685 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \
|
pankso@230
|
686 | grep "$SEARCH" | while read pkg file; do
|
pankso@230
|
687 echo "$file" | grep -q "$SEARCH" || continue
|
pankso@230
|
688 if [ "$last" != "${pkg%:}" ]; then
|
pankso@230
|
689 last=${pkg%:}
|
pankso@230
|
690 (
|
pankso@230
|
691 . $WOK/$last/receipt
|
pankso@230
|
692 cat << _EOT_
|
pankso@230
|
693
|
pankso@230
|
694 <i>$(package_entry)</i>
|
pankso@230
|
695 _EOT_
|
pankso@230
|
696 )
|
pankso@230
|
697 fi
|
pankso@230
|
698 echo " $file"
|
pankso@230
|
699 done
|
pankso@230
|
700 elif [ "$OBJECT" = "File_list" ]; then
|
pankso@230
|
701 if package_exist $SEARCH; then
|
pankso@230
|
702 cat << _EOT_
|
pankso@230
|
703
|
al@236
|
704 <h3>$_result</h3>
|
pankso@235
|
705 <pre>
|
pankso@230
|
706 _EOT_
|
pankso@230
|
707 last=""
|
pankso@230
|
708 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \
|
pankso@230
|
709 | grep ^$SEARCH: | sed 's/.*: / /' | sort
|
pankso@230
|
710 cat << _EOT_
|
pankso@230
|
711 </pre>
|
pankso@235
|
712 <pre>
|
pankso@230
|
713 $(unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep ^$SEARCH: | wc -l | echonb file) \
|
pankso@230
|
714 $(busybox sed -n "/^$SEARCH$/{nnnpq}" $PACKAGES_REPOSITORY/packages.txt)
|
pankso@230
|
715 _EOT_
|
pankso@230
|
716 fi
|
pankso@230
|
717 elif [ "$OBJECT" = "Desc" ]; then
|
pankso@230
|
718 if [ -f $WOK/$SEARCH/description.txt ]; then
|
pankso@230
|
719 cat << _EOT_
|
pankso@230
|
720
|
al@236
|
721 <h3>$_result</h3>
|
pankso@230
|
722 <pre>
|
pankso@230
|
723 $(htmlize < $WOK/$SEARCH/description.txt)
|
pankso@230
|
724 </pre>
|
pankso@230
|
725 _EOT_
|
pankso@230
|
726 else
|
pankso@230
|
727 cat << _EOT_
|
pankso@230
|
728
|
al@236
|
729 <h3>$_result</h3>
|
pankso@235
|
730 <pre>
|
pankso@230
|
731 _EOT_
|
pankso@230
|
732 last=""
|
pankso@230
|
733 grep -i "$SEARCH" $PACKAGES_REPOSITORY/packages.desc | \
|
pankso@230
|
734 sort | while read pkg extras ; do
|
pankso@230
|
735 . $WOK/$pkg/receipt
|
pankso@230
|
736 package_entry
|
pankso@230
|
737 done
|
pankso@230
|
738 fi
|
pankso@230
|
739 elif [ "$OBJECT" = "Tags" ]; then
|
pankso@230
|
740 cat << _EOT_
|
pankso@230
|
741
|
al@236
|
742 <h3>$_result</h3>
|
pankso@235
|
743 <pre>
|
pankso@230
|
744 _EOT_
|
pankso@230
|
745 last=""
|
pankso@230
|
746 grep ^TAGS= $WOK/*/receipt | grep -i "$SEARCH" | \
|
pankso@230
|
747 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
|
pankso@230
|
748 . $WOK/$pkg/receipt
|
pankso@230
|
749 package_entry
|
pankso@230
|
750 done
|
pankso@230
|
751 elif [ "$OBJECT" = "Receipt" ]; then
|
pankso@230
|
752 package_exist $SEARCH && cat << _EOT_
|
pankso@230
|
753
|
al@236
|
754 <h3>$_result</h3>
|
pankso@230
|
755 <pre>
|
pankso@230
|
756 $(if [ -f $WOK/$SEARCH/taz/*/receipt ]; then
|
pankso@230
|
757 cat $WOK/$SEARCH/taz/*/receipt
|
pankso@230
|
758 else
|
pankso@230
|
759 cat $WOK/$SEARCH/receipt
|
pankso@230
|
760 fi | htmlize)
|
pankso@230
|
761 </pre>
|
pankso@230
|
762 _EOT_
|
pankso@230
|
763 else
|
pankso@230
|
764 cat << _EOT_
|
pankso@230
|
765
|
al@236
|
766 <h3>$_result</h3>
|
pankso@235
|
767 <pre>
|
pankso@230
|
768 _EOT_
|
pankso@230
|
769 for pkg in `ls $WOK/ | grep "$SEARCH"`
|
pankso@230
|
770 do
|
pankso@230
|
771 . $WOK/$pkg/receipt
|
al@236
|
772 DESC=" <a href=\"?desc=$pkg\">$_description</a>"
|
pankso@230
|
773 [ -f $WOK/$pkg/description.txt ] || DESC=""
|
pankso@230
|
774 cat << _EOT_
|
pankso@230
|
775 $(package_entry)$DESC
|
pankso@230
|
776 _EOT_
|
pankso@230
|
777 done
|
pankso@230
|
778 equiv=$PACKAGES_REPOSITORY/packages.equiv
|
pankso@230
|
779 vpkgs="$(cat $equiv | cut -d= -f1 | grep $SEARCH)"
|
pankso@230
|
780 for vpkg in $vpkgs ; do
|
pankso@230
|
781 cat << _EOT_
|
pankso@230
|
782 </pre>
|
pankso@230
|
783
|
al@236
|
784 <h3>$(echo $_result_providing | sed s/'%VPKG%'/"$vpkg"/)</h3>
|
pankso@235
|
785 <pre>
|
pankso@230
|
786 _EOT_
|
pankso@230
|
787 for pkg in $(grep $vpkg= $equiv | sed "s/$vpkg=//"); do
|
pankso@230
|
788 . $WOK/${pkg#*:}/receipt
|
pankso@230
|
789 package_entry
|
pankso@230
|
790 done
|
pankso@230
|
791 done
|
pankso@230
|
792 fi
|
pankso@230
|
793 cat << _EOT_
|
pankso@230
|
794 </pre>
|
pankso@230
|
795 _EOT_
|
pankso@230
|
796 xhtml_footer
|
pankso@230
|
797 fi
|
pankso@230
|
798
|
pankso@230
|
799 exit 0
|