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>
|
al@261
|
4 # Aleksej Bobylev <al.bobylev@gmail.com> - i18n
|
pankso@230
|
5 #
|
pankso@230
|
6
|
al@261
|
7 #renice 20
|
pankso@230
|
8 read QUERY_STRING
|
pankso@230
|
9 for i in $(echo $QUERY_STRING | sed 's/&/ /g'); do
|
pankso@230
|
10 i=$(httpd -d $i)
|
pankso@230
|
11 eval $i
|
pankso@230
|
12 done
|
pankso@230
|
13 LANG=$lang
|
pankso@230
|
14 SEARCH=$query
|
pankso@230
|
15 SLITAZ_VERSION=$version
|
pankso@230
|
16 OBJECT=$object
|
pankso@231
|
17 DATE=$(date +%Y-%m-%d\ %H:%M:%S)
|
pankso@230
|
18 VERSION=cooking
|
al@261
|
19 SCRIPT_NAME="search.sh"
|
al@261
|
20
|
al@261
|
21
|
al@261
|
22 # Internationalization
|
al@261
|
23 . /usr/bin/gettext.sh
|
al@261
|
24 TEXTDOMAIN='tazpkg-web'
|
al@261
|
25 export TEXTDOMAIN
|
pankso@239
|
26
|
pankso@230
|
27 if [ "$REQUEST_METHOD" = "GET" ]; then
|
pankso@230
|
28 SEARCH=""
|
pankso@230
|
29 VERBOSE=0
|
pankso@230
|
30 for i in $(echo $REQUEST_URI | sed 's/[?&]/ /g'); do
|
pankso@230
|
31 # i=$(httpd -d $i)
|
pankso@230
|
32 SLITAZ_VERSION=cooking
|
pankso@230
|
33 case "$(echo $i | tr [A-Z] [a-z])" in
|
pankso@230
|
34 query=*|search=*)
|
pankso@230
|
35 [ ${i#*=} == Search ] || SEARCH=${i#*=};;
|
pankso@230
|
36 object=*)
|
pankso@230
|
37 OBJECT=${i#*=};;
|
pankso@230
|
38 verbose=*)
|
pankso@230
|
39 VERBOSE=${i#*=};;
|
pankso@230
|
40 lang=*)
|
pankso@230
|
41 LANG=${i#*=};;
|
pankso@230
|
42 file=*)
|
pankso@230
|
43 SEARCH=${i#*=}
|
pankso@230
|
44 OBJECT=File;;
|
pankso@230
|
45 desc=*)
|
pankso@230
|
46 SEARCH=${i#*=}
|
pankso@230
|
47 OBJECT=Desc;;
|
pankso@230
|
48 tags=*)
|
pankso@230
|
49 SEARCH=${i#*=}
|
pankso@230
|
50 OBJECT=Tags;;
|
pankso@230
|
51 receipt=*)
|
pankso@230
|
52 SEARCH=${i#*=}
|
pankso@230
|
53 OBJECT=Receipt;;
|
pankso@230
|
54 filelist=*)
|
pankso@230
|
55 SEARCH=${i#*=}
|
pankso@230
|
56 OBJECT=File_list;;
|
pankso@230
|
57 package=*)
|
pankso@230
|
58 SEARCH=${i#*=}
|
pankso@230
|
59 OBJECT=Package;;
|
pankso@230
|
60 depends=*)
|
pankso@230
|
61 SEARCH=${i#*=}
|
pankso@230
|
62 OBJECT=Depends;;
|
pankso@230
|
63 builddepends=*)
|
pankso@230
|
64 SEARCH=${i#*=}
|
pankso@230
|
65 OBJECT=BuildDepends;;
|
pankso@230
|
66 fileoverlap=*)
|
pankso@230
|
67 SEARCH=${i#*=}
|
pankso@230
|
68 OBJECT=FileOverlap;;
|
pankso@230
|
69 version=s*|version=3*)
|
pankso@230
|
70 SLITAZ_VERSION=stable;;
|
pankso@230
|
71 version=[1-9]*)
|
pankso@230
|
72 i=${i%%.*}
|
pankso@230
|
73 SLITAZ_VERSION=${i#*=}.0;;
|
pankso@230
|
74 version=u*)
|
pankso@230
|
75 SLITAZ_VERSION=undigest;;
|
pankso@230
|
76 esac
|
pankso@230
|
77 done
|
pankso@230
|
78 [ -n "$SEARCH" ] && REQUEST_METHOD="POST"
|
pankso@230
|
79 [ "$SEARCH" == "." ] && SEARCH=
|
pankso@230
|
80 fi
|
pankso@230
|
81
|
al@261
|
82 # preferred language
|
pankso@230
|
83 if [ -z "$LANG" ]; then
|
al@261
|
84 for i in $(echo $HTTP_ACCEPT_LANGUAGE | sed 's/[,;-_]/ /g'); do
|
pankso@230
|
85 case "$i" in
|
al@261
|
86 de*|fr*|pt*|ru*)
|
al@261
|
87 LANG=${i}
|
pankso@230
|
88 break;;
|
pankso@230
|
89 esac
|
pankso@230
|
90 done
|
pankso@230
|
91 fi
|
pankso@230
|
92
|
al@261
|
93 # lang substitution
|
al@261
|
94 case "$LANG" in
|
al@261
|
95 de*) LANG="de_DE";;
|
al@261
|
96 es*) LANG="es_ES";;
|
al@261
|
97 fr*) LANG="fr_FR";;
|
al@261
|
98 it*) LANG="it_IT";;
|
al@261
|
99 pt*) LANG="pt_BR";;
|
al@261
|
100 ru*) LANG="ru_RU";;
|
al@261
|
101 esac
|
pankso@230
|
102
|
al@261
|
103 export LANG
|
pankso@230
|
104
|
pankso@230
|
105
|
al@261
|
106 case "$OBJECT" in
|
al@261
|
107 File) selected_file="selected";;
|
al@261
|
108 Desc) selected_desc="selected";;
|
al@261
|
109 Tags) selected_tags="selected";;
|
al@261
|
110 Receipt) selected_receipt="selected";;
|
al@261
|
111 File_list) selected_file_list="selected";;
|
al@261
|
112 Depends) selected_depends="selected";;
|
al@261
|
113 BuildDepends) selected_build_depends="selected";;
|
al@261
|
114 FileOverlap) selected_overlap="selected";;
|
al@261
|
115 esac
|
pankso@230
|
116
|
al@261
|
117 case "$SLITAZ_VERSION" in
|
al@261
|
118 tiny) selected_tiny="selected";;
|
al@261
|
119 1.0) selected_1="selected";;
|
al@261
|
120 2.0) selected_2="selected";;
|
al@261
|
121 3.0) selected_3="selected";;
|
al@261
|
122 stable) selected_stable="selected";;
|
al@261
|
123 undigest) selected_undigest="selected";;
|
al@261
|
124 esac
|
pankso@230
|
125
|
al@261
|
126 # unescape query
|
al@261
|
127 SEARCH="$(echo $SEARCH | sed 's/%2B/+/g; s/%3A/:/g; s|%2F|/|g')"
|
al@236
|
128
|
al@236
|
129
|
pankso@230
|
130
|
pankso@230
|
131 WOK=/home/slitaz/$SLITAZ_VERSION/wok
|
pankso@230
|
132 PACKAGES_REPOSITORY=/home/slitaz/$SLITAZ_VERSION/packages
|
pankso@230
|
133
|
pankso@233
|
134 echo "Content-type: text/html"
|
pankso@230
|
135 echo
|
pankso@230
|
136
|
pankso@230
|
137 # Search form
|
pankso@230
|
138 search_form()
|
pankso@230
|
139 {
|
al@261
|
140
|
pankso@230
|
141 cat << _EOT_
|
pankso@230
|
142
|
pankso@230
|
143 <div style="text-align: center; padding: 20px;">
|
al@261
|
144 <form method="get" action="$SCRIPT_NAME">
|
pankso@230
|
145 <input type="hidden" name="lang" value="$LANG" />
|
pankso@230
|
146 <select name="object">
|
al@261
|
147 <option value="Package">$(gettext "Package")</option>
|
al@261
|
148 <option $selected_desc value="Desc">$(gettext "Description")</option>
|
al@261
|
149 <option $selected_tags value="Tags">$(gettext "Tags")</option>
|
al@261
|
150 <option $selected_receipt value="Receipt">$(gettext "Receipt")</option>
|
al@261
|
151 <option $selected_depends value="Depends">$(gettext "Depends")</option>
|
al@261
|
152 <option $selected_build_depends value="BuildDepends">$(gettext "Build depends")</option>
|
al@261
|
153 <option $selected_file value="File">$(gettext "File")</option>
|
al@261
|
154 <option $selected_file_list value="File_list">$(gettext "File list")</option>
|
al@261
|
155 <option $selected_overlap value="FileOverlap">$(gettext "common files")</option>
|
pankso@230
|
156 </select>
|
pankso@230
|
157 <input type="text" name="query" size="20" value="$SEARCH" />
|
pankso@230
|
158 <select name="version">
|
al@261
|
159 <option value="cooking">$(gettext "cooking")</option>
|
al@261
|
160 <option $selected_stable value="stable">4.0</option>
|
al@261
|
161 <option $selected_3 value="3.0">3.0</option>
|
pankso@230
|
162 <option $selected_2 value="2.0">2.0</option>
|
pankso@230
|
163 <option $selected_1 value="1.0">1.0</option>
|
al@261
|
164 <option $selected_tiny value="tiny">$(gettext "tiny")</option>
|
al@261
|
165 <option $selected_undigest value="undigest">$(gettext "undigest")</option>
|
pankso@230
|
166 </select>
|
al@261
|
167 <input type="submit" value="$(gettext 'Search')" />
|
pankso@230
|
168 </form>
|
pankso@230
|
169 </div>
|
pankso@230
|
170 _EOT_
|
pankso@230
|
171 }
|
pankso@230
|
172
|
al@261
|
173 # xHTML5 Header.
|
pankso@231
|
174 xhtml_header() {
|
al@261
|
175 . lib/header.sh
|
pankso@230
|
176 }
|
pankso@230
|
177
|
pankso@230
|
178 # xHTML Footer.
|
pankso@231
|
179 xhtml_footer() {
|
al@261
|
180 PKGS=$(ls $WOK/ | wc -l)
|
al@261
|
181 FILES=$(unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | wc -l)
|
pankso@230
|
182 cat << _EOT_
|
pankso@231
|
183
|
pankso@230
|
184 <center>
|
al@261
|
185 <i>$(eval_ngettext "\$PKGS package" "\$PKGS packages" $PKGS)
|
al@261
|
186 $(eval_ngettext "and \$FILES file in \$SLITAZ_VERSION database" "and \$FILES files in \$SLITAZ_VERSION database" $FILES)</i>
|
pankso@230
|
187 </center>
|
pankso@230
|
188
|
al@261
|
189 <!-- End of content -->
|
al@261
|
190 </div>
|
al@261
|
191
|
al@261
|
192 <!-- Footer -->
|
al@261
|
193 <div id="footer">$(gettext "SliTaz Packages")</div>
|
al@261
|
194
|
al@261
|
195 </body>
|
al@261
|
196 </html>
|
pankso@230
|
197 _EOT_
|
pankso@230
|
198 }
|
pankso@230
|
199
|
pankso@230
|
200 installed_size()
|
pankso@230
|
201 {
|
al@261
|
202 [ $VERBOSE -gt 0 ] &&
|
al@261
|
203 grep -A 3 "^$1\$" $PACKAGES_REPOSITORY/packages.txt | \
|
al@261
|
204 grep installed | sed 's/.*(\(.*\) installed.*/(\1) /'
|
pankso@230
|
205 }
|
pankso@230
|
206
|
pankso@230
|
207 package_entry()
|
pankso@230
|
208 {
|
pankso@230
|
209 if [ -s "$(dirname $0)/$SLITAZ_VERSION/$CATEGORY.html" ]; then
|
pankso@230
|
210 cat << _EOT_
|
pankso@230
|
211 <a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> $(installed_size $PACKAGE): $SHORT_DESC
|
pankso@230
|
212 _EOT_
|
pankso@230
|
213 else
|
pankso@230
|
214 PACKAGE_HREF="<u>$PACKAGE</u>"
|
pankso@230
|
215 PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg"
|
pankso@230
|
216 nslookup mirror.slitaz.org | grep -q 127.0.0.1 &&
|
pankso@230
|
217 PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$(cd /var/www/slitaz/mirror/packages/$SLITAZ_VERSION ; ls $PACKAGE-$VERSION*.tazpkg)"
|
al@236
|
218 busybox wget -s $PACKAGE_URL 2> /dev/null &&
|
pankso@230
|
219 PACKAGE_HREF="<a href=\"$PACKAGE_URL\">$PACKAGE</a>"
|
pankso@230
|
220 cat << _EOT_
|
pankso@230
|
221 $PACKAGE_HREF $(installed_size $PACKAGE): $SHORT_DESC
|
pankso@230
|
222 _EOT_
|
pankso@230
|
223 fi
|
pankso@230
|
224 }
|
pankso@230
|
225
|
pankso@230
|
226 # Show loop in depends/build_depends chains
|
pankso@230
|
227 show_loops()
|
pankso@230
|
228 {
|
pankso@230
|
229 awk '
|
pankso@230
|
230 function chkloop(pkg, i, n)
|
pankso@230
|
231 {
|
pankso@230
|
232 if (n < 8)
|
pankso@230
|
233 for (i = 1; i <= split(deps[pkg],curdep," "); i++) {
|
pankso@230
|
234 if (curdep[i] == base || chkloop(curdep[i], 0, n+1)) {
|
pankso@230
|
235 split(deps[pkg],curdep," ")
|
pankso@230
|
236 p = curdep[i] " " p
|
pankso@230
|
237 return 1
|
pankso@230
|
238 }
|
pankso@230
|
239 }
|
pankso@230
|
240 return 0
|
pankso@230
|
241 }
|
pankso@230
|
242 {
|
pankso@230
|
243 for (i = 2; i <= NF; i++)
|
pankso@230
|
244 deps[$1] = deps[$1] " " $i
|
pankso@230
|
245 }
|
pankso@230
|
246 END {
|
pankso@230
|
247 for (pkg in deps) {
|
pankso@230
|
248 base = pkg
|
pankso@230
|
249 p = ""
|
pankso@230
|
250 if (chkloop(pkg, 0, 0))
|
pankso@230
|
251 print pkg " " p
|
pankso@230
|
252 #print pkg " : " p "..."
|
pankso@230
|
253 }
|
pankso@230
|
254 }' | while read line; do
|
pankso@230
|
255 set -- $line
|
pankso@230
|
256 case " $last " in
|
pankso@230
|
257 *\ $1\ *) continue
|
pankso@230
|
258 esac
|
pankso@230
|
259 last="$line"
|
pankso@230
|
260 pkg=$1
|
pankso@230
|
261 shift
|
pankso@230
|
262 echo $pkg ":" $@ "..."
|
pankso@230
|
263 done
|
pankso@230
|
264 }
|
pankso@230
|
265
|
pankso@230
|
266 # recursive dependencies scan
|
pankso@230
|
267 dep_scan()
|
pankso@230
|
268 {
|
pankso@230
|
269 for i in $1; do
|
pankso@230
|
270 case " $ALL_DEPS " in
|
pankso@230
|
271 *\ $i\ *) continue;;
|
pankso@230
|
272 esac
|
pankso@230
|
273 ALL_DEPS="$ALL_DEPS $i"
|
pankso@230
|
274 if [ -n "$2" ]; then
|
pankso@230
|
275 echo -n "$2"
|
pankso@230
|
276 (
|
pankso@230
|
277 . $WOK/$i/receipt
|
pankso@230
|
278 package_entry
|
pankso@230
|
279 )
|
pankso@230
|
280 fi
|
pankso@230
|
281 [ -f $WOK/$i/receipt ] || continue
|
pankso@230
|
282 DEPENDS=""
|
pankso@230
|
283 BUILD_DEPENDS=""
|
pankso@230
|
284 WANTED=""
|
pankso@230
|
285 . $WOK/$i/receipt
|
pankso@230
|
286 if [ -n "$3" ]; then
|
al@236
|
287 [ -n "$BUILD_DEPENDS$WANTED" ] &&
|
pankso@230
|
288 dep_scan "$WANTED $BUILD_DEPENDS" "$2 " $3
|
pankso@230
|
289 else
|
pankso@230
|
290 [ -n "$DEPENDS" ] && dep_scan "$DEPENDS" "$2 "
|
pankso@230
|
291 fi
|
pankso@230
|
292 done
|
pankso@230
|
293 }
|
pankso@230
|
294
|
pankso@230
|
295 # recursive reverse dependencies scan
|
pankso@230
|
296 rdep_scan()
|
pankso@230
|
297 {
|
pankso@230
|
298 SEARCH=$1
|
pankso@230
|
299 case "$SEARCH" in
|
al@261
|
300 glibc-base|gcc-lib-base)
|
al@261
|
301 $(gettext " glibc-base and gcc-lib-base are implicit dependencies,
|
al@261
|
302 <b>every</b> package is supposed to depend on them."); echo
|
pankso@230
|
303 return;;
|
pankso@230
|
304 esac
|
pankso@230
|
305 for i in $WOK/* ; do
|
pankso@230
|
306 DEPENDS=""
|
pankso@230
|
307 BUILD_DEPENDS=""
|
pankso@230
|
308 WANTED=""
|
pankso@230
|
309 . $i/receipt
|
pankso@230
|
310 if [ -n "$2" ]; then
|
pankso@230
|
311 echo "$(basename $i) $(echo $WANTED $BUILD_DEPENDS)"
|
pankso@230
|
312 else
|
pankso@230
|
313 echo "$(basename $i) $(echo $DEPENDS)"
|
pankso@230
|
314 fi
|
pankso@230
|
315 done | awk -v search=$SEARCH '
|
pankso@230
|
316 function show_deps(deps, all_deps, pkg, space)
|
pankso@230
|
317 {
|
pankso@230
|
318 if (all_deps[pkg] == 1) return
|
pankso@230
|
319 all_deps[pkg] = 1
|
pankso@230
|
320 if (space != "") printf "%s%s\n",space,pkg
|
pankso@230
|
321 for (i = 1; i <= split(deps[pkg], mydeps, " "); i++) {
|
pankso@230
|
322 show_deps(deps, all_deps, mydeps[i],"////" space)
|
pankso@230
|
323 }
|
pankso@230
|
324 }
|
pankso@230
|
325
|
pankso@230
|
326 {
|
pankso@230
|
327 all_deps[$1] = 0
|
pankso@230
|
328 for (i = 2; i <= NF; i++)
|
pankso@230
|
329 deps[$i] = deps[$i] " " $1
|
pankso@230
|
330 }
|
pankso@230
|
331
|
pankso@230
|
332 END {
|
pankso@230
|
333 show_deps(deps, all_deps, search, "")
|
pankso@230
|
334 }
|
pankso@230
|
335 ' | while read pkg; do
|
pankso@230
|
336 . $WOK/${pkg##*/}/receipt
|
pankso@230
|
337 cat << _EOT_
|
al@236
|
338 $(echo ${pkg%/*} | sed 's|/| |g') $(package_entry)
|
pankso@230
|
339 _EOT_
|
pankso@230
|
340 done
|
pankso@230
|
341 }
|
pankso@230
|
342
|
pankso@230
|
343 # Check package exists
|
pankso@230
|
344 package_exist()
|
pankso@230
|
345 {
|
pankso@230
|
346 [ -f $WOK/$1/receipt ] && return 0
|
pankso@230
|
347 cat << _EOT_
|
pankso@230
|
348
|
al@261
|
349 <h3>$(eval_gettext "No package \$SEARCH")</h3>
|
pankso@235
|
350 <pre>
|
pankso@230
|
351 _EOT_
|
pankso@230
|
352 return 1
|
pankso@230
|
353 }
|
pankso@230
|
354
|
pankso@230
|
355 # Display < > &
|
pankso@230
|
356 htmlize()
|
pankso@230
|
357 {
|
pankso@230
|
358 sed -e 's/&/\&/g' -e 's/</\</g' -e 's/>/\>/g'
|
pankso@230
|
359 }
|
pankso@230
|
360
|
pankso@230
|
361 echonb()
|
pankso@230
|
362 {
|
pankso@230
|
363 read n
|
pankso@230
|
364 echo -n "$n $1"
|
pankso@230
|
365 [ $n -gt 1 ] && echo -n s
|
pankso@230
|
366 }
|
pankso@230
|
367
|
pankso@230
|
368 display_packages_and_files()
|
pankso@230
|
369 {
|
pankso@230
|
370 last=""
|
pankso@230
|
371 while read pkg file; do
|
pankso@230
|
372 pkg=${pkg%:}
|
pankso@230
|
373 if [ "$pkg" != "$last" ]; then
|
pankso@230
|
374 . $WOK/$pkg/receipt
|
al@236
|
375
|
pankso@230
|
376 package_entry
|
pankso@230
|
377 last=$pkg
|
pankso@230
|
378 fi
|
pankso@230
|
379 echo " $file"
|
pankso@230
|
380 done
|
pankso@230
|
381 }
|
pankso@230
|
382
|
pankso@230
|
383 # Display search form and result if requested.
|
pankso@230
|
384 if [ "$REQUEST_METHOD" != "POST" ]; then
|
pankso@230
|
385 xhtml_header
|
pankso@230
|
386 cat << _EOT_
|
pankso@230
|
387
|
pankso@230
|
388 <!-- Content -->
|
pankso@230
|
389 <div id="content">
|
pankso@230
|
390 <a name="content"></a>
|
pankso@230
|
391
|
al@261
|
392 <h2>$(gettext "Search for packages")</h2>
|
pankso@230
|
393 _EOT_
|
pankso@230
|
394 search_form
|
pankso@230
|
395 xhtml_footer
|
pankso@230
|
396 else
|
pankso@230
|
397 xhtml_header
|
pankso@230
|
398 cat << _EOT_
|
pankso@230
|
399
|
pankso@230
|
400 <!-- Content -->
|
pankso@230
|
401 <div id="content">
|
pankso@230
|
402 <a name="content"></a>
|
pankso@230
|
403
|
al@261
|
404 <h2>$(gettext "Search for packages")</h2>
|
pankso@230
|
405 _EOT_
|
pankso@230
|
406 search_form
|
pankso@230
|
407 if [ "$OBJECT" = "Depends" ]; then
|
pankso@230
|
408 if [ -z "$SEARCH" ]; then
|
pankso@230
|
409 cat << _EOT_
|
pankso@230
|
410
|
al@261
|
411 <h3>$(gettext "Depends loops")</h3>
|
pankso@235
|
412 <pre>
|
pankso@230
|
413 _EOT_
|
pankso@230
|
414 for i in $WOK/*/receipt; do
|
pankso@230
|
415 PACKAGE=
|
pankso@230
|
416 DEPENDS=
|
pankso@230
|
417 . $i
|
pankso@230
|
418 echo "$PACKAGE $(echo $DEPENDS)"
|
pankso@230
|
419 done | show_loops
|
pankso@230
|
420 cat << _EOT_
|
pankso@230
|
421 </pre>
|
pankso@230
|
422 _EOT_
|
pankso@230
|
423 elif package_exist $SEARCH ; then
|
pankso@230
|
424 cat << _EOT_
|
pankso@230
|
425
|
al@261
|
426 <h3>$(eval_gettext "Dependency tree for: \$SEARCH")</h3>
|
pankso@235
|
427 <pre>
|
pankso@230
|
428 _EOT_
|
pankso@230
|
429 ALL_DEPS=""
|
pankso@230
|
430 dep_scan $SEARCH ""
|
pankso@230
|
431 SUGGESTED=""
|
pankso@230
|
432 . $WOK/$SEARCH/receipt
|
pankso@230
|
433 if [ -n "$SUGGESTED" ]; then
|
pankso@230
|
434 cat << _EOT_
|
pankso@230
|
435 </pre>
|
pankso@230
|
436
|
al@261
|
437 <h3>$(eval_gettext "Dependency tree for: \$SEARCH (SUGGESTED)")</h3>
|
pankso@235
|
438 <pre>
|
pankso@230
|
439 _EOT_
|
pankso@230
|
440 ALL_DEPS=""
|
pankso@230
|
441 dep_scan "$SUGGESTED" " "
|
pankso@230
|
442 fi
|
pankso@230
|
443 cat << _EOT_
|
pankso@230
|
444 </pre>
|
pankso@230
|
445
|
al@261
|
446 <h3>$(eval_gettext "Reverse dependency tree for: \$SEARCH")</h3>
|
pankso@235
|
447 <pre>
|
pankso@230
|
448 _EOT_
|
pankso@230
|
449 ALL_DEPS=""
|
pankso@230
|
450 rdep_scan $SEARCH
|
pankso@230
|
451 cat << _EOT_
|
pankso@230
|
452 </pre>
|
pankso@230
|
453 _EOT_
|
pankso@230
|
454 fi
|
pankso@230
|
455 elif [ "$OBJECT" = "BuildDepends" ]; then
|
pankso@230
|
456 if [ -z "$SEARCH" ]; then
|
pankso@230
|
457 cat << _EOT_
|
pankso@230
|
458
|
al@261
|
459 <h3>$(gettext "Build depends loops")</h3>
|
pankso@235
|
460 <pre>
|
pankso@230
|
461 _EOT_
|
pankso@230
|
462 for i in $WOK/*/receipt; do
|
pankso@230
|
463 PACKAGE=
|
pankso@230
|
464 WANTED=
|
pankso@230
|
465 BUILD_DEPENDS=
|
pankso@230
|
466 . $i
|
pankso@230
|
467 echo "$PACKAGE $WANTED $(echo $BUILD_DEPENDS)"
|
pankso@230
|
468 done | show_loops
|
pankso@230
|
469 cat << _EOT_
|
pankso@230
|
470 </pre>
|
pankso@230
|
471 _EOT_
|
pankso@230
|
472 elif package_exist $SEARCH ; then
|
pankso@230
|
473 cat << _EOT_
|
pankso@230
|
474
|
al@261
|
475 <h3>$(eval_gettext "\$SEARCH needs these packages to be built")</h3>
|
pankso@235
|
476 <pre>
|
pankso@230
|
477 _EOT_
|
pankso@230
|
478 ALL_DEPS=""
|
pankso@230
|
479 dep_scan $SEARCH "" build
|
pankso@230
|
480 cat << _EOT_
|
pankso@230
|
481 </pre>
|
pankso@230
|
482
|
al@261
|
483 <h3>$(eval_gettext "Packages who need \$SEARCH to be built")</h3>
|
pankso@235
|
484 <pre>
|
pankso@230
|
485 _EOT_
|
pankso@230
|
486 ALL_DEPS=""
|
pankso@230
|
487 rdep_scan $SEARCH build
|
pankso@230
|
488 cat << _EOT_
|
pankso@230
|
489 </pre>
|
pankso@230
|
490 _EOT_
|
pankso@230
|
491 fi
|
pankso@230
|
492 elif [ "$OBJECT" = "FileOverlap" ]; then
|
pankso@230
|
493 if package_exist $SEARCH ; then
|
pankso@230
|
494 cat << _EOT_
|
pankso@230
|
495
|
al@261
|
496 <h3>$(eval_gettext "These packages may overload files of \$SEARCH")</h3>
|
pankso@235
|
497 <pre>
|
pankso@230
|
498 _EOT_
|
pankso@230
|
499 ( unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep ^$SEARCH: ;
|
pankso@230
|
500 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep -v ^$SEARCH: ) | awk '
|
pankso@230
|
501 BEGIN { pkg=""; last="x" }
|
pankso@230
|
502 {
|
pankso@230
|
503 if ($2 == "") next
|
pankso@230
|
504 if (index($2,last) == 1 && substr($2,1+length(last),1) == "/")
|
pankso@230
|
505 delete file[last]
|
pankso@230
|
506 last=$2
|
pankso@230
|
507 if (pkg == "") pkg=$1
|
pankso@230
|
508 if ($1 == pkg) file[$2]=$1
|
pankso@230
|
509 else if (file[$2] == pkg) print
|
pankso@230
|
510 }
|
pankso@230
|
511 ' | display_packages_and_files
|
pankso@230
|
512 cat << _EOT_
|
pankso@230
|
513 </pre>
|
pankso@230
|
514 _EOT_
|
pankso@230
|
515 fi
|
pankso@230
|
516 elif [ "$OBJECT" = "File" ]; then
|
pankso@230
|
517 cat << _EOT_
|
pankso@230
|
518
|
al@261
|
519 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
|
pankso@235
|
520 <pre>
|
pankso@230
|
521 _EOT_
|
pankso@230
|
522 last=""
|
pankso@230
|
523 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \
|
pankso@230
|
524 | grep "$SEARCH" | while read pkg file; do
|
pankso@230
|
525 echo "$file" | grep -q "$SEARCH" || continue
|
pankso@230
|
526 if [ "$last" != "${pkg%:}" ]; then
|
pankso@230
|
527 last=${pkg%:}
|
pankso@230
|
528 (
|
pankso@230
|
529 . $WOK/$last/receipt
|
pankso@230
|
530 cat << _EOT_
|
pankso@230
|
531
|
pankso@230
|
532 <i>$(package_entry)</i>
|
pankso@230
|
533 _EOT_
|
pankso@230
|
534 )
|
pankso@230
|
535 fi
|
pankso@230
|
536 echo " $file"
|
pankso@230
|
537 done
|
pankso@230
|
538 elif [ "$OBJECT" = "File_list" ]; then
|
pankso@230
|
539 if package_exist $SEARCH; then
|
pankso@230
|
540 cat << _EOT_
|
pankso@230
|
541
|
al@261
|
542 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
|
pankso@235
|
543 <pre>
|
pankso@230
|
544 _EOT_
|
pankso@230
|
545 last=""
|
pankso@230
|
546 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \
|
pankso@230
|
547 | grep ^$SEARCH: | sed 's/.*: / /' | sort
|
pankso@230
|
548 cat << _EOT_
|
pankso@230
|
549 </pre>
|
pankso@235
|
550 <pre>
|
pankso@230
|
551 $(unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep ^$SEARCH: | wc -l | echonb file) \
|
pankso@230
|
552 $(busybox sed -n "/^$SEARCH$/{nnnpq}" $PACKAGES_REPOSITORY/packages.txt)
|
pankso@230
|
553 _EOT_
|
pankso@230
|
554 fi
|
pankso@230
|
555 elif [ "$OBJECT" = "Desc" ]; then
|
pankso@230
|
556 if [ -f $WOK/$SEARCH/description.txt ]; then
|
pankso@230
|
557 cat << _EOT_
|
pankso@230
|
558
|
al@261
|
559 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
|
pankso@230
|
560 <pre>
|
pankso@230
|
561 $(htmlize < $WOK/$SEARCH/description.txt)
|
pankso@230
|
562 </pre>
|
pankso@230
|
563 _EOT_
|
pankso@230
|
564 else
|
pankso@230
|
565 cat << _EOT_
|
pankso@230
|
566
|
al@261
|
567 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
|
pankso@235
|
568 <pre>
|
pankso@230
|
569 _EOT_
|
pankso@230
|
570 last=""
|
pankso@230
|
571 grep -i "$SEARCH" $PACKAGES_REPOSITORY/packages.desc | \
|
pankso@230
|
572 sort | while read pkg extras ; do
|
pankso@230
|
573 . $WOK/$pkg/receipt
|
pankso@230
|
574 package_entry
|
pankso@230
|
575 done
|
pankso@230
|
576 fi
|
pankso@230
|
577 elif [ "$OBJECT" = "Tags" ]; then
|
pankso@230
|
578 cat << _EOT_
|
pankso@230
|
579
|
al@261
|
580 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
|
pankso@235
|
581 <pre>
|
pankso@230
|
582 _EOT_
|
pankso@230
|
583 last=""
|
pankso@230
|
584 grep ^TAGS= $WOK/*/receipt | grep -i "$SEARCH" | \
|
pankso@230
|
585 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
|
pankso@230
|
586 . $WOK/$pkg/receipt
|
pankso@230
|
587 package_entry
|
pankso@230
|
588 done
|
pankso@230
|
589 elif [ "$OBJECT" = "Receipt" ]; then
|
pankso@230
|
590 package_exist $SEARCH && cat << _EOT_
|
pankso@230
|
591
|
al@261
|
592 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
|
pankso@230
|
593 <pre>
|
pankso@230
|
594 $(if [ -f $WOK/$SEARCH/taz/*/receipt ]; then
|
pankso@230
|
595 cat $WOK/$SEARCH/taz/*/receipt
|
pankso@230
|
596 else
|
pankso@230
|
597 cat $WOK/$SEARCH/receipt
|
pankso@230
|
598 fi | htmlize)
|
pankso@230
|
599 </pre>
|
pankso@230
|
600 _EOT_
|
pankso@230
|
601 else
|
pankso@230
|
602 cat << _EOT_
|
pankso@230
|
603
|
al@261
|
604 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
|
pankso@235
|
605 <pre>
|
pankso@230
|
606 _EOT_
|
pankso@230
|
607 for pkg in `ls $WOK/ | grep "$SEARCH"`
|
pankso@230
|
608 do
|
pankso@230
|
609 . $WOK/$pkg/receipt
|
al@261
|
610 DESC=" <a href=\"?desc=$pkg\">$(gettext description)</a>"
|
pankso@230
|
611 [ -f $WOK/$pkg/description.txt ] || DESC=""
|
pankso@230
|
612 cat << _EOT_
|
pankso@230
|
613 $(package_entry)$DESC
|
pankso@230
|
614 _EOT_
|
pankso@230
|
615 done
|
pankso@230
|
616 equiv=$PACKAGES_REPOSITORY/packages.equiv
|
pankso@230
|
617 vpkgs="$(cat $equiv | cut -d= -f1 | grep $SEARCH)"
|
pankso@230
|
618 for vpkg in $vpkgs ; do
|
pankso@230
|
619 cat << _EOT_
|
pankso@230
|
620 </pre>
|
pankso@230
|
621
|
al@261
|
622 <h3>$(eval_gettext "Result for: \$SEARCH (package providing \$vpkg)")</h3>
|
pankso@235
|
623 <pre>
|
pankso@230
|
624 _EOT_
|
pankso@230
|
625 for pkg in $(grep $vpkg= $equiv | sed "s/$vpkg=//"); do
|
pankso@230
|
626 . $WOK/${pkg#*:}/receipt
|
pankso@230
|
627 package_entry
|
pankso@230
|
628 done
|
pankso@230
|
629 done
|
pankso@230
|
630 fi
|
pankso@230
|
631 cat << _EOT_
|
pankso@230
|
632 </pre>
|
pankso@230
|
633 _EOT_
|
pankso@230
|
634 xhtml_footer
|
pankso@230
|
635 fi
|
pankso@230
|
636
|
pankso@230
|
637 exit 0
|