slitaz-dev-tools annotate tazpkg-web/search.cgi @ rev 309

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