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

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