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