slitaz-forge annotate pkgs/search.sh @ 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
children be4caa2da85f
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>
pankso@230 4 #
pankso@230 5
pankso@230 6 renice 20
pankso@230 7 read QUERY_STRING
pankso@230 8 for i in $(echo $QUERY_STRING | sed 's/&/ /g'); do
pankso@230 9 i=$(httpd -d $i)
pankso@230 10 eval $i
pankso@230 11 done
pankso@230 12 LANG=$lang
pankso@230 13 SEARCH=$query
pankso@230 14 SLITAZ_VERSION=$version
pankso@230 15 OBJECT=$object
pankso@230 16 DATE=`date +%Y-%m-%d\ %H:%M:%S`
pankso@230 17 VERSION=cooking
pankso@230 18 if [ "$REQUEST_METHOD" = "GET" ]; then
pankso@230 19 SEARCH=""
pankso@230 20 VERBOSE=0
pankso@230 21 for i in $(echo $REQUEST_URI | sed 's/[?&]/ /g'); do
pankso@230 22 # i=$(httpd -d $i)
pankso@230 23 SLITAZ_VERSION=cooking
pankso@230 24 case "$(echo $i | tr [A-Z] [a-z])" in
pankso@230 25 query=*|search=*)
pankso@230 26 [ ${i#*=} == Search ] || SEARCH=${i#*=};;
pankso@230 27 object=*)
pankso@230 28 OBJECT=${i#*=};;
pankso@230 29 verbose=*)
pankso@230 30 VERBOSE=${i#*=};;
pankso@230 31 lang=*)
pankso@230 32 LANG=${i#*=};;
pankso@230 33 file=*)
pankso@230 34 SEARCH=${i#*=}
pankso@230 35 OBJECT=File;;
pankso@230 36 desc=*)
pankso@230 37 SEARCH=${i#*=}
pankso@230 38 OBJECT=Desc;;
pankso@230 39 tags=*)
pankso@230 40 SEARCH=${i#*=}
pankso@230 41 OBJECT=Tags;;
pankso@230 42 receipt=*)
pankso@230 43 SEARCH=${i#*=}
pankso@230 44 OBJECT=Receipt;;
pankso@230 45 filelist=*)
pankso@230 46 SEARCH=${i#*=}
pankso@230 47 OBJECT=File_list;;
pankso@230 48 package=*)
pankso@230 49 SEARCH=${i#*=}
pankso@230 50 OBJECT=Package;;
pankso@230 51 depends=*)
pankso@230 52 SEARCH=${i#*=}
pankso@230 53 OBJECT=Depends;;
pankso@230 54 builddepends=*)
pankso@230 55 SEARCH=${i#*=}
pankso@230 56 OBJECT=BuildDepends;;
pankso@230 57 fileoverlap=*)
pankso@230 58 SEARCH=${i#*=}
pankso@230 59 OBJECT=FileOverlap;;
pankso@230 60 version=s*|version=3*)
pankso@230 61 SLITAZ_VERSION=stable;;
pankso@230 62 version=[1-9]*)
pankso@230 63 i=${i%%.*}
pankso@230 64 SLITAZ_VERSION=${i#*=}.0;;
pankso@230 65 version=u*)
pankso@230 66 SLITAZ_VERSION=undigest;;
pankso@230 67 esac
pankso@230 68 done
pankso@230 69 [ -n "$SEARCH" ] && REQUEST_METHOD="POST"
pankso@230 70 [ "$SEARCH" == "." ] && SEARCH=
pankso@230 71 fi
pankso@230 72
pankso@230 73 case "$OBJECT" in
pankso@230 74 File) selected_file="selected";;
pankso@230 75 Desc) selected_desc="selected";;
pankso@230 76 Tags) selected_tags="selected";;
pankso@230 77 Receipt) selected_receipt="selected";;
pankso@230 78 File_list) selected_file_list="selected";;
pankso@230 79 Depends) selected_depends="selected";;
pankso@230 80 BuildDepends) selected_build_depends="selected";;
pankso@230 81 FileOverlap) selected_overlap="selected";;
pankso@230 82 esac
pankso@230 83
pankso@230 84 case "$SLITAZ_VERSION" in
pankso@230 85 tiny) selected_tiny="selected";;
pankso@230 86 1.0) selected_1="selected";;
pankso@230 87 2.0) selected_2="selected";;
pankso@230 88 stable) selected_stable="selected";;
pankso@230 89 undigest) selected_undigest="selected";;
pankso@230 90 esac
pankso@230 91
pankso@230 92 # unescape query
pankso@230 93 SEARCH="$(echo $SEARCH | sed 's/%2B/+/g' | sed 's/%3A/:/g' | sed 's|%2F|/|g')"
pankso@230 94
pankso@230 95 if [ -z "$LANG" ]; then
pankso@230 96 for i in $(echo $HTTP_ACCEPT_LANGUAGE | sed 's/[,;]/ /g'); do
pankso@230 97 case "$i" in
pankso@230 98 fr|de|pt|cn)
pankso@230 99 LANG=$i
pankso@230 100 break;;
pankso@230 101 esac
pankso@230 102 done
pankso@230 103 fi
pankso@230 104
pankso@230 105 package="Package"
pankso@230 106 file="File"
pankso@230 107 desc="Description"
pankso@230 108 tags="Tags"
pankso@230 109 receipt="Receipt"
pankso@230 110 file_list="File list"
pankso@230 111 depends="Depends"
pankso@230 112 bdepends="Build depends"
pankso@230 113 loops="loops"
pankso@230 114 search="Search"
pankso@230 115 cooking="cooking"
pankso@230 116 stable="stable"
pankso@230 117 result="Result for : $SEARCH"
pankso@230 118 noresult="No package $SEARCH"
pankso@230 119 deptree="Dependency tree for : $SEARCH"
pankso@230 120 rdeptree="Reverse dependency tree for : $SEARCH"
pankso@230 121 bdeplist="$SEARCH needs these packages to be built"
pankso@230 122 rbdeplist="Packages who need $SEARCH to be built"
pankso@230 123 overloading="Theses packages may overload files of "
pankso@230 124 overlap="common files"
pankso@230 125 charset="ISO-8859-1"
pankso@230 126
pankso@230 127 case "$LANG" in
pankso@230 128
pankso@230 129 fr) package="Paquet"
pankso@230 130 receipt="Recette"
pankso@230 131 depends="Dépendances"
pankso@230 132 bdepends="Fabrication"
pankso@230 133 loops="sans fin"
pankso@230 134 search="Recherche"
pankso@230 135 result="Recherche de : $SEARCH"
pankso@230 136 noresult="Paquet $SEARCH introuvable"
pankso@230 137 deptree="Arbre des dépendances de $SEARCH"
pankso@230 138 rdeptree="Arbre inversé des dépendances de $SEARCH"
pankso@230 139 bdeplist="$SEARCH a besion de ces paquets pour être fabriqué"
pankso@230 140 rbdeplist="Paquets ayant besion de $SEARCH pour être fabriqués"
pankso@230 141 overloading="Paquets pouvant écraser des fichiers de "
pankso@230 142 overlap="Fichiers communs"
pankso@230 143 file_list="Liste des fichiers"
pankso@230 144 file="Fichier";;
pankso@230 145
pankso@230 146 de) package="Paket"
pankso@230 147 depends="Abhängigkeiten"
pankso@230 148 desc="Beschreibung"
pankso@230 149 search="Suche"
pankso@230 150 cooking="Cooking"
pankso@230 151 stable="Stable"
pankso@230 152 result="Resultate für : $SEARCH"
pankso@230 153 noresult="Kein Paket für $SEARCH"
pankso@230 154 deptree="Abhängigkeiten von: $SEARCH"
pankso@230 155 rdeptree="Abhängigkeit für: $SEARCH"
pankso@230 156 file_list="Datei liste"
pankso@230 157 file="Datei";;
pankso@230 158
pankso@230 159 pt) package="Pacote"
pankso@230 160 search="Buscar"
pankso@230 161 cooking="cooking"
pankso@230 162 stable="stable"
pankso@230 163 result="Resultado para : $SEARCH"
pankso@230 164 noresult="Sem resultado: $SEARCH"
pankso@230 165 deptree="Árvore de dependências para: $SEARCH"
pankso@230 166 rdeptree="Árvore de dependências reversa para: $SEARCH"
pankso@230 167 depends="Dependências"
pankso@230 168 desc="Descrição"
pankso@230 169 file_list="Arquivo lista"
pankso@230 170 file="Arquivo";;
pankso@230 171
pankso@230 172 cn) package="软件包:"
pankso@230 173 cooking="å¼€å‘版"
pankso@230 174 stable="稳定版"
pankso@230 175 desc="æè¿°"
pankso@230 176 tags="标签"
pankso@230 177 depends="ä¾èµ–"
pankso@230 178 file="文件"
pankso@230 179 file_list="文件列表"
pankso@230 180 search="Search"
pankso@230 181 result="Result for : $SEARCH"
pankso@230 182 noresult="No package $SEARCH"
pankso@230 183 deptree="Dependency tree for : $SEARCH"
pankso@230 184 rdeptree="Reverse dependency tree for : $SEARCH"
pankso@230 185 charset="UTF-8";;
pankso@230 186
pankso@230 187 *) LANG="en";;
pankso@230 188
pankso@230 189 esac
pankso@230 190
pankso@230 191 WOK=/home/slitaz/$SLITAZ_VERSION/wok
pankso@230 192 PACKAGES_REPOSITORY=/home/slitaz/$SLITAZ_VERSION/packages
pankso@230 193
pankso@230 194 echo Content-type: text/html
pankso@230 195 echo
pankso@230 196
pankso@230 197 # Search form
pankso@230 198 search_form()
pankso@230 199 {
pankso@230 200 cat << _EOT_
pankso@230 201
pankso@230 202 <div style="text-align: center; padding: 20px;">
pankso@230 203 <form method="post" action="$(basename $SCRIPT_NAME)">
pankso@230 204 <input type="hidden" name="lang" value="$LANG" />
pankso@230 205 <select name="object">
pankso@230 206 <option value="Package">$package</option>
pankso@230 207 <option $selected_desc value="Desc">$desc</option>
pankso@230 208 <option $selected_tags value="Tags">$tags</option>
pankso@230 209 <option $selected_receipt value="Receipt">$receipt</option>
pankso@230 210 <option $selected_depends value="Depends">$depends</option>
pankso@230 211 <option $selected_build_depends value="BuildDepends">$bdepends</option>
pankso@230 212 <option $selected_file value="File">$file</option>
pankso@230 213 <option $selected_file_list value="File_list">$file_list</option>
pankso@230 214 <option $selected_overlap value="FileOverlap">$overlap</option>
pankso@230 215 </select>
pankso@230 216 <strong>:</strong>
pankso@230 217 <input type="text" name="query" size="20" value="$SEARCH" />
pankso@230 218 <select name="version">
pankso@230 219 <option value="cooking">$cooking</option>
pankso@230 220 <option $selected_stable value="stable">3.0</option>
pankso@230 221 <option $selected_2 value="2.0">2.0</option>
pankso@230 222 <option $selected_1 value="1.0">1.0</option>
pankso@230 223 <option $selected_tiny value="tiny">tiny</option>
pankso@230 224 <option $selected_undigest value="undigest">undigest</option>
pankso@230 225 </select>
pankso@230 226 <input type="submit" name="search" value="$search" />
pankso@230 227 </form>
pankso@230 228 </div>
pankso@230 229 _EOT_
pankso@230 230 }
pankso@230 231
pankso@230 232 # xHTML Header.
pankso@230 233 xhtml_header()
pankso@230 234 {
pankso@230 235 cat << _EOF_
pankso@230 236 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
pankso@230 237 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
pankso@230 238 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="$LANG" lang="$LANG">
pankso@230 239 <head>
pankso@230 240 <title>SliTaz Packages - Search $SEARCH</title>
pankso@230 241 <meta http-equiv="content-type" content="text/html; charset=$charset" />
pankso@230 242 <meta name="description" content="Au sujet de SliTaz GNU/Linux mini système d'exploitation" />
pankso@230 243 <meta name="keywords" lang="fr" content="Système, libre, gnu, linux, opensource, livecd" />
pankso@230 244 <meta name="robots" content="index, follow, all" />
pankso@230 245 <meta name="revisit-after" content="7 days" />
pankso@230 246 <meta name="expires" content="never" />
pankso@230 247 <meta name="modified" content="$DATE" />
pankso@230 248 <meta name="author" content="ash, awk, grep, sed and cat"/>
pankso@230 249 <meta name="publisher" content="www.slitaz.org" />
pankso@230 250 <link rel="shortcut icon" href="style/favicon.ico" />
pankso@230 251 <link rel="stylesheet" type="text/css" href="style/slitaz.css" />
pankso@230 252 <style type="text/css">
pankso@230 253
pankso@230 254 input[type=text] {
pankso@230 255 # width: inherit;
pankso@230 256 width: 40%;
pankso@230 257 }
pankso@230 258
pankso@230 259 #content {
pankso@230 260 margin: 6px 40px 0px 0px;
pankso@230 261 }
pankso@230 262
pankso@230 263 #copy {
pankso@230 264 text-align: center;
pankso@230 265 }
pankso@230 266
pankso@230 267 #bottom {
pankso@230 268 text-align: center;
pankso@230 269 }
pankso@230 270
pankso@230 271 </style>
pankso@230 272 </head>
pankso@230 273 <body>
pankso@230 274
pankso@230 275 <!-- Header -->
pankso@230 276 <div id="header">
pankso@230 277 <a name="top"></a>
pankso@230 278 <div id="logo"></div>
pankso@230 279 <div id="network">
pankso@230 280 <a href="http://www.slitaz.org/">
pankso@230 281 <img src="style/home.png" alt="[ home ]" /></a>
pankso@230 282 <a href="http://scn.slitaz.org/">Community</a>
pankso@230 283 <a href="http://doc.slitaz.org/" title="SliTaz Community Documentation">Doc</a>
pankso@230 284 <a href="http://forum.slitaz.org/" title="Slitaz Forum">Forum</a>
pankso@230 285 <a href="http://bugs.slitaz.org/" title="Bug Tracking System">Bugs</a>
pankso@230 286 <a href="http://hg.slitaz.org/" title="SliTaz repositories">Hg</a>
pankso@230 287 <a href="http://cook.slitaz.org/" title="SliTaz build bot">BB</a>
pankso@230 288 </div>
pankso@230 289 <h1><a href="http://pkgs.slitaz.org/">SliTaz Packages</a></h1>
pankso@230 290 </div>
pankso@230 291 _EOF_
pankso@230 292 }
pankso@230 293
pankso@230 294 # xHTML Footer.
pankso@230 295 xhtml_footer()
pankso@230 296 {
pankso@230 297 cat << _EOT_
pankso@230 298 <center>
pankso@230 299 <i>$(ls $WOK/ | wc -l) packages and $(unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | wc -l) files in $SLITAZ_VERSION database</i>
pankso@230 300 </center>
pankso@230 301
pankso@230 302 <!-- End of content -->
pankso@230 303 </div>
pankso@230 304 <div id="content_bottom">
pankso@230 305 <div class="bottom_left"></div>
pankso@230 306 <div class="bottom_right"></div>
pankso@230 307 </div>
pankso@230 308
pankso@230 309 <!-- Start of footer and copy notice -->
pankso@230 310 <div id="copy">
pankso@230 311 <p>
pankso@230 312 Dernière modification : $DATE -
pankso@230 313 <a href="#top">Top of the page</a>
pankso@230 314 </p>
pankso@230 315 <p>
pankso@230 316 Copyright &copy; $(date +%Y) <a href="http://www.slitaz.org/">SliTaz</a> -
pankso@230 317 <a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a>
pankso@230 318 </p>
pankso@230 319 <!-- End of copy -->
pankso@230 320 </div>
pankso@230 321
pankso@230 322 <!-- Bottom and logo's -->
pankso@230 323 <div id="bottom">
pankso@230 324 <p>
pankso@230 325 <a href="http://validator.w3.org/check?uri=referer"><img
pankso@230 326 src="style/xhtml10.png" alt="Valid XHTML 1.0"
pankso@230 327 title="Code validé XHTML 1.0"
pankso@230 328 style="width: 80px; height: 15px;" /></a>
pankso@230 329 </p>
pankso@230 330 </div>
pankso@230 331
pankso@230 332 </body>
pankso@230 333 </html>
pankso@230 334 _EOT_
pankso@230 335 }
pankso@230 336
pankso@230 337 installed_size()
pankso@230 338 {
pankso@230 339 [ $VERBOSE -gt 0 ] &&
pankso@230 340 grep -A 3 "^$1\$" $PACKAGES_REPOSITORY/packages.txt | \
pankso@230 341 grep installed | sed 's/.*(\(.*\) installed.*/(\1) /'
pankso@230 342 }
pankso@230 343
pankso@230 344 package_entry()
pankso@230 345 {
pankso@230 346 if [ -s "$(dirname $0)/$SLITAZ_VERSION/$CATEGORY.html" ]; then
pankso@230 347 cat << _EOT_
pankso@230 348 <a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> $(installed_size $PACKAGE): $SHORT_DESC
pankso@230 349 _EOT_
pankso@230 350 else
pankso@230 351 PACKAGE_HREF="<u>$PACKAGE</u>"
pankso@230 352 PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg"
pankso@230 353 nslookup mirror.slitaz.org | grep -q 127.0.0.1 &&
pankso@230 354 PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$(cd /var/www/slitaz/mirror/packages/$SLITAZ_VERSION ; ls $PACKAGE-$VERSION*.tazpkg)"
pankso@230 355 busybox wget -s $PACKAGE_URL 2> /dev/null &&
pankso@230 356 PACKAGE_HREF="<a href=\"$PACKAGE_URL\">$PACKAGE</a>"
pankso@230 357 cat << _EOT_
pankso@230 358 $PACKAGE_HREF $(installed_size $PACKAGE): $SHORT_DESC
pankso@230 359 _EOT_
pankso@230 360 fi
pankso@230 361 }
pankso@230 362
pankso@230 363 # Show loop in depends/build_depends chains
pankso@230 364 show_loops()
pankso@230 365 {
pankso@230 366 awk '
pankso@230 367 function chkloop(pkg, i, n)
pankso@230 368 {
pankso@230 369 if (n < 8)
pankso@230 370 for (i = 1; i <= split(deps[pkg],curdep," "); i++) {
pankso@230 371 if (curdep[i] == base || chkloop(curdep[i], 0, n+1)) {
pankso@230 372 split(deps[pkg],curdep," ")
pankso@230 373 p = curdep[i] " " p
pankso@230 374 return 1
pankso@230 375 }
pankso@230 376 }
pankso@230 377 return 0
pankso@230 378 }
pankso@230 379 {
pankso@230 380 for (i = 2; i <= NF; i++)
pankso@230 381 deps[$1] = deps[$1] " " $i
pankso@230 382 }
pankso@230 383 END {
pankso@230 384 for (pkg in deps) {
pankso@230 385 base = pkg
pankso@230 386 p = ""
pankso@230 387 if (chkloop(pkg, 0, 0))
pankso@230 388 print pkg " " p
pankso@230 389 #print pkg " : " p "..."
pankso@230 390 }
pankso@230 391 }' | while read line; do
pankso@230 392 set -- $line
pankso@230 393 case " $last " in
pankso@230 394 *\ $1\ *) continue
pankso@230 395 esac
pankso@230 396 last="$line"
pankso@230 397 pkg=$1
pankso@230 398 shift
pankso@230 399 echo $pkg ":" $@ "..."
pankso@230 400 done
pankso@230 401 }
pankso@230 402
pankso@230 403 # recursive dependencies scan
pankso@230 404 dep_scan()
pankso@230 405 {
pankso@230 406 for i in $1; do
pankso@230 407 case " $ALL_DEPS " in
pankso@230 408 *\ $i\ *) continue;;
pankso@230 409 esac
pankso@230 410 ALL_DEPS="$ALL_DEPS $i"
pankso@230 411 if [ -n "$2" ]; then
pankso@230 412 echo -n "$2"
pankso@230 413 (
pankso@230 414 . $WOK/$i/receipt
pankso@230 415 package_entry
pankso@230 416 )
pankso@230 417 fi
pankso@230 418 [ -f $WOK/$i/receipt ] || continue
pankso@230 419 DEPENDS=""
pankso@230 420 BUILD_DEPENDS=""
pankso@230 421 WANTED=""
pankso@230 422 . $WOK/$i/receipt
pankso@230 423 if [ -n "$3" ]; then
pankso@230 424 [ -n "$BUILD_DEPENDS$WANTED" ] &&
pankso@230 425 dep_scan "$WANTED $BUILD_DEPENDS" "$2 " $3
pankso@230 426 else
pankso@230 427 [ -n "$DEPENDS" ] && dep_scan "$DEPENDS" "$2 "
pankso@230 428 fi
pankso@230 429 done
pankso@230 430 }
pankso@230 431
pankso@230 432 # recursive reverse dependencies scan
pankso@230 433 rdep_scan()
pankso@230 434 {
pankso@230 435 SEARCH=$1
pankso@230 436 case "$SEARCH" in
pankso@230 437 glibc-base|gcc-lib-base) cat <<EOT
pankso@230 438 glibc-base and gcc-lib-base are implicit dependencies,
pankso@230 439 <b>every</b> package is supposed to depend on them.
pankso@230 440 EOT
pankso@230 441 return;;
pankso@230 442 esac
pankso@230 443 for i in $WOK/* ; do
pankso@230 444 DEPENDS=""
pankso@230 445 BUILD_DEPENDS=""
pankso@230 446 WANTED=""
pankso@230 447 . $i/receipt
pankso@230 448 if [ -n "$2" ]; then
pankso@230 449 echo "$(basename $i) $(echo $WANTED $BUILD_DEPENDS)"
pankso@230 450 else
pankso@230 451 echo "$(basename $i) $(echo $DEPENDS)"
pankso@230 452 fi
pankso@230 453 done | awk -v search=$SEARCH '
pankso@230 454 function show_deps(deps, all_deps, pkg, space)
pankso@230 455 {
pankso@230 456 if (all_deps[pkg] == 1) return
pankso@230 457 all_deps[pkg] = 1
pankso@230 458 if (space != "") printf "%s%s\n",space,pkg
pankso@230 459 for (i = 1; i <= split(deps[pkg], mydeps, " "); i++) {
pankso@230 460 show_deps(deps, all_deps, mydeps[i],"////" space)
pankso@230 461 }
pankso@230 462 }
pankso@230 463
pankso@230 464 {
pankso@230 465 all_deps[$1] = 0
pankso@230 466 for (i = 2; i <= NF; i++)
pankso@230 467 deps[$i] = deps[$i] " " $1
pankso@230 468 }
pankso@230 469
pankso@230 470 END {
pankso@230 471 show_deps(deps, all_deps, search, "")
pankso@230 472 }
pankso@230 473 ' | while read pkg; do
pankso@230 474 . $WOK/${pkg##*/}/receipt
pankso@230 475 cat << _EOT_
pankso@230 476 $(echo ${pkg%/*} | sed 's|/| |g') $(package_entry)
pankso@230 477 _EOT_
pankso@230 478 done
pankso@230 479 }
pankso@230 480
pankso@230 481 # Check package exists
pankso@230 482 package_exist()
pankso@230 483 {
pankso@230 484 [ -f $WOK/$1/receipt ] && return 0
pankso@230 485 cat << _EOT_
pankso@230 486
pankso@230 487 <h3>$noresult</h3>
pankso@230 488 <pre class="package">
pankso@230 489 _EOT_
pankso@230 490 return 1
pankso@230 491 }
pankso@230 492
pankso@230 493 # Display < > &
pankso@230 494 htmlize()
pankso@230 495 {
pankso@230 496 sed -e 's/&/\&amp;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g'
pankso@230 497 }
pankso@230 498
pankso@230 499 echonb()
pankso@230 500 {
pankso@230 501 read n
pankso@230 502 echo -n "$n $1"
pankso@230 503 [ $n -gt 1 ] && echo -n s
pankso@230 504 }
pankso@230 505
pankso@230 506 display_packages_and_files()
pankso@230 507 {
pankso@230 508 last=""
pankso@230 509 while read pkg file; do
pankso@230 510 pkg=${pkg%:}
pankso@230 511 if [ "$pkg" != "$last" ]; then
pankso@230 512 . $WOK/$pkg/receipt
pankso@230 513
pankso@230 514 package_entry
pankso@230 515 last=$pkg
pankso@230 516 fi
pankso@230 517 echo " $file"
pankso@230 518 done
pankso@230 519 }
pankso@230 520
pankso@230 521 # Display search form and result if requested.
pankso@230 522 if [ "$REQUEST_METHOD" != "POST" ]; then
pankso@230 523 xhtml_header
pankso@230 524 cat << _EOT_
pankso@230 525
pankso@230 526 <!-- Content -->
pankso@230 527 <div id="content">
pankso@230 528 <a name="content"></a>
pankso@230 529
pankso@230 530 <h1>$package</h1>
pankso@230 531 <h2>$search</h2>
pankso@230 532 _EOT_
pankso@230 533 search_form
pankso@230 534 xhtml_footer
pankso@230 535 else
pankso@230 536 xhtml_header
pankso@230 537 cat << _EOT_
pankso@230 538
pankso@230 539 <!-- Content -->
pankso@230 540 <div id="content">
pankso@230 541 <a name="content"></a>
pankso@230 542
pankso@230 543 <h1>$package</h1>
pankso@230 544 <h2>$search</h2>
pankso@230 545 _EOT_
pankso@230 546 search_form
pankso@230 547 if [ "$OBJECT" = "Depends" ]; then
pankso@230 548 if [ -z "$SEARCH" ]; then
pankso@230 549 cat << _EOT_
pankso@230 550
pankso@230 551 <h3>$depends $loops</h3>
pankso@230 552 <pre class="package">
pankso@230 553 _EOT_
pankso@230 554 for i in $WOK/*/receipt; do
pankso@230 555 PACKAGE=
pankso@230 556 DEPENDS=
pankso@230 557 . $i
pankso@230 558 echo "$PACKAGE $(echo $DEPENDS)"
pankso@230 559 done | show_loops
pankso@230 560 cat << _EOT_
pankso@230 561 </pre>
pankso@230 562 _EOT_
pankso@230 563 elif package_exist $SEARCH ; then
pankso@230 564 cat << _EOT_
pankso@230 565
pankso@230 566 <h3>$deptree</h3>
pankso@230 567 <pre class="package">
pankso@230 568 _EOT_
pankso@230 569 ALL_DEPS=""
pankso@230 570 dep_scan $SEARCH ""
pankso@230 571 SUGGESTED=""
pankso@230 572 . $WOK/$SEARCH/receipt
pankso@230 573 if [ -n "$SUGGESTED" ]; then
pankso@230 574 cat << _EOT_
pankso@230 575 </pre>
pankso@230 576
pankso@230 577 <h3>$deptree (SUGGESTED)</h3>
pankso@230 578 <pre class="package">
pankso@230 579 _EOT_
pankso@230 580 ALL_DEPS=""
pankso@230 581 dep_scan "$SUGGESTED" " "
pankso@230 582 fi
pankso@230 583 cat << _EOT_
pankso@230 584 </pre>
pankso@230 585
pankso@230 586 <h3>$rdeptree</h3>
pankso@230 587 <pre class="package">
pankso@230 588 _EOT_
pankso@230 589 ALL_DEPS=""
pankso@230 590 rdep_scan $SEARCH
pankso@230 591 cat << _EOT_
pankso@230 592 </pre>
pankso@230 593 _EOT_
pankso@230 594 fi
pankso@230 595 elif [ "$OBJECT" = "BuildDepends" ]; then
pankso@230 596 if [ -z "$SEARCH" ]; then
pankso@230 597 cat << _EOT_
pankso@230 598
pankso@230 599 <h3>$bdepends $loops</h3>
pankso@230 600 <pre class="package">
pankso@230 601 _EOT_
pankso@230 602 for i in $WOK/*/receipt; do
pankso@230 603 PACKAGE=
pankso@230 604 WANTED=
pankso@230 605 BUILD_DEPENDS=
pankso@230 606 . $i
pankso@230 607 echo "$PACKAGE $WANTED $(echo $BUILD_DEPENDS)"
pankso@230 608 done | show_loops
pankso@230 609 cat << _EOT_
pankso@230 610 </pre>
pankso@230 611 _EOT_
pankso@230 612 elif package_exist $SEARCH ; then
pankso@230 613 cat << _EOT_
pankso@230 614
pankso@230 615 <h3>$bdeplist</h3>
pankso@230 616 <pre class="package">
pankso@230 617 _EOT_
pankso@230 618 ALL_DEPS=""
pankso@230 619 dep_scan $SEARCH "" build
pankso@230 620 cat << _EOT_
pankso@230 621 </pre>
pankso@230 622
pankso@230 623 <h3>$rbdeplist</h3>
pankso@230 624 <pre class="package">
pankso@230 625 _EOT_
pankso@230 626 ALL_DEPS=""
pankso@230 627 rdep_scan $SEARCH build
pankso@230 628 cat << _EOT_
pankso@230 629 </pre>
pankso@230 630 _EOT_
pankso@230 631 fi
pankso@230 632 elif [ "$OBJECT" = "FileOverlap" ]; then
pankso@230 633 if package_exist $SEARCH ; then
pankso@230 634 cat << _EOT_
pankso@230 635
pankso@230 636 <h3>$overloading $SEARCH</h3>
pankso@230 637 <pre class="package">
pankso@230 638 _EOT_
pankso@230 639 ( unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep ^$SEARCH: ;
pankso@230 640 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep -v ^$SEARCH: ) | awk '
pankso@230 641 BEGIN { pkg=""; last="x" }
pankso@230 642 {
pankso@230 643 if ($2 == "") next
pankso@230 644 if (index($2,last) == 1 && substr($2,1+length(last),1) == "/")
pankso@230 645 delete file[last]
pankso@230 646 last=$2
pankso@230 647 if (pkg == "") pkg=$1
pankso@230 648 if ($1 == pkg) file[$2]=$1
pankso@230 649 else if (file[$2] == pkg) print
pankso@230 650 }
pankso@230 651 ' | display_packages_and_files
pankso@230 652 cat << _EOT_
pankso@230 653 </pre>
pankso@230 654 _EOT_
pankso@230 655 fi
pankso@230 656 elif [ "$OBJECT" = "File" ]; then
pankso@230 657 cat << _EOT_
pankso@230 658
pankso@230 659 <h3>$result</h3>
pankso@230 660 <pre class="package">
pankso@230 661 _EOT_
pankso@230 662 last=""
pankso@230 663 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \
pankso@230 664 | grep "$SEARCH" | while read pkg file; do
pankso@230 665 echo "$file" | grep -q "$SEARCH" || continue
pankso@230 666 if [ "$last" != "${pkg%:}" ]; then
pankso@230 667 last=${pkg%:}
pankso@230 668 (
pankso@230 669 . $WOK/$last/receipt
pankso@230 670 cat << _EOT_
pankso@230 671
pankso@230 672 <i>$(package_entry)</i>
pankso@230 673 _EOT_
pankso@230 674 )
pankso@230 675 fi
pankso@230 676 echo " $file"
pankso@230 677 done
pankso@230 678 elif [ "$OBJECT" = "File_list" ]; then
pankso@230 679 if package_exist $SEARCH; then
pankso@230 680 cat << _EOT_
pankso@230 681
pankso@230 682 <h3>$result</h3>
pankso@230 683 <pre class="package">
pankso@230 684 _EOT_
pankso@230 685 last=""
pankso@230 686 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \
pankso@230 687 | grep ^$SEARCH: | sed 's/.*: / /' | sort
pankso@230 688 cat << _EOT_
pankso@230 689 </pre>
pankso@230 690 <pre class="package">
pankso@230 691 $(unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep ^$SEARCH: | wc -l | echonb file) \
pankso@230 692 $(busybox sed -n "/^$SEARCH$/{nnnpq}" $PACKAGES_REPOSITORY/packages.txt)
pankso@230 693 _EOT_
pankso@230 694 fi
pankso@230 695 elif [ "$OBJECT" = "Desc" ]; then
pankso@230 696 if [ -f $WOK/$SEARCH/description.txt ]; then
pankso@230 697 cat << _EOT_
pankso@230 698
pankso@230 699 <h3>$result</h3>
pankso@230 700 <pre class="package">
pankso@230 701 <pre>
pankso@230 702 $(htmlize < $WOK/$SEARCH/description.txt)
pankso@230 703 </pre>
pankso@230 704 _EOT_
pankso@230 705 else
pankso@230 706 cat << _EOT_
pankso@230 707
pankso@230 708 <h3>$result</h3>
pankso@230 709 <pre class="package">
pankso@230 710 _EOT_
pankso@230 711 last=""
pankso@230 712 grep -i "$SEARCH" $PACKAGES_REPOSITORY/packages.desc | \
pankso@230 713 sort | while read pkg extras ; do
pankso@230 714 . $WOK/$pkg/receipt
pankso@230 715 package_entry
pankso@230 716 done
pankso@230 717 fi
pankso@230 718 elif [ "$OBJECT" = "Tags" ]; then
pankso@230 719 cat << _EOT_
pankso@230 720
pankso@230 721 <h3>$result</h3>
pankso@230 722 <pre class="package">
pankso@230 723 _EOT_
pankso@230 724 last=""
pankso@230 725 grep ^TAGS= $WOK/*/receipt | grep -i "$SEARCH" | \
pankso@230 726 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
pankso@230 727 . $WOK/$pkg/receipt
pankso@230 728 package_entry
pankso@230 729 done
pankso@230 730 elif [ "$OBJECT" = "Receipt" ]; then
pankso@230 731 package_exist $SEARCH && cat << _EOT_
pankso@230 732
pankso@230 733 <h3>$result</h3>
pankso@230 734 <pre class="package">
pankso@230 735 <pre>
pankso@230 736 $(if [ -f $WOK/$SEARCH/taz/*/receipt ]; then
pankso@230 737 cat $WOK/$SEARCH/taz/*/receipt
pankso@230 738 else
pankso@230 739 cat $WOK/$SEARCH/receipt
pankso@230 740 fi | htmlize)
pankso@230 741 </pre>
pankso@230 742 _EOT_
pankso@230 743 else
pankso@230 744 cat << _EOT_
pankso@230 745
pankso@230 746 <h3>$result</h3>
pankso@230 747 <pre class="package">
pankso@230 748 _EOT_
pankso@230 749 for pkg in `ls $WOK/ | grep "$SEARCH"`
pankso@230 750 do
pankso@230 751 . $WOK/$pkg/receipt
pankso@230 752 DESC=" <a href=\"?desc=$pkg\">description</a>"
pankso@230 753 [ -f $WOK/$pkg/description.txt ] || DESC=""
pankso@230 754 cat << _EOT_
pankso@230 755 $(package_entry)$DESC
pankso@230 756 _EOT_
pankso@230 757 done
pankso@230 758 equiv=$PACKAGES_REPOSITORY/packages.equiv
pankso@230 759 vpkgs="$(cat $equiv | cut -d= -f1 | grep $SEARCH)"
pankso@230 760 for vpkg in $vpkgs ; do
pankso@230 761 cat << _EOT_
pankso@230 762 </pre>
pankso@230 763
pankso@230 764 <h3>$result (package providing $vpkg)</h3>
pankso@230 765 <pre class="package">
pankso@230 766 _EOT_
pankso@230 767 for pkg in $(grep $vpkg= $equiv | sed "s/$vpkg=//"); do
pankso@230 768 . $WOK/${pkg#*:}/receipt
pankso@230 769 package_entry
pankso@230 770 done
pankso@230 771 done
pankso@230 772 fi
pankso@230 773 cat << _EOT_
pankso@230 774 </pre>
pankso@230 775 _EOT_
pankso@230 776 xhtml_footer
pankso@230 777 fi
pankso@230 778
pankso@230 779 exit 0