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