slitaz-forge annotate pkgs/search.sh @ rev 278

pkgs: use LANG directly and so we keep $lang
author Christophe Lincoln <pankso@slitaz.org>
date Fri Apr 13 01:53:02 2012 +0200 (2012-04-13)
parents bc0ad61c35ad
children c0e954250657
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@266 6 . /usr/lib/slitaz/httphelper.sh
pankso@230 7
pankso@266 8 # This can be removed when we use $(GET var) PHP a like syntaxe from
pankso@266 9 # httphelper.sh
pankso@230 10 read QUERY_STRING
pankso@230 11 for i in $(echo $QUERY_STRING | sed 's/&/ /g'); do
pankso@230 12 i=$(httpd -d $i)
pankso@230 13 eval $i
pankso@230 14 done
pankso@230 15 LANG=$lang
pankso@230 16 SEARCH=$query
pankso@230 17 SLITAZ_VERSION=$version
pankso@230 18 OBJECT=$object
pankso@231 19 DATE=$(date +%Y-%m-%d\ %H:%M:%S)
pankso@230 20 VERSION=cooking
al@261 21 SCRIPT_NAME="search.sh"
al@261 22
pankso@268 23 # Internal variables
pankso@268 24 po="de fr pt ru zh"
pankso@268 25
al@261 26 # Internationalization
al@261 27 . /usr/bin/gettext.sh
al@261 28 TEXTDOMAIN='tazpkg-web'
al@261 29 export TEXTDOMAIN
pankso@239 30
pankso@230 31 if [ "$REQUEST_METHOD" = "GET" ]; then
pankso@230 32 SEARCH=""
pankso@230 33 VERBOSE=0
pankso@230 34 for i in $(echo $REQUEST_URI | sed 's/[?&]/ /g'); do
pankso@230 35 # i=$(httpd -d $i)
pankso@230 36 SLITAZ_VERSION=cooking
pankso@230 37 case "$(echo $i | tr [A-Z] [a-z])" in
pankso@230 38 query=*|search=*)
pankso@230 39 [ ${i#*=} == Search ] || SEARCH=${i#*=};;
pankso@230 40 object=*)
pankso@230 41 OBJECT=${i#*=};;
pankso@230 42 verbose=*)
pankso@230 43 VERBOSE=${i#*=};;
pankso@230 44 lang=*)
pankso@230 45 LANG=${i#*=};;
pankso@230 46 file=*)
pankso@230 47 SEARCH=${i#*=}
pankso@230 48 OBJECT=File;;
pankso@230 49 desc=*)
pankso@230 50 SEARCH=${i#*=}
pankso@230 51 OBJECT=Desc;;
pankso@230 52 tags=*)
pankso@230 53 SEARCH=${i#*=}
pankso@230 54 OBJECT=Tags;;
pankso@230 55 receipt=*)
pankso@230 56 SEARCH=${i#*=}
pankso@230 57 OBJECT=Receipt;;
pankso@230 58 filelist=*)
pankso@230 59 SEARCH=${i#*=}
pankso@230 60 OBJECT=File_list;;
pankso@230 61 package=*)
pankso@230 62 SEARCH=${i#*=}
pankso@230 63 OBJECT=Package;;
pankso@230 64 depends=*)
pankso@230 65 SEARCH=${i#*=}
pankso@230 66 OBJECT=Depends;;
pankso@230 67 builddepends=*)
pankso@230 68 SEARCH=${i#*=}
pankso@230 69 OBJECT=BuildDepends;;
pankso@230 70 fileoverlap=*)
pankso@230 71 SEARCH=${i#*=}
pankso@230 72 OBJECT=FileOverlap;;
pankso@230 73 version=s*|version=3*)
pankso@230 74 SLITAZ_VERSION=stable;;
pankso@230 75 version=[1-9]*)
pankso@230 76 i=${i%%.*}
pankso@230 77 SLITAZ_VERSION=${i#*=}.0;;
pankso@230 78 version=u*)
pankso@230 79 SLITAZ_VERSION=undigest;;
pankso@230 80 esac
pankso@230 81 done
pankso@230 82 [ -n "$SEARCH" ] && REQUEST_METHOD="POST"
pankso@230 83 [ "$SEARCH" == "." ] && SEARCH=
pankso@230 84 fi
pankso@230 85
pankso@268 86 # Content negotiation for Gettext
pankso@268 87 IFS=","
pankso@268 88 for lang in $HTTP_ACCEPT_LANGUAGE
pankso@268 89 do
pankso@268 90 lang=${lang%;*} lang=${lang# } lang=${lang%-*}
pankso@268 91 case "$lang" in
pankso@278 92 en) LANG="C" ;;
pankso@278 93 de) LANG="de_DE" ;;
pankso@278 94 es) LANG="es_ES" ;;
pankso@278 95 fr) LANG="fr_FR" ;;
pankso@278 96 it) LANG="it_IT" ;;
pankso@278 97 pt) LANG="pt_BR" ;;
pankso@278 98 ru) LANG="ru_RU" ;;
pankso@278 99 zh) LANG="zh_TW" ;;
pankso@268 100 esac
pankso@277 101 if echo "$po" | fgrep -q "$lang"; then
pankso@277 102 break
pankso@277 103 fi
pankso@268 104 done
pankso@268 105 unset IFS
pankso@278 106 export LANG LC_ALL=$LANG
pankso@230 107
al@261 108 case "$OBJECT" in
al@261 109 File) selected_file="selected";;
al@261 110 Desc) selected_desc="selected";;
al@261 111 Tags) selected_tags="selected";;
al@261 112 Receipt) selected_receipt="selected";;
al@261 113 File_list) selected_file_list="selected";;
al@261 114 Depends) selected_depends="selected";;
al@261 115 BuildDepends) selected_build_depends="selected";;
al@261 116 FileOverlap) selected_overlap="selected";;
al@261 117 esac
pankso@230 118
al@261 119 case "$SLITAZ_VERSION" in
al@261 120 tiny) selected_tiny="selected";;
al@261 121 1.0) selected_1="selected";;
al@261 122 2.0) selected_2="selected";;
al@261 123 3.0) selected_3="selected";;
al@261 124 stable) selected_stable="selected";;
al@261 125 undigest) selected_undigest="selected";;
al@261 126 esac
pankso@230 127
al@261 128 # unescape query
al@261 129 SEARCH="$(echo $SEARCH | sed 's/%2B/+/g; s/%3A/:/g; s|%2F|/|g')"
al@236 130
pankso@230 131 WOK=/home/slitaz/$SLITAZ_VERSION/wok
pankso@230 132 PACKAGES_REPOSITORY=/home/slitaz/$SLITAZ_VERSION/packages
pankso@230 133
pankso@266 134 # --> header function from httphelper
pankso@233 135 echo "Content-type: text/html"
pankso@230 136 echo
pankso@230 137
pankso@230 138 # Search form
pankso@230 139 search_form()
pankso@230 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/&/\&amp;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/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@266 383 #
pankso@266 384 # Handle GET requests
pankso@266 385 #
pankso@266 386 case " $(GET) " in
pankso@266 387 *\ debug\ *)
pankso@266 388 xhtml_header
pankso@266 389 echo "<h2>Debug info</h2>"
pankso@275 390 echo "<p>Auto detected language: LANG=$LANG (lang=$lang)</p>"
pankso@267 391 echo '<pre>'
pankso@266 392 httpinfo
pankso@267 393 echo '</pre>'
pankso@266 394 xhtml_footer
pankso@266 395 exit 0 ;;
pankso@266 396 esac
pankso@266 397
pankso@230 398 # Display search form and result if requested.
pankso@230 399 if [ "$REQUEST_METHOD" != "POST" ]; then
pankso@267 400 xhtml_header
pankso@266 401 echo "<h2>$(gettext "Search for packages")</h2>"
pankso@230 402 search_form
pankso@230 403 xhtml_footer
pankso@230 404 else
pankso@230 405 xhtml_header
pankso@266 406 echo "$(gettext "Search for packages")</h2>"
pankso@230 407 search_form
pankso@230 408 if [ "$OBJECT" = "Depends" ]; then
pankso@230 409 if [ -z "$SEARCH" ]; then
pankso@230 410 cat << _EOT_
pankso@230 411
al@261 412 <h3>$(gettext "Depends loops")</h3>
pankso@235 413 <pre>
pankso@230 414 _EOT_
pankso@230 415 for i in $WOK/*/receipt; do
pankso@230 416 PACKAGE=
pankso@230 417 DEPENDS=
pankso@230 418 . $i
pankso@230 419 echo "$PACKAGE $(echo $DEPENDS)"
pankso@230 420 done | show_loops
pankso@230 421 cat << _EOT_
pankso@230 422 </pre>
pankso@230 423 _EOT_
pankso@230 424 elif package_exist $SEARCH ; then
pankso@230 425 cat << _EOT_
pankso@230 426
al@261 427 <h3>$(eval_gettext "Dependency tree for: \$SEARCH")</h3>
pankso@235 428 <pre>
pankso@230 429 _EOT_
pankso@230 430 ALL_DEPS=""
pankso@230 431 dep_scan $SEARCH ""
pankso@230 432 SUGGESTED=""
pankso@230 433 . $WOK/$SEARCH/receipt
pankso@230 434 if [ -n "$SUGGESTED" ]; then
pankso@230 435 cat << _EOT_
pankso@230 436 </pre>
pankso@230 437
al@261 438 <h3>$(eval_gettext "Dependency tree for: \$SEARCH (SUGGESTED)")</h3>
pankso@235 439 <pre>
pankso@230 440 _EOT_
pankso@230 441 ALL_DEPS=""
pankso@230 442 dep_scan "$SUGGESTED" " "
pankso@230 443 fi
pankso@230 444 cat << _EOT_
pankso@230 445 </pre>
pankso@230 446
al@261 447 <h3>$(eval_gettext "Reverse dependency tree for: \$SEARCH")</h3>
pankso@235 448 <pre>
pankso@230 449 _EOT_
pankso@230 450 ALL_DEPS=""
pankso@230 451 rdep_scan $SEARCH
pankso@230 452 cat << _EOT_
pankso@230 453 </pre>
pankso@230 454 _EOT_
pankso@230 455 fi
pankso@230 456 elif [ "$OBJECT" = "BuildDepends" ]; then
pankso@230 457 if [ -z "$SEARCH" ]; then
pankso@230 458 cat << _EOT_
pankso@230 459
al@261 460 <h3>$(gettext "Build depends loops")</h3>
pankso@235 461 <pre>
pankso@230 462 _EOT_
pankso@230 463 for i in $WOK/*/receipt; do
pankso@230 464 PACKAGE=
pankso@230 465 WANTED=
pankso@230 466 BUILD_DEPENDS=
pankso@230 467 . $i
pankso@230 468 echo "$PACKAGE $WANTED $(echo $BUILD_DEPENDS)"
pankso@230 469 done | show_loops
pankso@230 470 cat << _EOT_
pankso@230 471 </pre>
pankso@230 472 _EOT_
pankso@230 473 elif package_exist $SEARCH ; then
pankso@230 474 cat << _EOT_
pankso@230 475
al@261 476 <h3>$(eval_gettext "\$SEARCH needs these packages to be built")</h3>
pankso@235 477 <pre>
pankso@230 478 _EOT_
pankso@230 479 ALL_DEPS=""
pankso@230 480 dep_scan $SEARCH "" build
pankso@230 481 cat << _EOT_
pankso@230 482 </pre>
pankso@230 483
al@261 484 <h3>$(eval_gettext "Packages who need \$SEARCH to be built")</h3>
pankso@235 485 <pre>
pankso@230 486 _EOT_
pankso@230 487 ALL_DEPS=""
pankso@230 488 rdep_scan $SEARCH build
pankso@230 489 cat << _EOT_
pankso@230 490 </pre>
pankso@230 491 _EOT_
pankso@230 492 fi
pankso@230 493 elif [ "$OBJECT" = "FileOverlap" ]; then
pankso@230 494 if package_exist $SEARCH ; then
pankso@230 495 cat << _EOT_
pankso@230 496
al@261 497 <h3>$(eval_gettext "These packages may overload files of \$SEARCH")</h3>
pankso@235 498 <pre>
pankso@230 499 _EOT_
pankso@230 500 ( unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep ^$SEARCH: ;
pankso@230 501 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep -v ^$SEARCH: ) | awk '
pankso@230 502 BEGIN { pkg=""; last="x" }
pankso@230 503 {
pankso@230 504 if ($2 == "") next
pankso@230 505 if (index($2,last) == 1 && substr($2,1+length(last),1) == "/")
pankso@230 506 delete file[last]
pankso@230 507 last=$2
pankso@230 508 if (pkg == "") pkg=$1
pankso@230 509 if ($1 == pkg) file[$2]=$1
pankso@230 510 else if (file[$2] == pkg) print
pankso@230 511 }
pankso@230 512 ' | display_packages_and_files
pankso@230 513 cat << _EOT_
pankso@230 514 </pre>
pankso@230 515 _EOT_
pankso@230 516 fi
pankso@230 517 elif [ "$OBJECT" = "File" ]; then
pankso@230 518 cat << _EOT_
pankso@230 519
al@261 520 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
pankso@235 521 <pre>
pankso@230 522 _EOT_
pankso@230 523 last=""
pankso@230 524 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \
pankso@230 525 | grep "$SEARCH" | while read pkg file; do
pankso@230 526 echo "$file" | grep -q "$SEARCH" || continue
pankso@230 527 if [ "$last" != "${pkg%:}" ]; then
pankso@230 528 last=${pkg%:}
pankso@230 529 (
pankso@230 530 . $WOK/$last/receipt
pankso@230 531 cat << _EOT_
pankso@230 532
pankso@230 533 <i>$(package_entry)</i>
pankso@230 534 _EOT_
pankso@230 535 )
pankso@230 536 fi
pankso@230 537 echo " $file"
pankso@230 538 done
pankso@230 539 elif [ "$OBJECT" = "File_list" ]; then
pankso@230 540 if package_exist $SEARCH; then
pankso@230 541 cat << _EOT_
pankso@230 542
al@261 543 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
pankso@235 544 <pre>
pankso@230 545 _EOT_
pankso@230 546 last=""
pankso@230 547 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \
pankso@230 548 | grep ^$SEARCH: | sed 's/.*: / /' | sort
pankso@230 549 cat << _EOT_
pankso@230 550 </pre>
pankso@235 551 <pre>
pankso@230 552 $(unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep ^$SEARCH: | wc -l | echonb file) \
pankso@230 553 $(busybox sed -n "/^$SEARCH$/{nnnpq}" $PACKAGES_REPOSITORY/packages.txt)
pankso@230 554 _EOT_
pankso@230 555 fi
pankso@230 556 elif [ "$OBJECT" = "Desc" ]; then
pankso@230 557 if [ -f $WOK/$SEARCH/description.txt ]; then
pankso@230 558 cat << _EOT_
pankso@230 559
al@261 560 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
pankso@230 561 <pre>
pankso@230 562 $(htmlize < $WOK/$SEARCH/description.txt)
pankso@230 563 </pre>
pankso@230 564 _EOT_
pankso@230 565 else
pankso@230 566 cat << _EOT_
pankso@230 567
al@261 568 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
pankso@235 569 <pre>
pankso@230 570 _EOT_
pankso@230 571 last=""
pankso@230 572 grep -i "$SEARCH" $PACKAGES_REPOSITORY/packages.desc | \
pankso@230 573 sort | while read pkg extras ; do
pankso@230 574 . $WOK/$pkg/receipt
pankso@230 575 package_entry
pankso@230 576 done
pankso@230 577 fi
pankso@230 578 elif [ "$OBJECT" = "Tags" ]; then
pankso@230 579 cat << _EOT_
pankso@230 580
al@261 581 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
pankso@235 582 <pre>
pankso@230 583 _EOT_
pankso@230 584 last=""
pankso@230 585 grep ^TAGS= $WOK/*/receipt | grep -i "$SEARCH" | \
pankso@230 586 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
pankso@230 587 . $WOK/$pkg/receipt
pankso@230 588 package_entry
pankso@230 589 done
pankso@230 590 elif [ "$OBJECT" = "Receipt" ]; then
pankso@230 591 package_exist $SEARCH && cat << _EOT_
pankso@230 592
al@261 593 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
pankso@230 594 <pre>
pankso@230 595 $(if [ -f $WOK/$SEARCH/taz/*/receipt ]; then
pankso@230 596 cat $WOK/$SEARCH/taz/*/receipt
pankso@230 597 else
pankso@230 598 cat $WOK/$SEARCH/receipt
pankso@230 599 fi | htmlize)
pankso@230 600 </pre>
pankso@230 601 _EOT_
pankso@230 602 else
pankso@230 603 cat << _EOT_
pankso@230 604
al@261 605 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
pankso@235 606 <pre>
pankso@230 607 _EOT_
pankso@230 608 for pkg in `ls $WOK/ | grep "$SEARCH"`
pankso@230 609 do
pankso@230 610 . $WOK/$pkg/receipt
al@261 611 DESC=" <a href=\"?desc=$pkg\">$(gettext description)</a>"
pankso@230 612 [ -f $WOK/$pkg/description.txt ] || DESC=""
pankso@230 613 cat << _EOT_
pankso@230 614 $(package_entry)$DESC
pankso@230 615 _EOT_
pankso@230 616 done
pankso@230 617 equiv=$PACKAGES_REPOSITORY/packages.equiv
pankso@230 618 vpkgs="$(cat $equiv | cut -d= -f1 | grep $SEARCH)"
pankso@230 619 for vpkg in $vpkgs ; do
pankso@230 620 cat << _EOT_
pankso@230 621 </pre>
pankso@230 622
al@261 623 <h3>$(eval_gettext "Result for: \$SEARCH (package providing \$vpkg)")</h3>
pankso@235 624 <pre>
pankso@230 625 _EOT_
pankso@230 626 for pkg in $(grep $vpkg= $equiv | sed "s/$vpkg=//"); do
pankso@230 627 . $WOK/${pkg#*:}/receipt
pankso@230 628 package_entry
pankso@230 629 done
pankso@230 630 done
pankso@230 631 fi
pankso@230 632 cat << _EOT_
pankso@230 633 </pre>
pankso@230 634 _EOT_
pankso@230 635 xhtml_footer
pankso@230 636 fi
pankso@230 637
pankso@230 638 exit 0