wok-current rev 3242

mirror-tools: add search.cgi from pkgs.slitaz.org
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat May 30 11:53:39 2009 +0200 (2009-05-30)
parents b0788eda3c6e
children 0193bd5b5e89
files mirror-tools/stuff/var/www/pkgs/search.cgi
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/mirror-tools/stuff/var/www/pkgs/search.cgi	Sat May 30 11:53:39 2009 +0200
     1.3 @@ -0,0 +1,472 @@
     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 +read QUERY_STRING
    1.10 +for i in $(echo $QUERY_STRING | sed 's/&/ /g'); do
    1.11 +	eval $i
    1.12 +done
    1.13 +LANG=$lang
    1.14 +SEARCH=$query
    1.15 +SLITAZ_VERSION=$version
    1.16 +OBJECT=$object
    1.17 +DATE=`date +%Y-%m-%d\ \%H:%M:%S`
    1.18 +VERSION=cooking
    1.19 +if [ "$REQUEST_METHOD" = "GET" ]; then
    1.20 +	SEARCH=""
    1.21 +	for i in $(echo $REQUEST_URI | sed 's/[?&]/ /g'); do
    1.22 +		SLITAZ_VERSION=cooking
    1.23 +		case "$i" in
    1.24 +		lang=*)
    1.25 +			LANG=${i#*=};;
    1.26 +		file=*)
    1.27 +			SEARCH=${i#*=}
    1.28 +			OBJECT=File;;
    1.29 +		desc=*)
    1.30 +			SEARCH=${i#*=}
    1.31 +			OBJECT=Desc;;
    1.32 +		tags=*)
    1.33 +			SEARCH=${i#*=}
    1.34 +			OBJECT=Tags;;
    1.35 +		filelist=*)
    1.36 +			SEARCH=${i#*=}
    1.37 +			OBJECT=File_list;;
    1.38 +		package=*)
    1.39 +			SEARCH=${i#*=}
    1.40 +			OBJECT=Package;;
    1.41 +		depends=*)
    1.42 +			SEARCH=${i#*=}
    1.43 +			OBJECT=Depends;;
    1.44 +		version=s*|version=2*)
    1.45 +			SLITAZ_VERSION=stable;;
    1.46 +		version=1*)
    1.47 +			SLITAZ_VERSION=1.0;;
    1.48 +		esac
    1.49 +	done
    1.50 +	[ -n "$SEARCH" ] && REQUEST_METHOD="POST"
    1.51 +fi
    1.52 +
    1.53 +case "$OBJECT" in
    1.54 +File)	 	selected_file="selected";;
    1.55 +Desc)	 	selected_desc="selected";;
    1.56 +Tags)	 	selected_tags="selected";;
    1.57 +File_list) 	selected_file_list="selected";;
    1.58 +Depends)	selected_depends="selected";;
    1.59 +esac
    1.60 +
    1.61 +case "$SLITAZ_VERSION" in
    1.62 +1.0)	 	selected_1="selected";;
    1.63 +stable)		selected_stable="selected";;
    1.64 +esac
    1.65 +
    1.66 +# unescape query
    1.67 +SEARCH="$(echo $SEARCH | sed 's/%2B/+/g' | sed 's/%3A/:/g' | sed 's|%2F|/|g')"
    1.68 +
    1.69 +package="Package"
    1.70 +file="File"
    1.71 +desc="Description"
    1.72 +tags="Tags"
    1.73 +file_list="File list"
    1.74 +depends="Depends"
    1.75 +search="Search"
    1.76 +cooking="cooking"
    1.77 +stable="stable"
    1.78 +result="Result for : $SEARCH"
    1.79 +noresult="No package $SEARCH"
    1.80 +deptree="Dependency tree for : $SEARCH"
    1.81 +rdeptree="Reverse dependency tree for : $SEARCH"
    1.82 +charset="ISO-8859-1"
    1.83 +case "$LANG" in
    1.84 +fr)	package="Paquet"
    1.85 +	depends="Dépendances"
    1.86 +	search="Recherche"
    1.87 +	result="Recherche de : $SEARCH"
    1.88 +	noresult="Paquet $SEARCH introuvable"
    1.89 +	deptree="Arbre des dépendances de $SEARCH"
    1.90 +	rdeptree="Arbre inversé des dépendances de $SEARCH"
    1.91 +	file_list="Liste des fichiers"
    1.92 +	file="Fichier";;
    1.93 +de)	package="Paket"
    1.94 +	depends="Abhängigkeiten"
    1.95 +	search="Suche"
    1.96 +	cooking="Cooking"
    1.97 +	stable="Stable"
    1.98 +	result="Resultate für : $SEARCH"
    1.99 +	noresult="Kein Paket für $SEARCH"
   1.100 +	deptree="Abhängigkeiten von: $SEARCH"
   1.101 +	rdeptree="Abhängigkeit für: $SEARCH"
   1.102 +	file_list="Datei liste"
   1.103 +	file="Datei";;
   1.104 +pt)	package="Pacote"
   1.105 +    search="Buscar"
   1.106 +    cooking="cooking"
   1.107 +    stable="stable"
   1.108 +    result="Resultado para : $SEARCH"
   1.109 +    noresult="Sem resultado: $SEARCH"
   1.110 +    deptree="Árvore de dependências para: $SEARCH"
   1.111 +    rdeptree="Árvore de dependências reversa para: $SEARCH"
   1.112 +	depends="Dependências"
   1.113 +	file_list="Arquivo lista"
   1.114 +	file="Arquivo";;
   1.115 +cn)	package="软件包:"
   1.116 +	cooking="å¼€å‘版"
   1.117 +	stable="稳定版"
   1.118 +	charset="UTF-8";;
   1.119 +*)  LANG="en";;
   1.120 +esac
   1.121 +WOK=/home/slitaz/$SLITAZ_VERSION/wok
   1.122 +
   1.123 +
   1.124 +echo Content-type: text/html
   1.125 +echo
   1.126 +
   1.127 +# Search form
   1.128 +search_form()
   1.129 +{
   1.130 +	cat << _EOT_
   1.131 +
   1.132 +<div style="text-align: center; padding: 20px;">
   1.133 +<form method="POST" action="search.cgi">
   1.134 +	<input type="hidden" name="lang" value="$LANG">
   1.135 +	<select name="object">
   1.136 +		<option value="Package">$package</option>
   1.137 +		<option $selected_desc value="Desc">$desc</option>
   1.138 +		<option $selected_tags value="Tags">$tags</option>
   1.139 +		<option $selected_depends value="Depends">$depends</option>
   1.140 +		<option $selected_file value="File">$file</option>
   1.141 +		<option $selected_file_list value="File_list">$file_list</option>
   1.142 +	</select>
   1.143 +	<strong>:</strong>
   1.144 +	<input type="text" name="query" size="32" value="$SEARCH">
   1.145 +	<select name="version">
   1.146 +		<option value="cooking">$cooking</option>
   1.147 +		<option $selected_stable value="stable">$stable</option>
   1.148 +		<option $selected_1 value="1.0">1.0</option>
   1.149 +	</select>
   1.150 +	<input type="submit" name="search" value="$search">
   1.151 +</form>
   1.152 +</div>
   1.153 +_EOT_
   1.154 +}
   1.155 +
   1.156 +# xHTML Header.
   1.157 +xhtml_header()
   1.158 +{
   1.159 +	cat << _EOF_
   1.160 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   1.161 +	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   1.162 +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="$LANG" lang="$LANG">
   1.163 +<head>
   1.164 +	<title>SliTaz Packages - Search $SEARCH</title>
   1.165 +	<meta http-equiv="content-type" content="text/html; charset=$charset" />
   1.166 +	<meta name="description" content="Au sujet de SliTaz GNU/Linux mini système d'exploitation" />
   1.167 +	<meta name="keywords" lang="fr" content="Système, libre, gnu, linux, opensource, livecd" />
   1.168 +	<meta name="robots" content="index, follow, all" />
   1.169 +	<meta name="revisit-after" content="7 days" />
   1.170 +	<meta name="expires" content="never" />
   1.171 +	<meta name="modified" content="$DATE" />
   1.172 +	<meta name="author" content="ash, grep, sed and cat"/>
   1.173 +	<meta name="publisher" content="www.slitaz.org" />
   1.174 +	<link rel="shortcut icon" href="http://pkgs.slitaz.org/favicon.ico" />
   1.175 +	<link rel="stylesheet"  type="text/css" href="http://pkgs.slitaz.org/slitaz.css" />
   1.176 +</head>
   1.177 +<body bgcolor="#ffffff">
   1.178 +
   1.179 +<!-- Header -->
   1.180 +<div id="header">
   1.181 +	<a name="top"></a>
   1.182 +<!-- Access -->
   1.183 +<div id="access">
   1.184 +	<a href="http://www.slitaz.org/" title="SliTaz Web site">Website</a> |
   1.185 +	<a href="http://wiki.slitaz.org/" title="SliTaz Community Wiki">Wiki</a> |
   1.186 +	<a href="http://labs.slitaz.org/" title="SliTaz laboratories">Labs</a>
   1.187 +</div>
   1.188 +	<a href="http://pkgs.slitaz.org/"><img id="logo"
   1.189 +	src="http://pkgs.slitaz.org/pics/website/logo.png" title="pkgs.slitaz.org" alt="pkgs.slitaz.org"
   1.190 +	style="border: 0px solid ; width: 200px; height: 74px;" /></a>
   1.191 +	<p id="titre">#!/tazpkg/packages</p>
   1.192 +</div>
   1.193 +_EOF_
   1.194 +}
   1.195 +
   1.196 +# xHTML Footer.
   1.197 +xhtml_footer()
   1.198 +{
   1.199 +	cat << _EOT_
   1.200 +<center>
   1.201 +<i>$(ls /home/slitaz/$SLITAZ_VERSION/wok | wc -l) packages and $(unlzma -c /home/slitaz/$SLITAZ_VERSION/packages/files.list.lzma | wc -l) files in $SLITAZ_VERSION database</i>
   1.202 +</center>
   1.203 +
   1.204 +<!-- End of content with round corner -->
   1.205 +</div>
   1.206 +<div id="content_bottom">
   1.207 +<div class="bottom_left"></div>
   1.208 +<div class="bottom_right"></div>
   1.209 +</div>
   1.210 +
   1.211 +<!-- Start of footer and copy notice -->
   1.212 +<div id="copy">
   1.213 +<p>
   1.214 +Dernière modification : $DATE -
   1.215 +<a href="#top">Top of the page</a>
   1.216 +</p>
   1.217 +<p>
   1.218 +Copyright &copy; 2009 <a href="http://www.slitaz.org/">SliTaz</a> -
   1.219 +<a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a>
   1.220 +</p>
   1.221 +<!-- End of copy -->
   1.222 +</div>
   1.223 +
   1.224 +<!-- Bottom and logo's -->
   1.225 +<div id="bottom">
   1.226 +<p>
   1.227 +<a href="http://validator.w3.org/check?uri=referer"><img
   1.228 +	src="http://pkgs.slitaz.org/pics/website/xhtml10.png" alt="Valid XHTML 1.0"
   1.229 +	title="Code validé XHTML 1.0"
   1.230 +	style="width: 80px; height: 15px;" /></a>
   1.231 +</p>
   1.232 +</div>
   1.233 +
   1.234 +</body>
   1.235 +</html>
   1.236 +_EOT_
   1.237 +}
   1.238 +
   1.239 +# recursive dependencies scan                                       
   1.240 +dep_scan()                                                       
   1.241 +{                                                                    
   1.242 +for i in $1; do
   1.243 +	case " $ALL_DEPS " in
   1.244 +	*\ $i\ *) continue;;
   1.245 +	esac
   1.246 +	ALL_DEPS="$ALL_DEPS $i"
   1.247 +	if [ -n "$2" ]; then
   1.248 +		echo -n "$2"
   1.249 +		(
   1.250 +		. $WOK/$i/receipt
   1.251 +		cat << _EOT_
   1.252 +<a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> : $SHORT_DESC
   1.253 +_EOT_
   1.254 +		)
   1.255 +	fi
   1.256 +	[ -f $WOK/$i/receipt ] || continue
   1.257 +	DEPENDS=""
   1.258 +	. $WOK/$i/receipt
   1.259 +	[ -n "$DEPENDS" ] && dep_scan "$DEPENDS" "$2    "
   1.260 +done
   1.261 +}
   1.262 +
   1.263 +# recursive reverse dependencies scan                       
   1.264 +rdep_scan()                                                           
   1.265 +{                                                                            
   1.266 +SEARCH=$1
   1.267 +case "$SEARCH" in
   1.268 +glibc-base|gcc-lib-base) cat <<EOT
   1.269 +	glibc-base and gcc-lib-base are implicit dependencies
   1.270 +	<b>every</b> packages are supposed to depend on them.
   1.271 +EOT
   1.272 +	return;;
   1.273 +esac
   1.274 +for i in $WOK/* ; do
   1.275 +	DEPENDS=""
   1.276 +	. $i/receipt
   1.277 +	echo "$(basename $i) $(echo $DEPENDS)"
   1.278 +done | awk -v search=$SEARCH '
   1.279 +function show_deps(deps, all_deps, pkg, space)
   1.280 +{
   1.281 +	if (all_deps[pkg] == 1) return
   1.282 +	all_deps[pkg] = 1
   1.283 +	if (space != "") printf "%s%s\n",space,pkg
   1.284 +	for (i = 1; i <= split(deps[pkg], mydeps, " "); i++) {
   1.285 +		show_deps(deps, all_deps, mydeps[i],"////" space)
   1.286 +	}
   1.287 +}
   1.288 +
   1.289 +{
   1.290 +	all_deps[$1] = 0
   1.291 +	for (i = 2; i <= NF; i++)
   1.292 +		deps[$i] = deps[$i] " " $1
   1.293 +}
   1.294 +
   1.295 +END {
   1.296 +	show_deps(deps, all_deps, search, "")
   1.297 +}
   1.298 +' | while read pkg; do
   1.299 +		. $WOK/${pkg##*/}/receipt
   1.300 +		cat << _EOT_
   1.301 +$(echo ${pkg%/*} | sed 's|/| |g') <a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> : $SHORT_DESC
   1.302 +_EOT_
   1.303 +done
   1.304 +}
   1.305 +
   1.306 +# Display search form and result if requested.
   1.307 +if [ "$REQUEST_METHOD" != "POST" ]; then
   1.308 +	xhtml_header
   1.309 +	cat << _EOT_
   1.310 +
   1.311 +<!-- Content top. -->
   1.312 +<div id="content_top">
   1.313 +<div class="top_left"></div>
   1.314 +<div class="top_right"></div>
   1.315 +</div>
   1.316 +
   1.317 +<!-- Content -->
   1.318 +<div id="content">
   1.319 +<a name="content"></a>
   1.320 +
   1.321 +<h1><font color="#3E1220">$package</font></h1>
   1.322 +<h2><font color="#DF8F06">$search</font></h2>
   1.323 +_EOT_
   1.324 +	search_form
   1.325 +	xhtml_footer
   1.326 +else
   1.327 +	xhtml_header
   1.328 +	cat << _EOT_
   1.329 +
   1.330 +<!-- Content top. -->
   1.331 +<div id="content_top">
   1.332 +<div class="top_left"></div>
   1.333 +<div class="top_right"></div>
   1.334 +</div>
   1.335 +
   1.336 +<!-- Content -->
   1.337 +<div id="content">
   1.338 +<a name="content"></a>
   1.339 +
   1.340 +<h1><font color="#3E1220">$package</font></h1>
   1.341 +<h2><font color="#DF8F06">$search</font></h2>
   1.342 +_EOT_
   1.343 +	search_form
   1.344 +	if [ "$OBJECT" = "Depends" ]; then
   1.345 +		if [ -f $WOK/$SEARCH/receipt ]; then
   1.346 +			cat << _EOT_
   1.347 +
   1.348 +<h3>$deptree</h3>
   1.349 +<pre class="package">
   1.350 +_EOT_
   1.351 +			ALL_DEPS=""
   1.352 +			dep_scan $SEARCH ""
   1.353 +			SUGGESTED=""
   1.354 +			. $WOK/$SEARCH/receipt
   1.355 +			if [ -n "$SUGGESTED" ]; then
   1.356 +				cat << _EOT_
   1.357 +</pre>
   1.358 +
   1.359 +<h3>$deptree (SUGGESTED)</h3>
   1.360 +<pre class="package">
   1.361 +_EOT_
   1.362 +				ALL_DEPS=""
   1.363 +				dep_scan "$SUGGESTED" "    "
   1.364 +			fi
   1.365 +			cat << _EOT_
   1.366 +</pre>
   1.367 +
   1.368 +<h3>$rdeptree</h3>
   1.369 +<pre class="package">
   1.370 +_EOT_
   1.371 +			ALL_DEPS=""
   1.372 +			rdep_scan $SEARCH
   1.373 +		else
   1.374 +			cat << _EOT_
   1.375 +
   1.376 +<h3>$noresult</h3>
   1.377 +<pre class="package">
   1.378 +_EOT_
   1.379 +		fi
   1.380 +	elif [ "$OBJECT" = "File" ]; then
   1.381 +		cat << _EOT_
   1.382 +
   1.383 +<h3>$result</h3>
   1.384 +<pre class="package">
   1.385 +_EOT_
   1.386 +		last=""
   1.387 +		unlzma -c /home/slitaz/$SLITAZ_VERSION/packages/files.list.lzma \
   1.388 +		| grep $SEARCH | while read pkg file; do
   1.389 +			echo "$file" | grep -q $SEARCH || continue
   1.390 +			if [ "$last" != "${pkg%:}" ]; then
   1.391 +				last=${pkg%:}
   1.392 +				(
   1.393 +				. $WOK/$last/receipt
   1.394 +				cat << _EOT_
   1.395 +
   1.396 +<i><b><a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a></b> $SHORT_DESC</i>
   1.397 +_EOT_
   1.398 +				)
   1.399 +			fi
   1.400 +			echo "    $file"
   1.401 +		done
   1.402 +	elif [ "$OBJECT" = "File_list" ]; then
   1.403 +		cat << _EOT_
   1.404 +
   1.405 +<h3>$result</h3>
   1.406 +<pre class="package">
   1.407 +_EOT_
   1.408 +		last=""
   1.409 +		unlzma -c /home/slitaz/$SLITAZ_VERSION/packages/files.list.lzma \
   1.410 +		| grep ^$SEARCH: |  sed 's/.*: /    /' | sort
   1.411 +	elif [ "$OBJECT" = "Desc" ]; then
   1.412 +		cat << _EOT_
   1.413 +
   1.414 +<h3>$result</h3>
   1.415 +<pre class="package">
   1.416 +_EOT_
   1.417 +		last=""
   1.418 +		grep -i $SEARCH /home/slitaz/$SLITAZ_VERSION/packages/packages.desc | \
   1.419 +		sort | while read pkg extras ; do
   1.420 +				. $WOK/$pkg/receipt
   1.421 +				cat << _EOT_
   1.422 +<a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> : $SHORT_DESC
   1.423 +_EOT_
   1.424 +			done
   1.425 +	elif [ "$OBJECT" = "Tags" ]; then
   1.426 +		cat << _EOT_
   1.427 +
   1.428 +<h3>$result</h3>
   1.429 +<pre class="package">
   1.430 +_EOT_
   1.431 +		last=""
   1.432 +		grep ^TAGS= $WOK/*/receipt |  grep -i $SEARCH | \
   1.433 +		sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
   1.434 +				. $WOK/$pkg/receipt
   1.435 +				cat << _EOT_
   1.436 +<a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> : $SHORT_DESC
   1.437 +_EOT_
   1.438 +			done
   1.439 +	else
   1.440 +		cat << _EOT_
   1.441 +
   1.442 +<h3>$result</h3>
   1.443 +<pre class="package">
   1.444 +_EOT_
   1.445 +		for pkg in `ls $WOK | grep $SEARCH`
   1.446 +		do
   1.447 +			. $WOK/$pkg/receipt
   1.448 +			cat << _EOT_
   1.449 +<a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> : $SHORT_DESC
   1.450 +_EOT_
   1.451 +		done
   1.452 +		equiv=/home/slitaz/$SLITAZ_VERSION/packages/packages.equiv
   1.453 +		vpkgs="$(cat $equiv | cut -d= -f1 | grep $SEARCH)"
   1.454 +		for vpkg in $vpkgs ; do
   1.455 +	cat << _EOT_
   1.456 +</pre>
   1.457 +
   1.458 +<h3>$result (package providing $vpkg)</h3>
   1.459 +<pre class="package">
   1.460 +_EOT_
   1.461 +			for pkg in $(grep $vpkg= $equiv | sed "s/$vpkg=//"); do
   1.462 +				. $WOK/${pkg#*:}/receipt
   1.463 +				cat << _EOT_
   1.464 +<a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> : $SHORT_DESC
   1.465 +_EOT_
   1.466 +			done
   1.467 +		done
   1.468 +	fi
   1.469 +	cat << _EOT_
   1.470 +</pre>
   1.471 +_EOT_
   1.472 +	xhtml_footer
   1.473 +fi
   1.474 +
   1.475 +exit 0