slitaz-dev-tools rev 136
search.cgi: add loop detection in depends
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Thu Dec 08 17:47:18 2011 +0100 (2011-12-08) |
parents | 773051430d12 |
children | e5593d4a3634 |
files | tazpkg-web/search.cgi |
line diff
1.1 --- a/tazpkg-web/search.cgi Sat Oct 08 22:31:16 2011 +0200 1.2 +++ b/tazpkg-web/search.cgi Thu Dec 08 17:47:18 2011 +0100 1.3 @@ -8,22 +8,24 @@ 1.4 1.5 read QUERY_STRING 1.6 for i in $(echo $QUERY_STRING | sed 's/&/ /g'); do 1.7 + i=$(httpd -d $i) 1.8 eval $i 1.9 done 1.10 LANG=$lang 1.11 SEARCH=$query 1.12 SLITAZ_VERSION=$version 1.13 OBJECT=$object 1.14 -DATE=`date +%Y-%m-%d\ \%H:%M:%S` 1.15 +DATE=`date +%Y-%m-%d\ %H:%M:%S` 1.16 VERSION=cooking 1.17 if [ "$REQUEST_METHOD" = "GET" ]; then 1.18 SEARCH="" 1.19 VERBOSE=0 1.20 for i in $(echo $REQUEST_URI | sed 's/[?&]/ /g'); do 1.21 + # i=$(httpd -d $i) 1.22 SLITAZ_VERSION=cooking 1.23 case "$(echo $i | tr [A-Z] [a-z])" in 1.24 - search=*) 1.25 - SEARCH=${i#*=};; 1.26 + query=*|search=*) 1.27 + [ ${i#*=} == Search ] || SEARCH=${i#*=};; 1.28 object=*) 1.29 OBJECT=${i#*=};; 1.30 verbose=*) 1.31 @@ -60,11 +62,14 @@ 1.32 version=s*|version=3*) 1.33 SLITAZ_VERSION=stable;; 1.34 version=[1-9]*) 1.35 - i=${version%%.*} 1.36 + i=${i%%.*} 1.37 SLITAZ_VERSION=${i#*=}.0;; 1.38 + version=u*) 1.39 + SLITAZ_VERSION=undigest;; 1.40 esac 1.41 done 1.42 [ -n "$SEARCH" ] && REQUEST_METHOD="POST" 1.43 + [ "$SEARCH" == "." ] && SEARCH= 1.44 fi 1.45 1.46 case "$OBJECT" in 1.47 @@ -79,9 +84,11 @@ 1.48 esac 1.49 1.50 case "$SLITAZ_VERSION" in 1.51 +tiny) selected_tiny="selected";; 1.52 1.0) selected_1="selected";; 1.53 2.0) selected_2="selected";; 1.54 stable) selected_stable="selected";; 1.55 +undigest) selected_undigest="selected";; 1.56 esac 1.57 1.58 # unescape query 1.59 @@ -105,6 +112,7 @@ 1.60 file_list="File list" 1.61 depends="Depends" 1.62 bdepends="Build depends" 1.63 +loops="loops" 1.64 search="Search" 1.65 cooking="cooking" 1.66 stable="stable" 1.67 @@ -124,6 +132,7 @@ 1.68 receipt="Recette" 1.69 depends="Dépendances" 1.70 bdepends="Fabrication" 1.71 + loops="sans fin" 1.72 search="Recherche" 1.73 result="Recherche de : $SEARCH" 1.74 noresult="Paquet $SEARCH introuvable" 1.75 @@ -193,34 +202,36 @@ 1.76 cat << _EOT_ 1.77 1.78 <div style="text-align: center; margin-bottom: 30px;"> 1.79 - <form method="post" action="search.cgi"> 1.80 + <form method="post" action="$(basename $SCRIPT_NAME)"> 1.81 <div class="searchbox"> 1.82 <p> 1.83 <input type="hidden" name="lang" value="$LANG" /> 1.84 - <input type="text" name="query" 1.85 + <input type="text" name="query" 1.86 size="20" value="$SEARCH" style="width: 80%;" /> 1.87 <input type="submit" name="search" value="$search" /> 1.88 </p> 1.89 </div> 1.90 - Search for: 1.91 - <select name="object"> 1.92 - <option value="Package">$package</option> 1.93 - <option $selected_desc value="Desc">$desc</option> 1.94 - <option $selected_tags value="Tags">$tags</option> 1.95 - <option $selected_receipt value="Receipt">$receipt</option> 1.96 - <option $selected_depends value="Depends">$depends</option> 1.97 - <option $selected_build_depends value="BuildDepends">$bdepends</option> 1.98 - <option $selected_file value="File">$file</option> 1.99 - <option $selected_file_list value="File_list">$file_list</option> 1.100 - <option $selected_overlap value="FileOverlap">$overlap</option> 1.101 - </select> 1.102 + Search for: 1.103 + <select name="object"> 1.104 + <option value="Package">$package</option> 1.105 + <option $selected_desc value="Desc">$desc</option> 1.106 + <option $selected_tags value="Tags">$tags</option> 1.107 + <option $selected_receipt value="Receipt">$receipt</option> 1.108 + <option $selected_depends value="Depends">$depends</option> 1.109 + <option $selected_build_depends value="BuildDepends">$bdepends</option> 1.110 + <option $selected_file value="File">$file</option> 1.111 + <option $selected_file_list value="File_list">$file_list</option> 1.112 + <option $selected_overlap value="FileOverlap">$overlap</option> 1.113 + </select> 1.114 in 1.115 - <select name="version"> 1.116 - <option value="cooking">$cooking</option> 1.117 - <option $selected_stable value="stable">$stable</option> 1.118 - <option $selected_1 value="1.0">1.0</option> 1.119 - <option $selected_2 value="2.0">2.0</option> 1.120 - </select> 1.121 + <select name="version"> 1.122 + <option value="cooking">$cooking</option> 1.123 + <option $selected_stable value="stable">$stable</option> 1.124 + <option $selected_2 value="2.0">2.0</option> 1.125 + <option $selected_1 value="1.0">1.0</option> 1.126 + <option $selected_tiny value="tiny">tiny</option> 1.127 + <option $selected_undigest value="undigest">undigest</option> 1.128 + </select> 1.129 </form> 1.130 </div> 1.131 _EOT_ 1.132 @@ -247,15 +258,17 @@ 1.133 1.134 <!-- Header --> 1.135 <div id="header"> 1.136 + <a name="top"></a> 1.137 <div id="logo"></div> 1.138 <div id="network"> 1.139 <a href="http://www.slitaz.org/"> 1.140 - <img src="images/network.png" alt="network.png" /></a> 1.141 + <img src="images/network.png" alt="network.png" /></a> 1.142 <a href="http://scn.slitaz.org/">Community</a> 1.143 <a href="http://doc.slitaz.org/">Doc</a> 1.144 <a href="http://forum.slitaz.org/">Forum</a> 1.145 <a href="http://bugs.slitaz.org/">Bugs</a> 1.146 <a href="http://hg.slitaz.org/">Hg</a> 1.147 + <a href="http://cook.slitaz.org/">BB</a> 1.148 </div> 1.149 <h1><a href="http://pkgs.slitaz.org/">SliTaz Packages</a></h1> 1.150 </div> 1.151 @@ -282,7 +295,7 @@ 1.152 <div id="block_info"> 1.153 <h4>$package</h4> 1.154 <p> 1.155 - Search for SliTaz packages! 1.156 + Search for SliTaz packages! 1.157 </p> 1.158 <p> 1.159 Any results ? Make a package request on the official 1.160 @@ -303,8 +316,8 @@ 1.161 </center> 1.162 1.163 <!-- End of content --> 1.164 + 1.165 </div> 1.166 - 1.167 <!-- Footer --> 1.168 <div id="footer"> 1.169 Copyright © <span class="year"></span> 1.170 @@ -333,7 +346,7 @@ 1.171 installed_size() 1.172 { 1.173 [ $VERBOSE -gt 0 ] && 1.174 -grep -A 3 "^$1\$" $SLITAZ/$SLITAZ_VERSION/packages/packages.txt | \ 1.175 +grep -A 3 "^$1\$" $PACKAGES_REPOSITORY/packages.txt | \ 1.176 grep installed | sed 's/.*(\(.*\) installed.*/(\1) /' 1.177 } 1.178 1.179 @@ -344,12 +357,45 @@ 1.180 <a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> $(installed_size $PACKAGE): $SHORT_DESC 1.181 _EOT_ 1.182 else 1.183 + PACKAGE_HREF="<u>$PACKAGE</u>" 1.184 + PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg" 1.185 + busybox wget -s $PACKAGE_URL 2> /dev/null && 1.186 + PACKAGE_HREF="<a href=\"$PACKAGE_URL\">$PACKAGE</a>" 1.187 cat << _EOT_ 1.188 -<a href="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg">$PACKAGE</a> $(installed_size $PACKAGE): $SHORT_DESC 1.189 +$PACKAGE_HREF $(installed_size $PACKAGE): $SHORT_DESC 1.190 _EOT_ 1.191 fi 1.192 } 1.193 1.194 +# Show loop in depends/build_depends chains 1.195 +show_loops() 1.196 +{ 1.197 + awk ' 1.198 +function chkloop(pkg, i, n) 1.199 +{ 1.200 + if (n < 12) 1.201 + for (i = 1; i < split(deps[pkg],curdep," "); i++) { 1.202 + if (curdep[i] == base || chkloop(curdep[i], 0, n+1)) { 1.203 + p = curdep[i] " " p 1.204 + return 1 1.205 + } 1.206 + } 1.207 + return 0 1.208 +} 1.209 +{ 1.210 + for (i = 2; i <= NF; i++) 1.211 + deps[$1] = deps[$1] " " $i 1.212 +} 1.213 +END { 1.214 + for (pkg in deps) { 1.215 + base = pkg 1.216 + p = "" 1.217 + if (chkloop(pkg, 0, 0)) 1.218 + print pkg " : " p 1.219 + } 1.220 +}' 1.221 +} 1.222 + 1.223 # recursive dependencies scan 1.224 dep_scan() 1.225 { 1.226 @@ -422,7 +468,7 @@ 1.227 cat << _EOT_ 1.228 1.229 <h3>$noresult</h3> 1.230 -<pre> 1.231 +<pre class="package"> 1.232 _EOT_ 1.233 return 1 1.234 } 1.235 @@ -433,6 +479,13 @@ 1.236 sed -e 's/&/\&/g' -e 's/</\</g' -e 's/>/\>/g' 1.237 } 1.238 1.239 +echonb() 1.240 +{ 1.241 +read n 1.242 +echo -n "$n $1" 1.243 +[ $n -gt 1 ] && echo -n s 1.244 +} 1.245 + 1.246 display_packages_and_files() 1.247 { 1.248 last="" 1.249 @@ -455,7 +508,10 @@ 1.250 1.251 <!-- Content --> 1.252 <div id="content"> 1.253 +<a name="content"></a> 1.254 1.255 +<h1>$package</h1> 1.256 +<h2>$search</h2> 1.257 _EOT_ 1.258 search_form 1.259 xhtml_footer 1.260 @@ -465,15 +521,33 @@ 1.261 1.262 <!-- Content --> 1.263 <div id="content"> 1.264 +<a name="content"></a> 1.265 1.266 +<h1>$package</h1> 1.267 +<h2>$search</h2> 1.268 _EOT_ 1.269 search_form 1.270 if [ "$OBJECT" = "Depends" ]; then 1.271 - if package_exist $SEARCH ; then 1.272 + if [ -z "$SEARCH" ]; then 1.273 + cat << _EOT_ 1.274 + 1.275 +<h3>$depends $loops</h3> 1.276 +<pre class="package"> 1.277 +_EOT_ 1.278 + for i in $WOK/*/receipt; do 1.279 + PACKAGE= 1.280 + DEPENDS= 1.281 + . $i 1.282 + echo "$PACKAGE $DEPENDS" 1.283 + done | show_loops 1.284 + cat << _EOT_ 1.285 +</pre> 1.286 +_EOT_ 1.287 + elif package_exist $SEARCH ; then 1.288 cat << _EOT_ 1.289 1.290 <h3>$deptree</h3> 1.291 -<pre> 1.292 +<pre class="package"> 1.293 _EOT_ 1.294 ALL_DEPS="" 1.295 dep_scan $SEARCH "" 1.296 @@ -484,7 +558,7 @@ 1.297 </pre> 1.298 1.299 <h3>$deptree (SUGGESTED)</h3> 1.300 -<pre> 1.301 +<pre class="package"> 1.302 _EOT_ 1.303 ALL_DEPS="" 1.304 dep_scan "$SUGGESTED" " " 1.305 @@ -493,7 +567,7 @@ 1.306 </pre> 1.307 1.308 <h3>$rdeptree</h3> 1.309 -<pre> 1.310 +<pre class="package"> 1.311 _EOT_ 1.312 ALL_DEPS="" 1.313 rdep_scan $SEARCH 1.314 @@ -502,15 +576,32 @@ 1.315 _EOT_ 1.316 fi 1.317 elif [ "$OBJECT" = "BuildDepends" ]; then 1.318 - if package_exist $SEARCH ; then 1.319 + if [ -z "$SEARCH" ]; then 1.320 + cat << _EOT_ 1.321 + 1.322 +<h3>$bdepends $loops</h3> 1.323 +<pre class="package"> 1.324 +_EOT_ 1.325 + for i in $WOK/*/receipt; do 1.326 + PACKAGE= 1.327 + WANTED= 1.328 + BUILD_DEPENDS= 1.329 + . $i 1.330 + echo "$PACKAGE $WANTED $BUILD_DEPENDS" 1.331 + done | show_loops 1.332 + cat << _EOT_ 1.333 +</pre> 1.334 +_EOT_ 1.335 + elif package_exist $SEARCH ; then 1.336 cat << _EOT_ 1.337 1.338 <h3>$bdeplist</h3> 1.339 -<pre> 1.340 +<pre class="package"> 1.341 _EOT_ 1.342 BUILD_DEPENDS="" 1.343 + WANTED="" 1.344 . $WOK/$SEARCH/receipt 1.345 - [ -n "$BUILD_DEPENDS" ] && for dep in $BUILD_DEPENDS ; do 1.346 + [ -n "$WANTED$BUILD_DEPENDS" ] && for dep in $WANTED $BUILD_DEPENDS ; do 1.347 if [ ! -s $WOK/$dep/receipt ]; then 1.348 cat << _EOT_ 1.349 $dep: not found ! 1.350 @@ -524,12 +615,13 @@ 1.351 </pre> 1.352 1.353 <h3>$rbdeplist</h3> 1.354 -<pre> 1.355 +<pre class="package"> 1.356 _EOT_ 1.357 for dep in $(grep -l $SEARCH $WOK/*/receipt); do 1.358 BUILD_DEPENDS="" 1.359 + WANTED="" 1.360 . $dep 1.361 - echo " $BUILD_DEPENDS " | grep -q " $SEARCH " && 1.362 + echo " $WANTED $BUILD_DEPENDS " | grep -q " $SEARCH " && 1.363 package_entry 1.364 done 1.365 cat << _EOT_ 1.366 @@ -541,7 +633,7 @@ 1.367 cat << _EOT_ 1.368 1.369 <h3>$overloading $SEARCH</h3> 1.370 -<pre> 1.371 +<pre class="package"> 1.372 _EOT_ 1.373 ( unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep ^$SEARCH: ; 1.374 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep -v ^$SEARCH: ) | awk ' 1.375 @@ -564,7 +656,7 @@ 1.376 cat << _EOT_ 1.377 1.378 <h3>$result</h3> 1.379 -<pre> 1.380 +<pre class="package"> 1.381 _EOT_ 1.382 last="" 1.383 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \ 1.384 @@ -583,20 +675,28 @@ 1.385 echo " $file" 1.386 done 1.387 elif [ "$OBJECT" = "File_list" ]; then 1.388 - package_exist $SEARCH && cat << _EOT_ 1.389 + if package_exist $SEARCH; then 1.390 + cat << _EOT_ 1.391 1.392 <h3>$result</h3> 1.393 -<pre> 1.394 +<pre class="package"> 1.395 _EOT_ 1.396 - last="" 1.397 - unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \ 1.398 - | grep ^$SEARCH: | sed 's/.*: / /' | sort 1.399 + last="" 1.400 + unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \ 1.401 + | grep ^$SEARCH: | sed 's/.*: / /' | sort 1.402 + cat << _EOT_ 1.403 +</pre> 1.404 +<pre class="package"> 1.405 +$(unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep ^$SEARCH: | wc -l | echonb file) \ 1.406 +$(busybox sed -n "/^$SEARCH$/{nnnpq}" $PACKAGES_REPOSITORY/packages.txt) 1.407 +_EOT_ 1.408 + fi 1.409 elif [ "$OBJECT" = "Desc" ]; then 1.410 if [ -f $WOK/$SEARCH/description.txt ]; then 1.411 cat << _EOT_ 1.412 1.413 <h3>$result</h3> 1.414 -<pre> 1.415 +<pre class="package"> 1.416 <pre> 1.417 $(htmlize < $WOK/$SEARCH/description.txt) 1.418 </pre> 1.419 @@ -605,7 +705,7 @@ 1.420 cat << _EOT_ 1.421 1.422 <h3>$result</h3> 1.423 -<pre> 1.424 +<pre class="package"> 1.425 _EOT_ 1.426 last="" 1.427 grep -i $SEARCH $PACKAGES_REPOSITORY/packages.desc | \ 1.428 @@ -618,7 +718,7 @@ 1.429 cat << _EOT_ 1.430 1.431 <h3>$result</h3> 1.432 -<pre> 1.433 +<pre class="package"> 1.434 _EOT_ 1.435 last="" 1.436 grep ^TAGS= $WOK/*/receipt | grep -i $SEARCH | \ 1.437 @@ -630,7 +730,7 @@ 1.438 package_exist $SEARCH && cat << _EOT_ 1.439 1.440 <h3>$result</h3> 1.441 -<pre> 1.442 +<pre class="package"> 1.443 <pre> 1.444 $(if [ -f $WOK/$SEARCH/taz/*/receipt ]; then 1.445 cat $WOK/$SEARCH/taz/*/receipt 1.446 @@ -643,7 +743,7 @@ 1.447 cat << _EOT_ 1.448 1.449 <h3>$result</h3> 1.450 -<pre> 1.451 +<pre class="package"> 1.452 _EOT_ 1.453 for pkg in `ls $WOK/ | grep $SEARCH` 1.454 do 1.455 @@ -661,7 +761,7 @@ 1.456 </pre> 1.457 1.458 <h3>$result (package providing $vpkg)</h3> 1.459 -<pre> 1.460 +<pre class="package"> 1.461 _EOT_ 1.462 for pkg in $(grep $vpkg= $equiv | sed "s/$vpkg=//"); do 1.463 . $WOK/${pkg#*:}/receipt