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

pkgs: gettextize; looks like it works (via ?lang=* or preferred browser lang); I need help with right locales names (ru - don't work; ru_RU - work on SliTaz; ru_RU.utf8 - work on Mint) etc.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Wed Apr 11 04:16:55 2012 +0300 (2012-04-11)
parents 756484360720
children afb56b166f97
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/&/\&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@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