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