slitaz-forge rev 230
Add search.sh used on pkgs.slitaz.org
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Thu Apr 05 18:29:07 2012 +0200 (2012-04-05) |
parents | 1a4dc885c902 |
children | be4caa2da85f |
files | pkgs/search.sh |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/pkgs/search.sh Thu Apr 05 18:29:07 2012 +0200 1.3 @@ -0,0 +1,779 @@ 1.4 +#!/bin/sh 1.5 +# Tiny CGI search engine for SliTaz packages on http://pkgs.slitaz.org/ 1.6 +# Christophe Lincoln <pankso@slitaz.org> 1.7 +# 1.8 + 1.9 +renice 20 1.10 +read QUERY_STRING 1.11 +for i in $(echo $QUERY_STRING | sed 's/&/ /g'); do 1.12 + i=$(httpd -d $i) 1.13 + eval $i 1.14 +done 1.15 +LANG=$lang 1.16 +SEARCH=$query 1.17 +SLITAZ_VERSION=$version 1.18 +OBJECT=$object 1.19 +DATE=`date +%Y-%m-%d\ %H:%M:%S` 1.20 +VERSION=cooking 1.21 +if [ "$REQUEST_METHOD" = "GET" ]; then 1.22 + SEARCH="" 1.23 + VERBOSE=0 1.24 + for i in $(echo $REQUEST_URI | sed 's/[?&]/ /g'); do 1.25 + # i=$(httpd -d $i) 1.26 + SLITAZ_VERSION=cooking 1.27 + case "$(echo $i | tr [A-Z] [a-z])" in 1.28 + query=*|search=*) 1.29 + [ ${i#*=} == Search ] || SEARCH=${i#*=};; 1.30 + object=*) 1.31 + OBJECT=${i#*=};; 1.32 + verbose=*) 1.33 + VERBOSE=${i#*=};; 1.34 + lang=*) 1.35 + LANG=${i#*=};; 1.36 + file=*) 1.37 + SEARCH=${i#*=} 1.38 + OBJECT=File;; 1.39 + desc=*) 1.40 + SEARCH=${i#*=} 1.41 + OBJECT=Desc;; 1.42 + tags=*) 1.43 + SEARCH=${i#*=} 1.44 + OBJECT=Tags;; 1.45 + receipt=*) 1.46 + SEARCH=${i#*=} 1.47 + OBJECT=Receipt;; 1.48 + filelist=*) 1.49 + SEARCH=${i#*=} 1.50 + OBJECT=File_list;; 1.51 + package=*) 1.52 + SEARCH=${i#*=} 1.53 + OBJECT=Package;; 1.54 + depends=*) 1.55 + SEARCH=${i#*=} 1.56 + OBJECT=Depends;; 1.57 + builddepends=*) 1.58 + SEARCH=${i#*=} 1.59 + OBJECT=BuildDepends;; 1.60 + fileoverlap=*) 1.61 + SEARCH=${i#*=} 1.62 + OBJECT=FileOverlap;; 1.63 + version=s*|version=3*) 1.64 + SLITAZ_VERSION=stable;; 1.65 + version=[1-9]*) 1.66 + i=${i%%.*} 1.67 + SLITAZ_VERSION=${i#*=}.0;; 1.68 + version=u*) 1.69 + SLITAZ_VERSION=undigest;; 1.70 + esac 1.71 + done 1.72 + [ -n "$SEARCH" ] && REQUEST_METHOD="POST" 1.73 + [ "$SEARCH" == "." ] && SEARCH= 1.74 +fi 1.75 + 1.76 +case "$OBJECT" in 1.77 +File) selected_file="selected";; 1.78 +Desc) selected_desc="selected";; 1.79 +Tags) selected_tags="selected";; 1.80 +Receipt) selected_receipt="selected";; 1.81 +File_list) selected_file_list="selected";; 1.82 +Depends) selected_depends="selected";; 1.83 +BuildDepends) selected_build_depends="selected";; 1.84 +FileOverlap) selected_overlap="selected";; 1.85 +esac 1.86 + 1.87 +case "$SLITAZ_VERSION" in 1.88 +tiny) selected_tiny="selected";; 1.89 +1.0) selected_1="selected";; 1.90 +2.0) selected_2="selected";; 1.91 +stable) selected_stable="selected";; 1.92 +undigest) selected_undigest="selected";; 1.93 +esac 1.94 + 1.95 +# unescape query 1.96 +SEARCH="$(echo $SEARCH | sed 's/%2B/+/g' | sed 's/%3A/:/g' | sed 's|%2F|/|g')" 1.97 + 1.98 +if [ -z "$LANG" ]; then 1.99 + for i in $(echo $HTTP_ACCEPT_LANGUAGE | sed 's/[,;]/ /g'); do 1.100 + case "$i" in 1.101 + fr|de|pt|cn) 1.102 + LANG=$i 1.103 + break;; 1.104 + esac 1.105 + done 1.106 +fi 1.107 + 1.108 +package="Package" 1.109 +file="File" 1.110 +desc="Description" 1.111 +tags="Tags" 1.112 +receipt="Receipt" 1.113 +file_list="File list" 1.114 +depends="Depends" 1.115 +bdepends="Build depends" 1.116 +loops="loops" 1.117 +search="Search" 1.118 +cooking="cooking" 1.119 +stable="stable" 1.120 +result="Result for : $SEARCH" 1.121 +noresult="No package $SEARCH" 1.122 +deptree="Dependency tree for : $SEARCH" 1.123 +rdeptree="Reverse dependency tree for : $SEARCH" 1.124 +bdeplist="$SEARCH needs these packages to be built" 1.125 +rbdeplist="Packages who need $SEARCH to be built" 1.126 +overloading="Theses packages may overload files of " 1.127 +overlap="common files" 1.128 +charset="ISO-8859-1" 1.129 + 1.130 +case "$LANG" in 1.131 + 1.132 +fr) package="Paquet" 1.133 + receipt="Recette" 1.134 + depends="Dépendances" 1.135 + bdepends="Fabrication" 1.136 + loops="sans fin" 1.137 + search="Recherche" 1.138 + result="Recherche de : $SEARCH" 1.139 + noresult="Paquet $SEARCH introuvable" 1.140 + deptree="Arbre des dépendances de $SEARCH" 1.141 + rdeptree="Arbre inversé des dépendances de $SEARCH" 1.142 + bdeplist="$SEARCH a besion de ces paquets pour être fabriqué" 1.143 + rbdeplist="Paquets ayant besion de $SEARCH pour être fabriqués" 1.144 + overloading="Paquets pouvant écraser des fichiers de " 1.145 + overlap="Fichiers communs" 1.146 + file_list="Liste des fichiers" 1.147 + file="Fichier";; 1.148 + 1.149 +de) package="Paket" 1.150 + depends="Abhängigkeiten" 1.151 + desc="Beschreibung" 1.152 + search="Suche" 1.153 + cooking="Cooking" 1.154 + stable="Stable" 1.155 + result="Resultate für : $SEARCH" 1.156 + noresult="Kein Paket für $SEARCH" 1.157 + deptree="Abhängigkeiten von: $SEARCH" 1.158 + rdeptree="Abhängigkeit für: $SEARCH" 1.159 + file_list="Datei liste" 1.160 + file="Datei";; 1.161 + 1.162 +pt) package="Pacote" 1.163 + search="Buscar" 1.164 + cooking="cooking" 1.165 + stable="stable" 1.166 + result="Resultado para : $SEARCH" 1.167 + noresult="Sem resultado: $SEARCH" 1.168 + deptree="Árvore de dependências para: $SEARCH" 1.169 + rdeptree="Árvore de dependências reversa para: $SEARCH" 1.170 + depends="Dependências" 1.171 + desc="Descrição" 1.172 + file_list="Arquivo lista" 1.173 + file="Arquivo";; 1.174 + 1.175 +cn) package="软件包:" 1.176 + cooking="å¼€å‘版" 1.177 + stable="稳定版" 1.178 + desc="æè¿°" 1.179 + tags="æ ‡ç¾" 1.180 + depends="ä¾èµ–" 1.181 + file="文件" 1.182 + file_list="文件列表" 1.183 + search="Search" 1.184 + result="Result for : $SEARCH" 1.185 + noresult="No package $SEARCH" 1.186 + deptree="Dependency tree for : $SEARCH" 1.187 + rdeptree="Reverse dependency tree for : $SEARCH" 1.188 + charset="UTF-8";; 1.189 + 1.190 +*) LANG="en";; 1.191 + 1.192 +esac 1.193 + 1.194 +WOK=/home/slitaz/$SLITAZ_VERSION/wok 1.195 +PACKAGES_REPOSITORY=/home/slitaz/$SLITAZ_VERSION/packages 1.196 + 1.197 +echo Content-type: text/html 1.198 +echo 1.199 + 1.200 +# Search form 1.201 +search_form() 1.202 +{ 1.203 + cat << _EOT_ 1.204 + 1.205 +<div style="text-align: center; padding: 20px;"> 1.206 +<form method="post" action="$(basename $SCRIPT_NAME)"> 1.207 + <input type="hidden" name="lang" value="$LANG" /> 1.208 + <select name="object"> 1.209 + <option value="Package">$package</option> 1.210 + <option $selected_desc value="Desc">$desc</option> 1.211 + <option $selected_tags value="Tags">$tags</option> 1.212 + <option $selected_receipt value="Receipt">$receipt</option> 1.213 + <option $selected_depends value="Depends">$depends</option> 1.214 + <option $selected_build_depends value="BuildDepends">$bdepends</option> 1.215 + <option $selected_file value="File">$file</option> 1.216 + <option $selected_file_list value="File_list">$file_list</option> 1.217 + <option $selected_overlap value="FileOverlap">$overlap</option> 1.218 + </select> 1.219 + <strong>:</strong> 1.220 + <input type="text" name="query" size="20" value="$SEARCH" /> 1.221 + <select name="version"> 1.222 + <option value="cooking">$cooking</option> 1.223 + <option $selected_stable value="stable">3.0</option> 1.224 + <option $selected_2 value="2.0">2.0</option> 1.225 + <option $selected_1 value="1.0">1.0</option> 1.226 + <option $selected_tiny value="tiny">tiny</option> 1.227 + <option $selected_undigest value="undigest">undigest</option> 1.228 + </select> 1.229 + <input type="submit" name="search" value="$search" /> 1.230 +</form> 1.231 +</div> 1.232 +_EOT_ 1.233 +} 1.234 + 1.235 +# xHTML Header. 1.236 +xhtml_header() 1.237 +{ 1.238 + cat << _EOF_ 1.239 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 1.240 + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 1.241 +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="$LANG" lang="$LANG"> 1.242 +<head> 1.243 + <title>SliTaz Packages - Search $SEARCH</title> 1.244 + <meta http-equiv="content-type" content="text/html; charset=$charset" /> 1.245 + <meta name="description" content="Au sujet de SliTaz GNU/Linux mini système d'exploitation" /> 1.246 + <meta name="keywords" lang="fr" content="Système, libre, gnu, linux, opensource, livecd" /> 1.247 + <meta name="robots" content="index, follow, all" /> 1.248 + <meta name="revisit-after" content="7 days" /> 1.249 + <meta name="expires" content="never" /> 1.250 + <meta name="modified" content="$DATE" /> 1.251 + <meta name="author" content="ash, awk, grep, sed and cat"/> 1.252 + <meta name="publisher" content="www.slitaz.org" /> 1.253 + <link rel="shortcut icon" href="style/favicon.ico" /> 1.254 + <link rel="stylesheet" type="text/css" href="style/slitaz.css" /> 1.255 + <style type="text/css"> 1.256 + 1.257 +input[type=text] { 1.258 +# width: inherit; 1.259 + width: 40%; 1.260 +} 1.261 + 1.262 +#content { 1.263 + margin: 6px 40px 0px 0px; 1.264 +} 1.265 + 1.266 +#copy { 1.267 + text-align: center; 1.268 +} 1.269 + 1.270 +#bottom { 1.271 + text-align: center; 1.272 +} 1.273 + 1.274 + </style> 1.275 +</head> 1.276 +<body> 1.277 + 1.278 +<!-- Header --> 1.279 +<div id="header"> 1.280 + <a name="top"></a> 1.281 + <div id="logo"></div> 1.282 + <div id="network"> 1.283 + <a href="http://www.slitaz.org/"> 1.284 + <img src="style/home.png" alt="[ home ]" /></a> 1.285 + <a href="http://scn.slitaz.org/">Community</a> 1.286 + <a href="http://doc.slitaz.org/" title="SliTaz Community Documentation">Doc</a> 1.287 + <a href="http://forum.slitaz.org/" title="Slitaz Forum">Forum</a> 1.288 + <a href="http://bugs.slitaz.org/" title="Bug Tracking System">Bugs</a> 1.289 + <a href="http://hg.slitaz.org/" title="SliTaz repositories">Hg</a> 1.290 + <a href="http://cook.slitaz.org/" title="SliTaz build bot">BB</a> 1.291 + </div> 1.292 + <h1><a href="http://pkgs.slitaz.org/">SliTaz Packages</a></h1> 1.293 +</div> 1.294 +_EOF_ 1.295 +} 1.296 + 1.297 +# xHTML Footer. 1.298 +xhtml_footer() 1.299 +{ 1.300 + cat << _EOT_ 1.301 +<center> 1.302 +<i>$(ls $WOK/ | wc -l) packages and $(unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | wc -l) files in $SLITAZ_VERSION database</i> 1.303 +</center> 1.304 + 1.305 +<!-- End of content --> 1.306 +</div> 1.307 +<div id="content_bottom"> 1.308 +<div class="bottom_left"></div> 1.309 +<div class="bottom_right"></div> 1.310 +</div> 1.311 + 1.312 +<!-- Start of footer and copy notice --> 1.313 +<div id="copy"> 1.314 +<p> 1.315 +Dernière modification : $DATE - 1.316 +<a href="#top">Top of the page</a> 1.317 +</p> 1.318 +<p> 1.319 +Copyright © $(date +%Y) <a href="http://www.slitaz.org/">SliTaz</a> - 1.320 +<a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a> 1.321 +</p> 1.322 +<!-- End of copy --> 1.323 +</div> 1.324 + 1.325 +<!-- Bottom and logo's --> 1.326 +<div id="bottom"> 1.327 +<p> 1.328 +<a href="http://validator.w3.org/check?uri=referer"><img 1.329 + src="style/xhtml10.png" alt="Valid XHTML 1.0" 1.330 + title="Code validé XHTML 1.0" 1.331 + style="width: 80px; height: 15px;" /></a> 1.332 +</p> 1.333 +</div> 1.334 + 1.335 +</body> 1.336 +</html> 1.337 +_EOT_ 1.338 +} 1.339 + 1.340 +installed_size() 1.341 +{ 1.342 +[ $VERBOSE -gt 0 ] && 1.343 +grep -A 3 "^$1\$" $PACKAGES_REPOSITORY/packages.txt | \ 1.344 + grep installed | sed 's/.*(\(.*\) installed.*/(\1) /' 1.345 +} 1.346 + 1.347 +package_entry() 1.348 +{ 1.349 +if [ -s "$(dirname $0)/$SLITAZ_VERSION/$CATEGORY.html" ]; then 1.350 + cat << _EOT_ 1.351 +<a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> $(installed_size $PACKAGE): $SHORT_DESC 1.352 +_EOT_ 1.353 +else 1.354 + PACKAGE_HREF="<u>$PACKAGE</u>" 1.355 + PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg" 1.356 + nslookup mirror.slitaz.org | grep -q 127.0.0.1 && 1.357 + PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$(cd /var/www/slitaz/mirror/packages/$SLITAZ_VERSION ; ls $PACKAGE-$VERSION*.tazpkg)" 1.358 + busybox wget -s $PACKAGE_URL 2> /dev/null && 1.359 + PACKAGE_HREF="<a href=\"$PACKAGE_URL\">$PACKAGE</a>" 1.360 + cat << _EOT_ 1.361 +$PACKAGE_HREF $(installed_size $PACKAGE): $SHORT_DESC 1.362 +_EOT_ 1.363 +fi 1.364 +} 1.365 + 1.366 +# Show loop in depends/build_depends chains 1.367 +show_loops() 1.368 +{ 1.369 + awk ' 1.370 +function chkloop(pkg, i, n) 1.371 +{ 1.372 + if (n < 8) 1.373 + for (i = 1; i <= split(deps[pkg],curdep," "); i++) { 1.374 + if (curdep[i] == base || chkloop(curdep[i], 0, n+1)) { 1.375 + split(deps[pkg],curdep," ") 1.376 + p = curdep[i] " " p 1.377 + return 1 1.378 + } 1.379 + } 1.380 + return 0 1.381 +} 1.382 +{ 1.383 + for (i = 2; i <= NF; i++) 1.384 + deps[$1] = deps[$1] " " $i 1.385 +} 1.386 +END { 1.387 + for (pkg in deps) { 1.388 + base = pkg 1.389 + p = "" 1.390 + if (chkloop(pkg, 0, 0)) 1.391 + print pkg " " p 1.392 + #print pkg " : " p "..." 1.393 + } 1.394 +}' | while read line; do 1.395 + set -- $line 1.396 + case " $last " in 1.397 + *\ $1\ *) continue 1.398 + esac 1.399 + last="$line" 1.400 + pkg=$1 1.401 + shift 1.402 + echo $pkg ":" $@ "..." 1.403 +done 1.404 +} 1.405 + 1.406 +# recursive dependencies scan 1.407 +dep_scan() 1.408 +{ 1.409 +for i in $1; do 1.410 + case " $ALL_DEPS " in 1.411 + *\ $i\ *) continue;; 1.412 + esac 1.413 + ALL_DEPS="$ALL_DEPS $i" 1.414 + if [ -n "$2" ]; then 1.415 + echo -n "$2" 1.416 + ( 1.417 + . $WOK/$i/receipt 1.418 + package_entry 1.419 + ) 1.420 + fi 1.421 + [ -f $WOK/$i/receipt ] || continue 1.422 + DEPENDS="" 1.423 + BUILD_DEPENDS="" 1.424 + WANTED="" 1.425 + . $WOK/$i/receipt 1.426 + if [ -n "$3" ]; then 1.427 + [ -n "$BUILD_DEPENDS$WANTED" ] && 1.428 + dep_scan "$WANTED $BUILD_DEPENDS" "$2 " $3 1.429 + else 1.430 + [ -n "$DEPENDS" ] && dep_scan "$DEPENDS" "$2 " 1.431 + fi 1.432 +done 1.433 +} 1.434 + 1.435 +# recursive reverse dependencies scan 1.436 +rdep_scan() 1.437 +{ 1.438 +SEARCH=$1 1.439 +case "$SEARCH" in 1.440 +glibc-base|gcc-lib-base) cat <<EOT 1.441 + glibc-base and gcc-lib-base are implicit dependencies, 1.442 + <b>every</b> package is supposed to depend on them. 1.443 +EOT 1.444 + return;; 1.445 +esac 1.446 +for i in $WOK/* ; do 1.447 + DEPENDS="" 1.448 + BUILD_DEPENDS="" 1.449 + WANTED="" 1.450 + . $i/receipt 1.451 + if [ -n "$2" ]; then 1.452 + echo "$(basename $i) $(echo $WANTED $BUILD_DEPENDS)" 1.453 + else 1.454 + echo "$(basename $i) $(echo $DEPENDS)" 1.455 + fi 1.456 +done | awk -v search=$SEARCH ' 1.457 +function show_deps(deps, all_deps, pkg, space) 1.458 +{ 1.459 + if (all_deps[pkg] == 1) return 1.460 + all_deps[pkg] = 1 1.461 + if (space != "") printf "%s%s\n",space,pkg 1.462 + for (i = 1; i <= split(deps[pkg], mydeps, " "); i++) { 1.463 + show_deps(deps, all_deps, mydeps[i],"////" space) 1.464 + } 1.465 +} 1.466 + 1.467 +{ 1.468 + all_deps[$1] = 0 1.469 + for (i = 2; i <= NF; i++) 1.470 + deps[$i] = deps[$i] " " $1 1.471 +} 1.472 + 1.473 +END { 1.474 + show_deps(deps, all_deps, search, "") 1.475 +} 1.476 +' | while read pkg; do 1.477 + . $WOK/${pkg##*/}/receipt 1.478 + cat << _EOT_ 1.479 +$(echo ${pkg%/*} | sed 's|/| |g') $(package_entry) 1.480 +_EOT_ 1.481 +done 1.482 +} 1.483 + 1.484 +# Check package exists 1.485 +package_exist() 1.486 +{ 1.487 + [ -f $WOK/$1/receipt ] && return 0 1.488 + cat << _EOT_ 1.489 + 1.490 +<h3>$noresult</h3> 1.491 +<pre class="package"> 1.492 +_EOT_ 1.493 + return 1 1.494 +} 1.495 + 1.496 +# Display < > & 1.497 +htmlize() 1.498 +{ 1.499 + sed -e 's/&/\&/g' -e 's/</\</g' -e 's/>/\>/g' 1.500 +} 1.501 + 1.502 +echonb() 1.503 +{ 1.504 +read n 1.505 +echo -n "$n $1" 1.506 +[ $n -gt 1 ] && echo -n s 1.507 +} 1.508 + 1.509 +display_packages_and_files() 1.510 +{ 1.511 +last="" 1.512 +while read pkg file; do 1.513 + pkg=${pkg%:} 1.514 + if [ "$pkg" != "$last" ]; then 1.515 + . $WOK/$pkg/receipt 1.516 + 1.517 + package_entry 1.518 + last=$pkg 1.519 + fi 1.520 + echo " $file" 1.521 +done 1.522 +} 1.523 + 1.524 +# Display search form and result if requested. 1.525 +if [ "$REQUEST_METHOD" != "POST" ]; then 1.526 + xhtml_header 1.527 + cat << _EOT_ 1.528 + 1.529 +<!-- Content --> 1.530 +<div id="content"> 1.531 +<a name="content"></a> 1.532 + 1.533 +<h1>$package</h1> 1.534 +<h2>$search</h2> 1.535 +_EOT_ 1.536 + search_form 1.537 + xhtml_footer 1.538 +else 1.539 + xhtml_header 1.540 + cat << _EOT_ 1.541 + 1.542 +<!-- Content --> 1.543 +<div id="content"> 1.544 +<a name="content"></a> 1.545 + 1.546 +<h1>$package</h1> 1.547 +<h2>$search</h2> 1.548 +_EOT_ 1.549 + search_form 1.550 + if [ "$OBJECT" = "Depends" ]; then 1.551 + if [ -z "$SEARCH" ]; then 1.552 + cat << _EOT_ 1.553 + 1.554 +<h3>$depends $loops</h3> 1.555 +<pre class="package"> 1.556 +_EOT_ 1.557 + for i in $WOK/*/receipt; do 1.558 + PACKAGE= 1.559 + DEPENDS= 1.560 + . $i 1.561 + echo "$PACKAGE $(echo $DEPENDS)" 1.562 + done | show_loops 1.563 + cat << _EOT_ 1.564 +</pre> 1.565 +_EOT_ 1.566 + elif package_exist $SEARCH ; then 1.567 + cat << _EOT_ 1.568 + 1.569 +<h3>$deptree</h3> 1.570 +<pre class="package"> 1.571 +_EOT_ 1.572 + ALL_DEPS="" 1.573 + dep_scan $SEARCH "" 1.574 + SUGGESTED="" 1.575 + . $WOK/$SEARCH/receipt 1.576 + if [ -n "$SUGGESTED" ]; then 1.577 + cat << _EOT_ 1.578 +</pre> 1.579 + 1.580 +<h3>$deptree (SUGGESTED)</h3> 1.581 +<pre class="package"> 1.582 +_EOT_ 1.583 + ALL_DEPS="" 1.584 + dep_scan "$SUGGESTED" " " 1.585 + fi 1.586 + cat << _EOT_ 1.587 +</pre> 1.588 + 1.589 +<h3>$rdeptree</h3> 1.590 +<pre class="package"> 1.591 +_EOT_ 1.592 + ALL_DEPS="" 1.593 + rdep_scan $SEARCH 1.594 + cat << _EOT_ 1.595 +</pre> 1.596 +_EOT_ 1.597 + fi 1.598 + elif [ "$OBJECT" = "BuildDepends" ]; then 1.599 + if [ -z "$SEARCH" ]; then 1.600 + cat << _EOT_ 1.601 + 1.602 +<h3>$bdepends $loops</h3> 1.603 +<pre class="package"> 1.604 +_EOT_ 1.605 + for i in $WOK/*/receipt; do 1.606 + PACKAGE= 1.607 + WANTED= 1.608 + BUILD_DEPENDS= 1.609 + . $i 1.610 + echo "$PACKAGE $WANTED $(echo $BUILD_DEPENDS)" 1.611 + done | show_loops 1.612 + cat << _EOT_ 1.613 +</pre> 1.614 +_EOT_ 1.615 + elif package_exist $SEARCH ; then 1.616 + cat << _EOT_ 1.617 + 1.618 +<h3>$bdeplist</h3> 1.619 +<pre class="package"> 1.620 +_EOT_ 1.621 + ALL_DEPS="" 1.622 + dep_scan $SEARCH "" build 1.623 + cat << _EOT_ 1.624 +</pre> 1.625 + 1.626 +<h3>$rbdeplist</h3> 1.627 +<pre class="package"> 1.628 +_EOT_ 1.629 + ALL_DEPS="" 1.630 + rdep_scan $SEARCH build 1.631 + cat << _EOT_ 1.632 +</pre> 1.633 +_EOT_ 1.634 + fi 1.635 + elif [ "$OBJECT" = "FileOverlap" ]; then 1.636 + if package_exist $SEARCH ; then 1.637 + cat << _EOT_ 1.638 + 1.639 +<h3>$overloading $SEARCH</h3> 1.640 +<pre class="package"> 1.641 +_EOT_ 1.642 + ( unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep ^$SEARCH: ; 1.643 + unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep -v ^$SEARCH: ) | awk ' 1.644 +BEGIN { pkg=""; last="x" } 1.645 +{ 1.646 + if ($2 == "") next 1.647 + if (index($2,last) == 1 && substr($2,1+length(last),1) == "/") 1.648 + delete file[last] 1.649 + last=$2 1.650 + if (pkg == "") pkg=$1 1.651 + if ($1 == pkg) file[$2]=$1 1.652 + else if (file[$2] == pkg) print 1.653 +} 1.654 +' | display_packages_and_files 1.655 + cat << _EOT_ 1.656 +</pre> 1.657 +_EOT_ 1.658 + fi 1.659 + elif [ "$OBJECT" = "File" ]; then 1.660 + cat << _EOT_ 1.661 + 1.662 +<h3>$result</h3> 1.663 +<pre class="package"> 1.664 +_EOT_ 1.665 + last="" 1.666 + unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \ 1.667 + | grep "$SEARCH" | while read pkg file; do 1.668 + echo "$file" | grep -q "$SEARCH" || continue 1.669 + if [ "$last" != "${pkg%:}" ]; then 1.670 + last=${pkg%:} 1.671 + ( 1.672 + . $WOK/$last/receipt 1.673 + cat << _EOT_ 1.674 + 1.675 +<i>$(package_entry)</i> 1.676 +_EOT_ 1.677 + ) 1.678 + fi 1.679 + echo " $file" 1.680 + done 1.681 + elif [ "$OBJECT" = "File_list" ]; then 1.682 + if package_exist $SEARCH; then 1.683 + cat << _EOT_ 1.684 + 1.685 +<h3>$result</h3> 1.686 +<pre class="package"> 1.687 +_EOT_ 1.688 + last="" 1.689 + unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \ 1.690 + | grep ^$SEARCH: | sed 's/.*: / /' | sort 1.691 + cat << _EOT_ 1.692 +</pre> 1.693 +<pre class="package"> 1.694 +$(unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep ^$SEARCH: | wc -l | echonb file) \ 1.695 +$(busybox sed -n "/^$SEARCH$/{nnnpq}" $PACKAGES_REPOSITORY/packages.txt) 1.696 +_EOT_ 1.697 + fi 1.698 + elif [ "$OBJECT" = "Desc" ]; then 1.699 + if [ -f $WOK/$SEARCH/description.txt ]; then 1.700 + cat << _EOT_ 1.701 + 1.702 +<h3>$result</h3> 1.703 +<pre class="package"> 1.704 +<pre> 1.705 +$(htmlize < $WOK/$SEARCH/description.txt) 1.706 +</pre> 1.707 +_EOT_ 1.708 + else 1.709 + cat << _EOT_ 1.710 + 1.711 +<h3>$result</h3> 1.712 +<pre class="package"> 1.713 +_EOT_ 1.714 + last="" 1.715 + grep -i "$SEARCH" $PACKAGES_REPOSITORY/packages.desc | \ 1.716 + sort | while read pkg extras ; do 1.717 + . $WOK/$pkg/receipt 1.718 + package_entry 1.719 + done 1.720 + fi 1.721 + elif [ "$OBJECT" = "Tags" ]; then 1.722 + cat << _EOT_ 1.723 + 1.724 +<h3>$result</h3> 1.725 +<pre class="package"> 1.726 +_EOT_ 1.727 + last="" 1.728 + grep ^TAGS= $WOK/*/receipt | grep -i "$SEARCH" | \ 1.729 + sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do 1.730 + . $WOK/$pkg/receipt 1.731 + package_entry 1.732 + done 1.733 + elif [ "$OBJECT" = "Receipt" ]; then 1.734 + package_exist $SEARCH && cat << _EOT_ 1.735 + 1.736 +<h3>$result</h3> 1.737 +<pre class="package"> 1.738 +<pre> 1.739 +$(if [ -f $WOK/$SEARCH/taz/*/receipt ]; then 1.740 + cat $WOK/$SEARCH/taz/*/receipt 1.741 + else 1.742 + cat $WOK/$SEARCH/receipt 1.743 + fi | htmlize) 1.744 +</pre> 1.745 +_EOT_ 1.746 + else 1.747 + cat << _EOT_ 1.748 + 1.749 +<h3>$result</h3> 1.750 +<pre class="package"> 1.751 +_EOT_ 1.752 + for pkg in `ls $WOK/ | grep "$SEARCH"` 1.753 + do 1.754 + . $WOK/$pkg/receipt 1.755 + DESC=" <a href=\"?desc=$pkg\">description</a>" 1.756 + [ -f $WOK/$pkg/description.txt ] || DESC="" 1.757 + cat << _EOT_ 1.758 +$(package_entry)$DESC 1.759 +_EOT_ 1.760 + done 1.761 + equiv=$PACKAGES_REPOSITORY/packages.equiv 1.762 + vpkgs="$(cat $equiv | cut -d= -f1 | grep $SEARCH)" 1.763 + for vpkg in $vpkgs ; do 1.764 + cat << _EOT_ 1.765 +</pre> 1.766 + 1.767 +<h3>$result (package providing $vpkg)</h3> 1.768 +<pre class="package"> 1.769 +_EOT_ 1.770 + for pkg in $(grep $vpkg= $equiv | sed "s/$vpkg=//"); do 1.771 + . $WOK/${pkg#*:}/receipt 1.772 + package_entry 1.773 + done 1.774 + done 1.775 + fi 1.776 + cat << _EOT_ 1.777 +</pre> 1.778 +_EOT_ 1.779 + xhtml_footer 1.780 +fi 1.781 + 1.782 +exit 0