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

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