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

Update to the current state of "mirror" and "pkgs"
author Aleksej Bobylev <al.bobylev@gmail.com>
date Sun Oct 25 06:47:13 2015 +0200 (2015-10-25)
parents bded7f6ff5ff
children fd79a2207aed
rev   line source
al@603 1 #!/bin/sh -v
pankso@449 2 #
pankso@230 3 # Tiny CGI search engine for SliTaz packages on http://pkgs.slitaz.org/
pankso@230 4 # Christophe Lincoln <pankso@slitaz.org>
al@284 5 # Aleksej Bobylev <al.bobylev@gmail.com>
pankso@230 6 #
al@284 7
al@603 8 date_start="$(date -u +%s)"
al@603 9
slaxemulator@336 10 renice -n 19 $$
slaxemulator@336 11
al@603 12
al@284 13 # Parse query string
al@603 14
slaxemulator@320 15 . /etc/slitaz/slitaz.conf
pankso@266 16 . /usr/lib/slitaz/httphelper.sh
al@603 17 cache='/var/cache/pkgs'
al@603 18 mkdir -p "$cache"
al@603 19
al@603 20 _() { local T="$1"; shift; printf "$(gettext "$T")" "$@"; echo; }
al@603 21 _n() { local T="$1"; shift; printf "$(gettext "$T")" "$@"; }
al@603 22 _p() { local S="$1" P="$2" N="$3"; shift 3; printf "$(ngettext "$S" "$P" "$N")" "$@"; }
al@603 23
al@603 24
pascal@456 25 [ -n "$MIRROR_URL" ] || MIRROR_URL="http://mirror.slitaz.org"
al@284 26
al@603 27
al@284 28 # User preferred language
al@284 29 # parameter $1 have priority; without parameter $1 - browser language only
al@284 30 # if we don't support any of user languages (or only en), then return C locale
al@603 31
al@284 32 user_lang() {
al@603 33 unset LANG
al@603 34 IFS=','
al@603 35 for lang in $1 $HTTP_ACCEPT_LANGUAGE; do
al@603 36 lang=${lang%;*}; lang=${lang# }; lang=${lang%-*}; lang=${lang%_*}
al@284 37 case "$lang" in
al@603 38 de) LANG='de_DE';;
al@603 39 en) LANG='en_US';;
al@603 40 es) LANG='es_ES';;
al@603 41 fr) LANG='fr_FR';;
al@603 42 it) LANG='it_IT';;
al@603 43 pl) LANG='pl_PL';;
al@603 44 pt) LANG='pt_BR';;
al@603 45 ru) LANG='ru_RU';;
al@603 46 sv) LANG='sv_SE';;
al@603 47 uk) LANG='uk_UA';;
al@603 48 zh) LANG='zh_TW';;
al@284 49 esac
al@603 50 [ -n "$LANG" ] && break
al@284 51 done
al@284 52 unset IFS
al@603 53 echo "${LANG:-C}"
al@284 54 }
al@284 55
al@284 56
al@293 57 # Part of query to indicate current debug mode
al@603 58
al@293 59 ifdebug() {
al@293 60 ifdebug="$(GET debug)"
al@603 61 [ -n "$ifdebug" ] && ifdebug="$1$ifdebug"
al@293 62 echo "$ifdebug"
al@284 63 }
al@284 64
al@603 65
al@293 66 # GET or POST variable
al@603 67
al@293 68 GETPOST() {
al@293 69 echo "$(POST $1)$(GET $1)"
al@293 70 }
al@293 71
al@603 72
al@603 73 # Nice URL replacer - to copy URL from address bar
slaxemulator@320 74 # TODO: deal with POST method of form submitting
al@603 75
slaxemulator@320 76 nice_url() {
slaxemulator@320 77 # if user submitted a form
al@603 78 if [ "$REQUEST_METHOD" == 'POST' -o -n "$(GET submit)" ]; then
slaxemulator@320 79 OBJECT="$(GETPOST object)"
slaxemulator@320 80 SEARCH="$(GETPOST query)"
slaxemulator@320 81 case $OBJECT in
slaxemulator@320 82 Package) NICE="package=$SEARCH";;
slaxemulator@320 83 Desc) NICE="desc=$SEARCH";;
slaxemulator@320 84 Tags) NICE="tags=$SEARCH";;
slaxemulator@336 85 Arch) NICE="arch=$SEARCH";;
slaxemulator@336 86 Bugs) NICE="bugs=$SEARCH";;
slaxemulator@320 87 Receipt) NICE="receipt=$SEARCH";;
slaxemulator@320 88 Depends) NICE="depends=$SEARCH";;
slaxemulator@320 89 BuildDepends) NICE="builddepends=$SEARCH";;
slaxemulator@320 90 File) NICE="file=$SEARCH";;
slaxemulator@320 91 File_list) NICE="filelist=$SEARCH";;
slaxemulator@320 92 FileOverlap) NICE="fileoverlap=$SEARCH";;
al@603 93 Category) NICE="category=$SEARCH";;
al@603 94 Maintainer) NICE="maintainer=$SEARCH";;
al@603 95 License) NICE="license=$SEARCH";;
slaxemulator@320 96 esac
al@603 97
slaxemulator@320 98 # version, if needed
slaxemulator@320 99 version="$(GETPOST version)"
al@603 100 if [ -n "$version" -a "$version" != 'cooking' -a "$version" != 'c' ]; then
al@603 101 NICE="$NICE&version=${version:0:1}"
slaxemulator@320 102 fi
al@603 103
slaxemulator@320 104 # lang, if needed
slaxemulator@320 105 query_lang="$(GETPOST lang)"
slaxemulator@320 106 pref_lang="$(user_lang)"
al@603 107 browser_lang="${pref_lang%_*}"
al@603 108 if [ -n "$query_lang" ]; then
al@603 109 COOKIE="lang=$query_lang"
al@603 110 else
al@603 111 COOKIE=''
slaxemulator@320 112 fi
al@603 113
slaxemulator@320 114 # verbose, if needed
slaxemulator@320 115 verboseq="$(GETPOST verbose)"
al@603 116 if [ -n "$verboseq" -a "$verboseq" != '0' ]; then
al@603 117 NICE="$NICE&verbose=1"
slaxemulator@320 118 fi
al@603 119
slaxemulator@320 120 # debug, if needed
slaxemulator@320 121 debugq="$(GET debug)"
al@603 122 if [ -n "$debugq" -a "$debugq" == 'debug' ]; then
al@603 123 NICE="$NICE&debug"
slaxemulator@320 124 fi
al@603 125
slaxemulator@320 126 # redirect
al@603 127 if [ -z "$COOKIE" ]; then
al@603 128 header "HTTP/1.1 301 Moved Permanently" "Location: ?$NICE"
al@603 129 else
al@603 130 header "HTTP/1.1 301 Moved Permanently" "Set-Cookie: $COOKIE" "Location: ?$NICE"
al@603 131 fi
slaxemulator@320 132 exit 0
al@293 133 fi
slaxemulator@320 134 }
al@284 135
al@603 136
slaxemulator@320 137 nice_url
al@284 138
al@261 139
al@603 140
pankso@268 141
al@261 142 # Internationalization
al@261 143 . /usr/bin/gettext.sh
al@284 144 export TEXTDOMAIN='tazpkg-web'
al@603 145 # Translate actions once
al@603 146 a_co="$(_ 'Cooker')"
al@603 147 a_dl="$(_ 'Download')"
al@603 148 a_rc="$(_ 'Receipt')"
pankso@239 149
al@603 150
al@603 151
al@603 152
al@603 153 # Cache icons to fast search
al@603 154 # Find the latest update in the "icons" folder
al@603 155 iconslast="$cache/icons.$(date -u +%s -r /var/www/pkgs/icons/$(ls -t /var/www/pkgs/icons | head -n1))"
al@603 156
al@603 157 if [ ! -f "$iconslast" ]; then
al@603 158 find "$cache" -name 'icons.*' -delete
al@603 159
al@603 160 (
al@603 161 cat icons/packages.icons
al@603 162 awk '{printf "%s\tcli\n",$1}' icons/packages-cli.icons
al@603 163 awk '{printf "%s\tfont\n",$1}' icons/packages-font.icons
al@603 164 awk '{printf "%s\ti18n\n",$1}' icons/packages-i18n.icons
al@603 165 awk '{printf "%s\tthm\n",$1}' icons/packages-thm.icons
al@603 166 ls icons/*.png | awk -F/ '{sub(/\.png/,"",$2);printf "%s\t%s\n", $2, $2}'
al@603 167 ) | sort > "$iconslast"
al@603 168 fi
al@603 169
al@603 170
al@603 171
al@603 172 unset SEARCH SLITAZ_VERSION
al@284 173 VERBOSE=0
al@603 174 s='selected'
al@284 175 for i in $(echo $QUERY_STRING | sed 's/[?&]/ /g'); do
al@284 176 case "$(echo $i | tr [A-Z] [a-z])" in
al@284 177 query=*|search=*) [ ${i#*=} == Search ] || SEARCH=${i#*=};;
al@284 178 object=*) OBJECT=${i#*=};;
al@284 179 verbose=*) VERBOSE=${i#*=};;
al@284 180 lang=*) LANG=${i#*=};;
al@603 181 file=*) SEARCH=${i#*=}; OBJECT='File'; sel_file=$s;;
al@603 182 desc=*) SEARCH=${i#*=}; OBJECT='Desc'; sel_desc=$s;;
al@603 183 tags=*) SEARCH=${i#*=}; OBJECT='Tags'; sel_tags=$s;;
al@603 184 arch=*) SEARCH=${i#*=}; OBJECT='Arch'; sel_arch=$s;;
al@603 185 bugs=*) SEARCH=${i#*=}; OBJECT='Bugs'; sel_bugs=$s;;
al@603 186 receipt=*) SEARCH=${i#*=}; OBJECT='Receipt'; sel_rcpt=$s;;
al@603 187 filelist=*) SEARCH=${i#*=}; OBJECT='File_list'; sel_flst=$s;;
al@603 188 package=*) SEARCH=${i#*=}; OBJECT='Package';;
al@603 189 depends=*) SEARCH=${i#*=}; OBJECT='Depends'; sel_deps=$s;;
al@603 190 builddepends=*) SEARCH=${i#*=}; OBJECT='BuildDepends'; sel_bdps=$s;;
al@603 191 fileoverlap=*) SEARCH=${i#*=}; OBJECT='FileOverlap'; sel_over=$s;;
al@603 192 category=*) SEARCH=${i#*=}; OBJECT='Category'; sel_catg=$s;;
al@603 193 maintainer=*) SEARCH=${i#*=}; OBJECT='Maintainer'; sel_mtnr=$s;;
al@603 194 license=*) SEARCH=${i#*=}; OBJECT='License'; sel_lcns=$s;;
al@603 195 version=1*) SLITAZ_VERSION='1.0'; sel_1=$s;;
al@603 196 version=2*) SLITAZ_VERSION='2.0'; sel_2=$s;;
al@603 197 version=3*) SLITAZ_VERSION='3.0'; sel_3=$s;;
al@603 198 version=s*|version=4*) SLITAZ_VERSION='stable'; sel_s=$s;;
al@603 199 version=u*) SLITAZ_VERSION='undigest'; sel_u=$s;;
al@603 200 version=b*) SLITAZ_VERSION='backports'; sel_b=$s;;
al@603 201 version=t*) SLITAZ_VERSION='tiny'; sel_t=$s;;
al@284 202 esac
al@284 203 done
al@603 204 [ -z "$SLITAZ_VERSION" ] && SLITAZ_VERSION='cooking'
al@603 205 SEARCH="${SEARCH//%20/ }"
al@284 206
al@293 207 #
pankso@268 208 # Content negotiation for Gettext
al@293 209 #
al@603 210
al@603 211 LANG=$(user_lang $(COOKIE lang))
al@603 212 lang="${LANG%_*}"
pankso@278 213 export LANG LC_ALL=$LANG
pankso@230 214
al@284 215
pankso@452 216 #
pankso@452 217 # Unescape query and set vars
pankso@452 218 #
al@603 219
al@603 220 SEARCH="$(echo $SEARCH | sed 's|%2B|+|g; s|%3A|:|g; s|%2F|/|g')"
al@603 221
pankso@452 222 SLITAZ_HOME="/home/slitaz"
al@603 223 if [ "$SLITAZ_VERSION" == 'cooking' ]; then
al@603 224 WOK="$SLITAZ_HOME/wok"
pankso@451 225 else
al@603 226 WOK="$SLITAZ_HOME/wok-$SLITAZ_VERSION"
pankso@451 227 fi
al@603 228
al@603 229 pkgsrepo="$SLITAZ_HOME/$SLITAZ_VERSION/packages"
al@603 230 repoid="$(cat "$pkgsrepo/ID")"
al@603 231 filelist="$pkgsrepo/files.list.lzma"
al@603 232 pkglist="$pkgsrepo/packages.txt"
al@603 233 equiv="$pkgsrepo/packages.equiv"
al@603 234 pinfo="$pkgsrepo/packages.info"
al@603 235
al@603 236
al@603 237
pankso@230 238
pankso@230 239 # Search form
al@284 240 # TODO: add hint 'You are can search for depends loop, if textfield is empty'...
al@284 241 # add progress ticker while page is not complete
al@603 242
al@603 243 search_form() {
al@603 244 [ -z "$SEARCH$(GET info)" ] && autofocus='autofocus'
al@603 245
al@603 246 cat <<EOT
pankso@230 247
al@293 248 <div class="form">
al@603 249 <form id="s_form" name="s_form" method="post" action="$(ifdebug '?')">
al@293 250 <span class="small">
al@293 251 <select name="object">
al@603 252 <option value="Package">$( _ 'Package name')</option>
al@603 253 <option $sel_desc value="Desc">$( _ 'Description')</option>
al@603 254 <option $sel_tags value="Tags">$( _ 'Tag')</option>
al@603 255 <option $sel_arch value="Arch">$( _ 'Architecture')</option>
al@603 256 <option $sel_bugs value="Bugs">$( _ 'Bugs')</option>
al@603 257 <option $sel_rcpt value="Receipt">$( _ 'Receipt')</option>
al@603 258 <option $sel_deps value="Depends">$( _ 'Dependencies')</option>
al@603 259 <option $sel_bdps value="BuildDepends">$( _ 'Build dependencies')</option>
al@603 260 <option $sel_file value="File">$( _ 'File')</option>
al@603 261 <option $sel_flst value="File_list">$( _ 'File list')</option>
al@603 262 <option $sel_over value="FileOverlap">$( _ 'Common files')</option>
al@603 263 <option $sel_catg value="Category">$( _ 'Category')</option>
al@603 264 <option $sel_mtnr value="Maintainer">$( _ 'Maintainer')</option>
al@603 265 <option $sel_lcns value="License">$( _ 'License')</option>
al@293 266 </select>
al@293 267 </span>
al@293 268 <span class="stretch">
al@603 269 <input $autofocus type="search" name="query" id="query" value="$SEARCH$(GET info)"
al@603 270 autocorrect="off" autocapitalize="off" autocomplete="on" spellcheck="false"
al@603 271 results="5" autosave="pkgsearch"/>
al@293 272 </span>
al@293 273 <span class="small">
al@603 274 <select name="version" title="$(_ 'SliTaz version')">
al@603 275 <option value="cooking">$( _ 'cooking')</option>
al@603 276 <option $sel_s value="stable">4.0</option>
al@603 277 <option $sel_3 value="3.0">3.0</option>
al@603 278 <option $sel_2 value="2.0">2.0</option>
al@603 279 <option $sel_1 value="1.0">1.0</option>
al@603 280 <option $sel_t value="tiny">$( _ 'tiny')</option>
al@603 281 <option $sel_u value="undigest">$( _ 'undigest')</option>
al@603 282 <option $sel_b value="backports">$( _ 'backports')</option>
al@293 283 </select>
al@293 284 </span>
al@293 285 <span class="small">
al@603 286 <button type="submit">$(_ 'Search')</button>
al@293 287 </span>
pankso@230 288 </form>
al@293 289 </div>
al@603 290 EOT
pankso@230 291 }
pankso@230 292
al@603 293
al@261 294 # xHTML5 Header.
al@603 295
pankso@231 296 xhtml_header() {
al@261 297 . lib/header.sh
pankso@230 298 }
pankso@230 299
al@603 300
al@603 301 # FIXME: unused function
al@603 302
al@603 303 cat_files_list() {
al@603 304 local tmp="/tmp/files.list.$(basename ${1%/packages})"
al@603 305 if [ ! -s "$tmp" -o "$1/files.list.lzma" -nt "$tmp" ]; then
al@603 306 unlzma < "$1/files.list.lzma" > "$tmp.$$" && mv "$tmp.$$" "$tmp"
slaxemulator@336 307 fi
slaxemulator@336 308 case "$2" in
al@603 309 lines)
al@603 310 if [ ! -s "$tmp.lines" -o "$tmp" -nt "$tmp.lines" ]; then
al@603 311 wc -l < "$tmp" > "$tmp.lines.$$" &&
al@603 312 mv "$tmp.lines.$$" "$tmp.lines"
al@603 313 fi
al@603 314 cat "$tmp.lines"
al@603 315 ;;
al@603 316 *)
al@603 317 cat "$tmp";;
slaxemulator@336 318 esac
slaxemulator@336 319 }
slaxemulator@336 320
al@603 321
al@603 322
al@603 323
pankso@230 324 # xHTML Footer.
al@603 325
pankso@231 326 xhtml_footer() {
al@603 327 # Number of packages in the current repo
al@603 328 if [ ! -f "$cache/stat.p.$SLITAZ_VERSION.$repoid" ]; then
al@603 329 rm $cache/stat.p.$SLITAZ_VERSION.*
al@603 330 ls "$WOK/" | wc -l > "$cache/stat.p.$SLITAZ_VERSION.$repoid"
al@603 331 fi
al@603 332
al@603 333 # Number of files in the current repo
al@603 334 if [ ! -f "$cache/stat.f.$SLITAZ_VERSION.$repoid" ]; then
al@603 335 rm $cache/stat.f.$SLITAZ_VERSION.*
al@603 336 unlzma < "$filelist" | wc -l > "$cache/stat.f.$SLITAZ_VERSION.$repoid"
al@603 337 fi
al@603 338
al@603 339 PKGS=$( cat "$cache/stat.p.$SLITAZ_VERSION.$repoid")
al@603 340 FILES=$(cat "$cache/stat.f.$SLITAZ_VERSION.$repoid")
al@603 341 echo -n '<div class="summary">'
al@603 342 _p '%s package' '%s packages' "$PKGS" \
al@603 343 "$PKGS"
al@603 344 _p ' and %s file in %s database' ' and %s files in %s database' "$FILES" \
al@603 345 "$FILES" "$SLITAZ_VERSION"
al@603 346 cat <<EOT
al@603 347 </div>
al@603 348 </main>
al@603 349
al@603 350 <footer>
al@603 351 EOT
al@603 352
al@603 353 local lang="${LANG%_*}"
al@603 354 if [ -e "lib/footer.$lang.sh" ]; then
al@603 355 . lib/footer.$lang.sh
al@603 356 else
al@603 357 . lib/footer.sh
al@603 358 fi
al@603 359
al@603 360 echo -n '<div class="summary">'
al@603 361 gen_time=$(( $(date -u +%s) - $date_start ))
al@603 362 _p 'Page generated in %s second.' 'Page generated in %s seconds.' "$gen_time" \
al@603 363 "$gen_time"
al@603 364
al@603 365 cat <<EOT
al@603 366 </div>
al@603 367 <img src="style/qr.png" alt="#" onmouseover="this.title = location.href"
al@603 368 onclick="this.src = QRCodePNG(location.href, this)"/>
al@603 369 </footer>
al@603 370
al@603 371 <script>
al@603 372 function QRCodePNG(str, obj) {
al@603 373 try {
al@603 374 obj.height = obj.width += 300;
al@603 375 return QRCode.generatePNG(str, {ecclevel: 'H'});
al@603 376 }
al@603 377 catch (any) {
al@603 378 var element = document.createElement("script");
al@603 379 element.src = "style/qrcode.min.js";
al@603 380 element.type ="text/javascript";
al@603 381 element.onload = function() {
al@603 382 obj.src = QRCode.generatePNG(str, {ecclevel: 'H'});
al@603 383 };
al@603 384 document.body.appendChild(element);
al@603 385 }
pankso@230 386 }
pankso@230 387
al@603 388 document.getElementById('ticker').style.visibility='hidden';
al@603 389 </script>
al@603 390 </body>
al@603 391 </html>
al@603 392 EOT
al@603 393
al@603 394 }
al@603 395
al@603 396
al@603 397
al@603 398
al@603 399 # TODO: to remove
al@603 400
al@603 401 installed_size() {
al@284 402 if [ $VERBOSE -gt 0 ]; then
slaxemulator@320 403 inst=$(grep -A 3 "^$1\$" $pkgslist | grep installed)
al@284 404 # size=$(echo $inst | cut -d'(' -f2 | cut -d' ' -f1)
al@284 405 echo $inst | sed 's/.*(\(.*\).*/(\1)/'
al@284 406 # echo $size
al@284 407 # | sed 's/.*(\(.*\) installed.*/(\1) /'
al@284 408 fi
pankso@230 409 }
pankso@230 410
al@603 411
al@603 412
al@603 413
al@603 414 # Package icon
al@603 415
al@603 416 package_icon() {
al@603 417 local icon='pkg'
al@603 418
al@603 419 case "$1" in
al@603 420 *-dev) icon='dev';;
al@603 421 linux-*|linux64-*) icon='linux';;
al@603 422 xorg-*) icon='xorg';;
al@603 423 *) icon=$(awk -F$'\t' -vp="$1" '$1==p{print $2;exit}' "$iconslast");;
al@293 424 esac
al@603 425 echo "icons$2/${icon:-pkg}.png"
al@293 426 }
al@293 427
al@603 428
al@603 429
al@603 430
al@293 431 package_entry() {
al@603 432
al@603 433 # Level for packages tree
al@603 434 if [ -n "$1" ]; then
al@603 435 echo "<tr class=\"l$1\">"
al@293 436 else
al@603 437 echo '<tr>'
al@603 438 fi
al@603 439
al@603 440 PACKAGE_URL="$MIRROR_URL/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg"
al@603 441
al@603 442 case "$SLITAZ_VERSION" in
al@603 443 cooking)
al@603 444 COOKER="<a href=\"http://cook.slitaz.org/cooker.cgi?pkg=$PACKAGE\" class=\"co\" title=\"$a_co\">$a_co</a>";;
pascal@462 445 stable|undigest|backports)
al@603 446 COOKER="<a href=\"http://cook.slitaz.org/$SLITAZ_VERSION/cooker.cgi?pkg=$PACKAGE\" class=\"co\" title=\"$a_co\">$a_co</a>";;
al@603 447 *)
al@603 448 COOKER='';;
al@603 449 esac
al@603 450
al@603 451 cat <<EOT
al@603 452 <td class="first"><a href="?info=$PACKAGE&amp;version=$SLITAZ_VERSION"><img
al@603 453 src="$(package_icon $PACKAGE)"/></a></td>
al@603 454 <td><b>$PACKAGE</b><br/>$SHORT_DESC</td>
al@603 455 <td class="last">
al@603 456 <a class="dl" href="$PACKAGE_URL" title="$a_dl">$a_dl</a>
al@603 457 <a class="rc" href="?receipt=$PACKAGE&amp;version=$SLITAZ_VERSION" title="$a_rc">$a_rc</a>
al@603 458 $COOKER
al@603 459 </td>
al@293 460 </tr>
al@293 461 EOT
al@293 462 }
slaxemulator@336 463
al@603 464
al@603 465 package_entries() {
al@603 466 # Input: $1 = [ desc | category | tags | name ]
al@603 467 # $2 = query
al@603 468
al@603 469 awk -F$'\t' -vtype="$1" -vquery="$2" -vmurl="$MIRROR_URL" -vver="$SLITAZ_VERSION" \
al@603 470 -vaco="$a_co" -vadl="$a_dl" -varc="$a_rc" -viconslast="$iconslast" '
al@603 471 BEGIN {
al@603 472 IGNORECASE = 1;
al@603 473 print "<table class=\"list\">";
al@603 474 }
al@603 475
al@603 476 function cooker() {
al@603 477 if (ver!="cooking" && ver!="stable" && ver!="undigest" && ver!="backports") return;
al@603 478
al@603 479 printf "\t<a href=\"http://cook.slitaz.org/";
al@603 480 if (ver=="stable" || ver=="undigest" || ver=="backports") printf "%s/", ver;
al@603 481 printf "cooker.cgi?pkg=%s\" class=\"co\" title=\"%s\">%s</a>", $1, aco, aco;
al@603 482 }
al@603 483
al@603 484 function icon(pkg) {
al@603 485 i="";
al@603 486 if (pkg ~ /-dev$/) { return "dev"; }
al@603 487 if (pkg ~ /^linux(64)?-/) { return "linux"; }
al@603 488 if (pkg ~ /^xorg-/) { return "xorg"; }
al@603 489 "awk -vp=\"" pkg "\" \"BEGIN{FS=\\\"\t\\\"}\\\$1==p{print \\\$2;exit}\" " iconslast | getline i;
al@603 490 if (i) { return i; }
al@603 491 return "pkg";
al@603 492 }
al@603 493
al@603 494 function addver() {
al@603 495 if (ver=="c" || ver=="cooking") return "";
al@603 496 return ("&amp;version=" ver);
al@603 497 }
al@603 498
al@603 499 function tabline() {
al@603 500 markname = $1; if (type=="name") gsub(query, "<mark>&</mark>", markname);
al@603 501 markdesc = $4; if (type=="desc") gsub(query, "<mark>&</mark>", markdesc);
al@603 502 printf "<tr>\n\t<td class=\"first\">"
al@603 503 printf "<a href=\"?info=%s%s\">", $1, addver();
al@603 504 printf "<img src=\"icons/%s.png\"/></a></td>\n", icon($1);
al@603 505 printf "\t<td><b>%s</b><br/>%s</td>\n", markname, markdesc;
al@603 506 printf "\t<td class=\"last\">\n";
al@603 507 printf "\t<a class=\"dl\" href=\"%s\" ", murl "/packages/" ver "/" $1 "-" $2 ".tazpkg";
al@603 508 printf "title=\"%s\">%s</a>\n", adl, adl;
al@603 509 printf "\t<a class=\"rc\" href=\"?receipt=%s%s\" ", $1, addver();
al@603 510 printf "title=\"%s\">%s</a>\n", arc, arc;
al@603 511 cooker();
al@603 512 printf "</td>\n</tr>\n"
al@603 513 }
al@603 514
al@603 515
al@603 516 {
al@603 517 if (type=="name" && match($1, query)) tabline();
al@603 518 if (type=="category" && $3==query) tabline();
al@603 519 if (type=="desc" && match($4, query)) tabline();
al@603 520 if (type=="tags" && match(" "$6" ", " "query" ")) tabline();
al@603 521 }
al@603 522
al@603 523 END { print "</table>"; }
al@603 524 ' "$pinfo";
al@603 525 }
al@603 526
al@603 527
al@603 528
al@603 529
al@293 530 package_entry_inline() {
al@603 531 # if [ -s "$(dirname $0)/$SLITAZ_VERSION/$CATEGORY.html" ]; then
al@603 532 # cat << _EOT_
al@603 533 #<a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> $(installed_size $PACKAGE) : $SHORT_DESC
al@603 534 #_EOT_
al@603 535 # else
slaxemulator@336 536 PACKAGE_URL="$MIRROR_URL/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg"
al@293 537 PACKAGE_HREF="<a href=\"$PACKAGE_URL\">$PACKAGE</a>"
pascal@456 538 case "$SLITAZ_VERSION" in
al@603 539 cooking)
al@603 540 COOKER="<a href=\"http://cook.slitaz.org/cooker.cgi?pkg=$PACKAGE\">$a_co</a>";;
al@603 541 stable|undigest|backports)
al@603 542 COOKER="<a href=\"http://cook.slitaz.org/$SLITAZ_VERSION/cooker.cgi?pkg=$PACKAGE\">$a_co</a>";;
al@603 543 *)
al@603 544 COOKER='';;
pascal@456 545 esac
al@603 546 cat <<EOT
pascal@456 547 $PACKAGE_HREF $(installed_size $PACKAGE) : $SHORT_DESC \
al@603 548 <a href="?receipt=$PACKAGE&amp;version=$SLITAZ_VERSION">$a_rc</a>&nbsp;$COOKER
al@603 549 EOT
al@603 550 # fi
pankso@230 551 }
pankso@230 552
al@603 553
pankso@230 554 # Show loop in depends/build_depends chains
al@603 555
al@603 556 show_loops() {
pankso@230 557 awk '
pankso@230 558 function chkloop(pkg, i, n)
pankso@230 559 {
pankso@230 560 if (n < 8)
pankso@230 561 for (i = 1; i <= split(deps[pkg],curdep," "); i++) {
pankso@230 562 if (curdep[i] == base || chkloop(curdep[i], 0, n+1)) {
pankso@230 563 split(deps[pkg],curdep," ")
pankso@230 564 p = curdep[i] " " p
pankso@230 565 return 1
pankso@230 566 }
pankso@230 567 }
pankso@230 568 return 0
pankso@230 569 }
pankso@230 570 {
pankso@230 571 for (i = 2; i <= NF; i++)
pankso@230 572 deps[$1] = deps[$1] " " $i
pankso@230 573 }
pankso@230 574 END {
pankso@230 575 for (pkg in deps) {
pankso@230 576 base = pkg
pankso@230 577 p = ""
pankso@230 578 if (chkloop(pkg, 0, 0))
pankso@230 579 print pkg " " p
pankso@230 580 #print pkg " : " p "..."
pankso@230 581 }
pankso@230 582 }' | while read line; do
pankso@230 583 set -- $line
pankso@230 584 case " $last " in
pankso@230 585 *\ $1\ *) continue
pankso@230 586 esac
pankso@230 587 last="$line"
pankso@230 588 pkg=$1
pankso@230 589 shift
al@284 590 echo "<strong>$pkg </strong>: $@ ..."
pankso@230 591 done
pankso@230 592 }
pankso@230 593
al@603 594
pankso@230 595 # recursive dependencies scan
al@603 596
al@603 597 dep_scan() {
al@603 598 for i in $1; do
al@603 599 case " $ALL_DEPS " in
al@603 600 *\ $i\ *)
al@603 601 continue;;
al@603 602 esac
al@603 603 ALL_DEPS="$ALL_DEPS $i"
al@603 604 if [ -n "$2" ]; then
al@603 605 echo -n "$2"
al@603 606 (
al@603 607 . $WOK/$i/receipt
al@603 608 package_entry_inline
al@603 609 )
al@603 610 fi
al@603 611 [ -f $WOK/$i/receipt ] || continue
al@603 612 unset BUILD_DEPENDS DEPENDS WANTED
pankso@230 613 . $WOK/$i/receipt
al@603 614 if [ -n "$3" ]; then
al@603 615 [ -n "$BUILD_DEPENDS$WANTED" ] &&
al@603 616 dep_scan "$WANTED $BUILD_DEPENDS" "$2 " $3
al@603 617 else
al@603 618 [ -n "$DEPENDS" ] && dep_scan "$DEPENDS" "$2 "
al@603 619 fi
al@603 620 done
pankso@230 621 }
pankso@230 622
al@603 623
pankso@230 624 # recursive reverse dependencies scan
al@603 625
al@603 626 rdep_scan() {
pankso@230 627 SEARCH=$1
pankso@230 628 case "$SEARCH" in
al@261 629 glibc-base|gcc-lib-base)
al@603 630 _ '"glibc-base" and "gcc-lib-base" are implicit dependencies, <b>every</b> package is supposed to depend on them.'
pankso@230 631 return;;
pankso@230 632 esac
pankso@230 633 for i in $WOK/* ; do
slaxemulator@336 634 unset BUILD_DEPENDS DEPENDS WANTED
pankso@230 635 . $i/receipt
pankso@230 636 if [ -n "$2" ]; then
pankso@230 637 echo "$(basename $i) $(echo $WANTED $BUILD_DEPENDS)"
pankso@230 638 else
pankso@230 639 echo "$(basename $i) $(echo $DEPENDS)"
pankso@230 640 fi
pankso@230 641 done | awk -v search=$SEARCH '
pankso@230 642 function show_deps(deps, all_deps, pkg, space)
pankso@230 643 {
pankso@230 644 if (all_deps[pkg] == 1) return
pankso@230 645 all_deps[pkg] = 1
pankso@230 646 if (space != "") printf "%s%s\n",space,pkg
pankso@230 647 for (i = 1; i <= split(deps[pkg], mydeps, " "); i++) {
pankso@230 648 show_deps(deps, all_deps, mydeps[i],"////" space)
pankso@230 649 }
pankso@230 650 }
pankso@230 651
pankso@230 652 {
pankso@230 653 all_deps[$1] = 0
pankso@230 654 for (i = 2; i <= NF; i++)
pankso@230 655 deps[$i] = deps[$i] " " $1
pankso@230 656 }
pankso@230 657
pankso@230 658 END {
pankso@230 659 show_deps(deps, all_deps, search, "")
pankso@230 660 }
pankso@230 661 ' | while read pkg; do
pankso@230 662 . $WOK/${pkg##*/}/receipt
pankso@230 663 cat << _EOT_
al@293 664 $(echo ${pkg%/*} | sed 's|/| |g') $(package_entry_inline)
pankso@230 665 _EOT_
pankso@230 666 done
pankso@230 667 }
pankso@230 668
pankso@230 669
al@603 670
al@603 671
al@603 672 # Check non-empty argument
al@603 673
al@603 674 check_n() {
al@603 675 if [ -z "$1" ]; then
al@603 676 cat <<EOT
al@603 677 <div class="err">$(_ 'Please specify name of the package.')</div>
al@603 678 <p> <br/> </p>
al@603 679 EOT
al@603 680 return 1
al@603 681 fi
pankso@230 682 }
pankso@230 683
al@603 684
al@603 685 # Check package existence
al@603 686
al@603 687 package_exist() {
al@603 688 check_n "$1"
al@603 689
al@603 690 if [ ! -f "$WOK/$1/receipt" ]; then
al@603 691 cat <<EOT
al@603 692 <div class="err">$(_ 'Package "%s" was not found' "$SEARCH")</div>
al@603 693 <p> <br/> </p>
al@603 694 EOT
al@603 695 return 1
al@603 696 fi
al@603 697
al@603 698 return 0
pankso@230 699 }
pankso@230 700
al@603 701
al@603 702
al@603 703
al@603 704 # Display < > &
al@603 705
al@603 706 htmlize() {
al@603 707 sed -e 's|&|\&amp;|g; s|<|\&lt;|g; s|>|\&gt;|g'
al@603 708 }
al@603 709
al@603 710
al@603 711
al@603 712
al@293 713 display_packages_and_files() {
al@603 714 unset last
al@603 715 while read pkg file; do
al@603 716 pkg=${pkg%:}
al@603 717 if [ "$pkg" != "$last" ]; then
al@603 718 . "$WOK/$pkg/receipt"
al@236 719
al@603 720 package_entry_inline
al@603 721 last="$pkg"
al@603 722 fi
al@603 723 echo " $file"
al@603 724 done
pankso@230 725 }
pankso@230 726
al@603 727
al@293 728 # Syntax highlighting for receipt file - stolen from tazpanel:
al@293 729 # '/var/www/tazpanel/lib/libtazpanel' and developed
al@603 730
al@293 731 syntax_highlighter() {
pascal@459 732 . $1
pascal@457 733 sed -e "s|\&|\&amp;|g; s|<|\&lt;|g; s|>|\&gt;|g; s| | |g" \
al@293 734 -e "s|@|\&#64;|g; s|~|\&#126;|g" \
al@293 735 -e "#literals" \
al@293 736 -e "s|'\([^']*\)'|@l\0~|g" \
al@293 737 -e 's|"\([^"]*\)"|@l\0~|g' \
al@293 738 -e 's|"\([^"]*\)\\|@l\0~|g' \
al@293 739 -e 's|\([^"]*\)\"$|@l\0~|g' \
al@293 740 -e "#paths" \
al@293 741 -e 's|\([ =]\)\([a-zA-Z0-9/-]*/[\$a-zA-Z0-9/\.-]\+\)\([ )]\)|\1@p\2~\3|g' \
al@293 742 -e 's|\([ =]\)\([a-zA-Z0-9/-]*/[\$a-zA-Z0-9/\.-]\+$\)|\1@p\2~|g' \
al@293 743 -e 's|\(\$[a-zA-Z0-9_\.-]\+\)\(/[\$a-zA-Z0-9_/\.\*-]\+\)\([ )]*\)|@p\1\2~\3|g' \
al@293 744 -e "#functions" \
al@293 745 -e 's|^\([^()]*\)\(()\)|@f\0~|g' \
al@293 746 -e "#single line comments" \
al@293 747 -e 's|^\([ ]*\)#\([^#]*$\)|@c\0~|g' \
al@293 748 -e "#parameters" \
al@293 749 -e 's|\( \)\(-[a-z0-9]\+\)\( *\)|\1@r\2~\3|g' \
al@293 750 -e 's|\( \)\(--[a-z0-9\-]\+\)\([= ]\)|\1@r\2~\3|g' \
al@293 751 -e "#variables" \
al@293 752 -e "s|^\([^=@#' \-]*\)\(=\)|@v\1~\2|g" \
al@293 753 -e 's|\([ ^@-]*\)\([a-zA-Z0-9]\+\)\(=\)|\1@v\2~\3|g' \
al@293 754 -e "s#\(\$[a-zA-Z0-9_]\+\)#@v\0~#g" \
al@293 755 -e "#urls" \
al@293 756 -e s"#\"\(http:[^\"\$ ]*\)\"#\"<a @u href=\0>\1</a>\"#"g \
al@293 757 -e s"#\"\(ftp:[^\"\$ ]*\)\"#\"<a @u href=\0>\1</a>\"#"g \
al@293 758 -e "#commands" \
al@293 759 -e s"#^\( \+\)\([^'= @\-]\+\)#\1@m\2~#"g \
al@293 760 -e "#simple commands" \
al@293 761 -e s"#\([{}\]$\)#@s\0~#"g \
al@293 762 -e s"#\( \)\(\&amp;\&amp;\)\( *\)#\1@s\2~\3#"g \
al@293 763 -e s"#\(|\)#@s\0~#"g \
al@293 764 -e s"#\(\&lt;\)#@s\0~#"g \
al@293 765 -e s"#\(\&gt;\&amp;\)#@s\0~#"g \
al@293 766 -e s"#\(\&gt;\)#@s\0~#"g \
al@293 767 -e s"#\(\[\)#@s\0~#"g \
al@293 768 -e s"#\(\]\)#@s\0~#"g \
al@293 769 \
al@293 770 -e "s|´|'|g; s|›|</span>|g" \
al@293 771 -e "s|@c|<span class='r-comment'>|g" \
al@293 772 -e "s|@l|<span class='r-literal'>|g" \
al@293 773 -e "s|@v|<span class='r-var'>|g" \
al@293 774 -e "s|@f|<span class='r-func'>|g" \
al@293 775 -e "s|@u|class='r-url' target='_blank'|g" \
al@293 776 -e "s|@m|<span class='r-com'>|g" \
al@293 777 -e "s|@s|<span class='r-scom'>|g" \
al@293 778 -e "s|@p|<span class='r-path'>|g" \
al@293 779 -e "s|@r|<span class='r-param'>|g" \
pascal@459 780 -e "s|~|</span>|g" < "$1" | add_url_links
pascal@459 781 }
pascal@459 782
al@603 783
pascal@459 784 # Create some clickable links
al@603 785
pascal@459 786 add_url_links() {
pascal@459 787 local tarball_url
al@603 788 sedit=''
pascal@461 789 case "$SLITAZ_VERSION" in
al@603 790 cooking)
al@603 791 [ -n "$VERSION" ] &&
al@603 792 sedit="$sedit -e 's|\\(>VERSION<[^\"]*\"\\)\\([^\"]*\\)|\\1<a class='r-url' target='_blank' href=\"http://cook.slitaz.org/cooker.cgi?pkg=$PACKAGE\">\\2</a>|}'"
al@603 793 ;;
al@603 794 stable|undigest|backports)
al@603 795 [ -n "$VERSION" ] &&
al@603 796 sedit="$sedit -e 's|\\(>VERSION<[^\"]*\"\\)\\([^\"]*\\)|\\1<a class='r-url' target='_blank' href=\"http://cook.slitaz.org/$SLITAZ_VERSION/cooker.cgi?pkg=$PACKAGE\">\\2</a>|}'"
al@603 797 ;;
pascal@461 798 esac
pascal@460 799 #[ -n "$WEB_SITE" ] && sedit="$sedit -e '/WEB_SITE/{s|\\($WEB_SITE\\)|<a class='r-url' target='_blank' href=\"\\1\">\\1</a>|}'"
al@603 800
al@603 801 [ -n "$WGET_URL" ] &&
al@603 802 sedit="$sedit -e 's|\\(>WGET_URL<[^\"]*\"\\)\\([^\"]*\\)|\\1<a class='r-url' target='_blank' href=\"${WGET_URL//|/\\|}\">\\2</a>|}'"
al@603 803
al@603 804 [ -n "$MAINTAINER" ] &&
al@603 805 sedit="$sedit -e '/MAINTAINER/{s|\\(${MAINTAINER/@/&#64;}\\)|<a class='r-url' target='_blank' href=\"?maintainer=\\1\\&amp;version=$SLITAZ_VERSION\">\\1</a>|}'"
al@603 806
al@603 807 [ -n "$CATEGORY" ] &&
al@603 808 sedit="$sedit -e '/CATEGORY/{s|\\($CATEGORY\\)|<a class='r-url' target='_blank' href=\"?category=\\1\\&amp;version=$SLITAZ_VERSION\">\\1</a>|}'"
al@603 809
al@603 810 [ -f "$WOK/$PACKAGE/description.txt" ] &&
al@603 811 sedit="$sedit -e '/SHORT_DESC/{s|\\($SHORT_DESC\\)|<a class='r-url' target='_blank' href=\"?desc=$PACKAGE\\&amp;version=$SLITAZ_VERSION\">\\1</a>|}'"
al@603 812
pascal@459 813 tarball_url=sources/packages-$SLITAZ_VERSION/${TARBALL:0:1}/$TARBALL
pascal@459 814 [ -f /var/www/slitaz/mirror/$tarball_url ] || case "$tarball_url" in
pascal@459 815 *.gz) tarball_url=${tarball_url%gz}lzma ;;
pascal@459 816 *.tgz) tarball_url=${tarball_url%tgz}tar.lzma ;;
pascal@459 817 *.bz2) tarball_url=${tarball_url%bz2}lzma ;;
pascal@459 818 esac
pascal@459 819 [ -f /var/www/slitaz/mirror/$tarball_url ] && sedit="$sedit -e 's|\\(>TARBALL<[^\"]*\"\\)\\([^\"]*\\)|\\1<a class='r-url' target='_blank' href=\"http://mirror.slitaz.org/$tarball_url\">\\2</a>|'"
al@603 820
al@603 821 if [ -n "$EXTRA_SOURCE_FILES" ]; then
al@603 822 for i in $(echo $EXTRA_SOURCE_FILES) ; do
al@603 823 p="sources/packages-$SLITAZ_VERSION/${i:0:1}/$i"
al@603 824 [ -f "/var/www/slitaz/mirror/$p" ] || continue
al@603 825 #FIXME
al@603 826 sedit="$sedit -e 's|\\([\" >]\\)$i\\([\" <\\]\\)|\\1<a class='r-url' target='_blank' href=\"http://mirror.slitaz.org/$p\">$i</a>\\2|'"
al@603 827 sedit="$sedit -e 's|^$i\\([\" <\\]\\)|<a class='r-url' target='_blank' href=\"http://mirror.slitaz.org/$p\">$i</a>\\1|'"
al@603 828 done
al@603 829 fi
pascal@460 830 if [ -n "$DEPENDS$BUILD_DEPENDS$SUGGESTED$PROVIDE$WANTED" ]; then
pascal@460 831 for i in $(echo $DEPENDS $BUILD_DEPENDS $SUGGESTED $PROVIDE $WANTED) ; do
pascal@460 832 sedit="$sedit -e 's|\\([\" >]\\)$i\\([\" <\\]\\)|\\1<a class='r-url' target='_blank' href=\\\"?receipt=$i\\&amp;version=$SLITAZ_VERSION\\\">$i</a>\\2|'"
pascal@463 833 sedit="$sedit -e 's|^$i\\([\" <\\]\\)|<a class='r-url' target='_blank' href=\\\"?receipt=$i\\&amp;version=$SLITAZ_VERSION\\\">$i</a>\\1|'"
pascal@459 834 done
pascal@459 835 fi
pascal@466 836 if [ -n "$LICENSE" ]; then
pascal@466 837 for i in $LICENSE ; do
pascal@466 838 sedit="$sedit -e '/LICENSE/{s|\\($i\\)|<a class='r-url' target='_blank' href=\"?license=\\1\\&amp;version=$SLITAZ_VERSION\">\\1</a>|}'"
pascal@466 839 done
pascal@466 840 fi
pascal@459 841 if [ -n "$HOST_ARCH" ]; then
pascal@459 842 for i in $HOST_ARCH ; do
pascal@459 843 sedit="$sedit -e '/HOST_ARCH/{s|\\([\" ]\\)$i\\([\" ]\\)|\\1<a class='r-url' target='_blank' href=\\\"?arch=$i\\&amp;version=$SLITAZ_VERSION\\\">$i</a>\\2|}'"
pascal@459 844 done
pascal@459 845 fi
pascal@459 846 if [ -n "$TAGS" ]; then
pascal@459 847 for i in $TAGS ; do
pascal@459 848 sedit="$sedit -e '/TAGS/{s|\\([\" ]\\)$i\\([\" ]\\)|\\1<a class='r-url' target='_blank' href=\\\"?tags=$i\\&amp;version=$SLITAZ_VERSION\\\">$i</a>\\2|}'"
pascal@459 849 done
pascal@459 850 fi
pascal@459 851 eval sed $sedit \
pascal@459 852 -e "'s|genpkg_rules|<a class='r-url' target='_blank' href=\"?filelist=$PACKAGE\\&amp;version=$SLITAZ_VERSION\">&</a>|'"
al@293 853 }
al@293 854
al@603 855
pascal@458 856 display_cloud() {
pascal@458 857 arg=$1
al@603 858 if [ "$SLITAZ_VERSION" == 'c' -o "$SLITAZ_VERSION" == 'cooking' ]; then
al@603 859 addver=''
al@603 860 else
al@603 861 addver="&amp;version=$SLITAZ_VERSION"
al@603 862 fi
pascal@458 863 awk '
pascal@458 864 {
pascal@458 865 for (i = 1; $i != ""; i++)
pascal@458 866 count[$i]++
pascal@458 867 }
pascal@458 868 END {
pascal@458 869 min=10000
pascal@458 870 max=0
pascal@459 871 cnt=0
pascal@458 872 for (i in count) {
pascal@458 873 if (count[i] < min) min = count[i]
pascal@458 874 if (count[i] > max) max = count[i]
pascal@459 875 cnt++
pascal@458 876 }
pascal@458 877 for (i in count)
pascal@458 878 print count[i] " " min " " max " " i
pascal@459 879 print cnt
pascal@463 880 }' | sed 's/[<>]//g' | sort -k 4 | {
pascal@461 881 while read cnt min max tag ; do
pascal@459 882 if [ -z "$min" ]; then
al@603 883 count="$cnt"
pascal@459 884 continue
pascal@459 885 fi
pascal@458 886 pct=$(((($cnt-$min)*100)/($max-$min)))
pascal@458 887 pct=$(((10000 - ((100 - $pct)**2))/100))
pascal@458 888 pct=$(((10000 - ((100 - $pct)**2))/100))
pascal@458 889 cat <<EOT
al@603 890 <span class="tagn">$cnt</span><a href="?$arg=$tag$addver" class="taga tag$(($pct/10))">$tag</a>
pascal@458 891 EOT
pascal@458 892 done
al@603 893 echo -n '<hr/><p class="lang">'
al@603 894 case $arg in
al@603 895 arch) _p '%s architecture' '%s architectures' "$count" "$count";;
al@603 896 maintainer) _p '%s maintainer' '%s maintainers' "$count" "$count";;
al@603 897 license) _p '%s license' '%s licenses' "$count" "$count";;
al@603 898 category) _p '%s category' '%s categories' "$count" "$count";;
al@603 899 tags) _p '%s tag' '%s tags' "$count" "$count";;
al@603 900 esac
al@603 901 echo '</p>'
pascal@461 902 }
pascal@458 903 }
al@293 904
al@603 905
al@293 906 #
al@293 907 # page begins
al@293 908 #
al@603 909
al@603 910 header "HTTP/1.1 200 OK" "Content-type: text/html; charset=UTF-8"
al@284 911 xhtml_header
al@284 912
al@603 913
pankso@266 914 #
al@293 915 # language selector, if needed
al@293 916 #
al@603 917
al@603 918 cat <<EOT
al@293 919 <!-- Languages -->
al@603 920 <div class="lang"><a class="locale2" href="http://www.slitaz.org/i18n.php"
al@603 921 target="_blank"></a><select form="s_form" name="lang" onchange="this.form.submit();">
al@293 922 EOT
al@603 923
al@603 924 for i in en de es fr it pl pt ru sv uk zh; do
al@603 925 case $i in
al@603 926 en) c='us'; l='English';;
al@603 927 de) c='de'; l='Deutsch';;
al@603 928 es) c='es'; l='Español';;
al@603 929 fr) c='fr'; l='Français';;
al@603 930 it) c='it'; l='Italiano';;
al@603 931 pl) c='pl'; l='Polski';;
al@603 932 pt) c='br'; l='Português';;
al@603 933 ru) c='ru'; l='Русский';;
al@603 934 sv) c='se'; l='Svenska';;
al@603 935 uk) c='ua'; l='Українська';;
al@603 936 zh) c='tw'; l='中文';;
al@603 937 esac
al@603 938
al@603 939 echo -n "<option class=\"$c\" value=\"$i\""
al@603 940 [ "$i" == "${LANG%_*}" ] && echo -n " selected"
al@603 941 echo ">$l</option>"
al@603 942 done
al@603 943 echo '</select></div>'
al@603 944
al@603 945 cat <<EOT
al@603 946 <!-- Content -->
al@603 947 <main>
al@293 948 EOT
al@293 949
al@293 950
al@293 951 #
pankso@266 952 # Handle GET requests
pankso@266 953 #
al@603 954
pankso@266 955 case " $(GET) " in
al@284 956 *\ debug\ *|*\ debug*)
al@603 957 cat <<EOT
al@284 958 <h2>Debug info</h2>
al@603 959
al@284 960 <pre>$(httpinfo)</pre>
al@603 961
al@284 962 <pre>LANG=$LANG;
al@284 963 OBJECT=$OBJECT;
al@284 964 SEARCH=$SEARCH;
al@284 965 SLITAZ_VERSION=$SLITAZ_VERSION;
al@284 966 WOK=$WOK;
al@293 967 GET=$(GET);
al@284 968 </pre>
al@284 969 EOT
al@284 970 ;;
pankso@266 971 esac
pankso@266 972
al@603 973
al@603 974
al@603 975
pankso@230 976 # Display search form and result if requested.
al@603 977
al@603 978 cat <<EOT
al@603 979 <div id="ticker"><!-- progress/ --><img src="loader.gif" alt="."/></div>
al@293 980 EOT
al@284 981 search_form
al@284 982
al@293 983
al@603 984
al@603 985
al@603 986 # Show links for "info" page
al@603 987
al@603 988 show_info_links() {
al@603 989 if [ -n "$1" ]; then
al@603 990 echo -n "<tr><td class=\"first\"><b>$2</b></td><td>"
al@603 991
al@603 992 echo $1 | tr ' ' $'\n' | awk -vt="$3" -vv="$SLITAZ_VERSION" '{
al@603 993 printf "<a href=\"?%s=%s", t, gensub(/\+/, "%2B", "g", $1);
al@603 994 printf "&amp;version=%s\">%s</a> ", v, $1;
al@603 995 }'
al@603 996 echo "</td></tr>"
al@603 997 fi
al@603 998 }
al@603 999
al@603 1000 # Source for categories names to translate
al@603 1001
al@603 1002 noop() {
al@603 1003 _ 'base-system'; _ 'x-window'; _ 'utilities'; _ 'network'; _ 'graphics';
al@603 1004 _ 'multimedia'; _ 'office'; _ 'development'; _ 'system-tools'; _ 'security';
al@603 1005 _ 'games'; _ 'misc'; _ 'meta'; _ 'non-free'
al@603 1006 }
al@603 1007
al@603 1008 case " $(GET) " in
al@603 1009 *\ info\ *)
al@603 1010 . "$WOK/$(GET info)/receipt"
al@603 1011
al@603 1012 cat <<EOT
al@603 1013 <table class="info">
al@603 1014 <tr>
al@603 1015 <td class="first"><b>$(_ 'Name')</b></td>
al@603 1016 <td>$PACKAGE
al@603 1017 <div class="appImg" style="background: url($(package_icon $PACKAGE 2))"></div>
al@603 1018 </td>
al@603 1019 </tr>
al@603 1020 EOT
al@603 1021 [ -n "$VERSION" ] && cat <<EOT
al@603 1022 <tr>
al@603 1023 <td class="first"><b>$(_ 'Version')</b></td>
al@603 1024 <td>$VERSION</td>
al@603 1025 </tr>
al@603 1026 EOT
al@603 1027 cat <<EOT
al@603 1028 <tr>
al@603 1029 <td class="first"><b>$(_ 'Category')</b></td>
al@603 1030 <td><a href="?category=$CATEGORY&amp;version=$SLITAZ_VERSION">$(_n "$CATEGORY")</a></td>
al@603 1031 </tr>
al@603 1032
al@603 1033 <tr>
al@603 1034 <td class="first"><b>$(_ 'Description')</b></td>
al@603 1035 <td>$(echo "$SHORT_DESC" | htmlize)</td>
al@603 1036 </tr>
al@603 1037 EOT
al@603 1038 [ -n "$MAINTAINER" ] && cat <<EOT
al@603 1039 <tr>
al@603 1040 <td class="first"><b>$(_ 'Maintainer')</b></td>
al@603 1041 <td><a href="?maintainer=$MAINTAINER&amp;version=$SLITAZ_VERSION">$MAINTAINER</a></td>
al@603 1042 </tr>
al@603 1043 EOT
al@603 1044 [ -n "$LICENSE" ] && cat <<EOT
al@603 1045 <tr>
al@603 1046 <td class="first"><b>$(_ 'License')</b></td>
al@603 1047 <td>$(for license in $LICENSE; do
al@603 1048 echo "<a href=\"?license=$license&amp;version=$SLITAZ_VERSION\">$license</a> "
al@603 1049 done)</td>
al@603 1050 </tr>
al@603 1051 EOT
al@603 1052 cat <<EOT
al@603 1053 <tr>
al@603 1054 <td class="first"><b>$(_ 'Website')</b></td>
al@603 1055 <td><a href="$WEB_SITE" target="_blank">$WEB_SITE</a></td>
al@603 1056 </tr>
al@603 1057 EOT
al@603 1058 show_info_links "$TAGS" "$(_ 'Tags')" 'tags'
al@603 1059
al@603 1060 if [ -n "$PACKED_SIZE" ]; then
al@603 1061 cat <<EOT
al@603 1062 <tr>
al@603 1063 <td class="first"><b>$(_ 'Sizes')</b></td>
al@603 1064 <td>${PACKED_SIZE/.0/}/${UNPACKED_SIZE/.0/}</td>
al@603 1065 </tr>
al@603 1066 EOT
al@603 1067 elif [ -f "$pinfo" ]; then
al@603 1068 cat <<EOT
al@603 1069 <tr>
al@603 1070 <td class="first"><b>$(_ 'Sizes')</b></td>
al@603 1071 <td>$(awk -F$'\t' -vp=$PACKAGE '$1==p{print $7}' "$pinfo" | tr ' ' '/')</td>
al@603 1072 </tr>
al@603 1073 EOT
al@603 1074 fi
al@603 1075
al@603 1076 show_info_links "$DEPENDS" "$(_ 'Depends')" 'info'
al@603 1077
al@603 1078 show_info_links "$PROVIDE" "$(_ 'Provide')" 'info'
al@603 1079
al@603 1080 show_info_links "$SUGGESTED" "$(_ 'Suggested')" 'info'
al@603 1081 cat <<EOT
al@603 1082 </table>
al@603 1083
al@603 1084 EOT
al@603 1085
al@603 1086 # Actions / screenshot
al@603 1087 pkg=${PACKAGE//+/%2B}
al@603 1088 pkg_url="$MIRROR_URL/packages/$SLITAZ_VERSION/$pkg-$VERSION$EXTRA_VERSION.tazpkg"
al@603 1089 case "$SLITAZ_VERSION" in
al@603 1090 cooking)
al@603 1091 COOKER="<a href=\"http://cook.slitaz.org/cooker.cgi?pkg=$PACKAGE\">$(_ 'Show cooking log')</a>";;
al@603 1092 stable|undigest|backports)
al@603 1093 COOKER="<a href=\"http://cook.slitaz.org/$SLITAZ_VERSION/cooker.cgi?pkg=$PACKAGE\">$(_ 'Show cooking log')</a>";;
al@603 1094 *)
al@603 1095 COOKER="$(_ 'N/A')";;
al@603 1096 esac
al@603 1097 cat <<EOT
al@603 1098 <table class="info">
al@603 1099 <tr>
al@603 1100 <td>
al@603 1101 <span class="dl"></span>
al@603 1102 <a href="$pkg_url">$(_ 'Download package')</a>
al@603 1103 </td>
al@603 1104 <td rowspan="5" class="first">
al@603 1105 <a href="http://screenshots.debian.net/package/$pkg" target="_blank"><img
al@603 1106 src="http://screenshots.debian.net/thumbnail/$pkg"/></a>
al@603 1107 </td>
al@603 1108 </tr>
al@603 1109 <tr>
al@603 1110 <td>
al@603 1111 <span class="rc"></span>
al@603 1112 <a href="?receipt=$pkg&amp;version=$SLITAZ_VERSION">$(_ 'Show receipt')</a>
al@603 1113 </td>
al@603 1114 </tr>
al@603 1115 <tr>
al@603 1116 <td>
al@603 1117 <span class="co"></span>
al@603 1118 $COOKER
al@603 1119 </td>
al@603 1120 </tr>
al@603 1121 <tr>
al@603 1122 <td>
al@603 1123 <span class="dl"></span>
al@603 1124 <a href="http://127.0.0.1:82/user/pkgs.cgi?do=Install&amp;pkg=$pkg" target="_blank">$(_ 'Install package')</a>
al@603 1125 </td>
al@603 1126 </tr>
al@603 1127 <tr>
al@603 1128 <td>
al@603 1129 <span class="dl"></span>
al@603 1130 <a href="${pkg_url/http/tazpkg}">$(_ 'Download and open (experimental)')</a>
al@603 1131 </td>
al@603 1132 </tr>
al@603 1133 </table>
al@603 1134 EOT
al@603 1135
al@603 1136 # Description
al@603 1137 if [ -f "$WOK/$PACKAGE/description.txt" ]; then
al@603 1138 cat <<EOT
al@603 1139 <h3>$(_ 'Description')</h3>
al@603 1140 <table><tr><td>$(./sundown < "$WOK/$PACKAGE/description.txt")</td></tr></table>
al@603 1141 EOT
al@603 1142 fi
al@603 1143
al@603 1144 # Config files
al@603 1145 if [ -n "$CONFIG_FILES" ]; then
al@603 1146 cat <<EOT
al@603 1147 <div class="conf">
al@603 1148 <h3>$(_ 'Configuration files')</h3>
al@603 1149 <ul>
al@603 1150 EOT
al@603 1151 for file in $CONFIG_FILES; do
al@603 1152 cat <<EOT
al@603 1153 <li><a href="ftp://cook.slitaz.org/$PACKAGE/taz/$PACKAGE-$VERSION$EXTRAVERSION/fs$file" target="_blank">$file</a></li>
al@603 1154 EOT
al@603 1155 done
al@603 1156 cat <<EOT
al@603 1157 </ul>
al@603 1158 </div>
al@603 1159 EOT
al@603 1160 fi
al@603 1161
al@603 1162 ;;
al@603 1163 esac
al@603 1164
al@603 1165
al@603 1166
al@603 1167
al@284 1168 case "$OBJECT" in
al@284 1169
al@284 1170
al@284 1171 ### Depends loops; [Reverse] Dependency tree [(SUGGESTED)]
al@284 1172 Depends)
al@284 1173 if [ -z "$SEARCH" ]; then
al@603 1174 cat <<EOT
al@603 1175 <h3>$(_ 'Loop dependence')</h3>
al@603 1176 <pre class="hard">
al@603 1177 EOT
al@284 1178 for i in $WOK/*/receipt; do
al@284 1179 PACKAGE=
al@284 1180 DEPENDS=
al@284 1181 . $i
al@284 1182 echo "$PACKAGE $(echo $DEPENDS)"
al@284 1183 done | show_loops
al@603 1184 echo '</pre>'
al@603 1185
al@284 1186 elif package_exist $SEARCH ; then
al@603 1187 cat <<EOT
al@603 1188 <h3>$(_ 'Dependency tree for package "%s"' "$SEARCH")</h3>
al@603 1189 <pre class="hard">
al@603 1190 EOT
slaxemulator@336 1191 unset ALL_DEPS
al@603 1192 dep_scan $SEARCH ''
slaxemulator@336 1193 unset SUGGESTED
al@284 1194 . $WOK/$SEARCH/receipt
al@603 1195 echo '</pre>'
al@603 1196
al@284 1197 if [ -n "$SUGGESTED" ]; then
al@603 1198 cat <<EOT
al@603 1199 <h3>$(_ 'Dependency tree for package "%" (SUGGESTED)' "$SEARCH")</h3>
al@603 1200 <pre class="hard">
al@603 1201 EOT
al@603 1202 unset ALL_DEPS
al@603 1203 dep_scan "$SUGGESTED" ' '
al@603 1204 echo '</pre>'
al@603 1205 fi
pankso@230 1206
al@603 1207 cat <<EOT
al@603 1208 <h3>$(_ 'Reverse dependency tree for package "%s"' "$SEARCH")</h3>
al@603 1209 <pre class="hard">
al@603 1210 EOT
slaxemulator@336 1211 unset ALL_DEPS
al@284 1212 rdep_scan $SEARCH
al@603 1213 echo '</pre>'
al@284 1214 fi
al@284 1215 ;;
al@284 1216
al@284 1217
al@603 1218
al@603 1219
al@284 1220 ### Build depends loops; [Reverse] Build dependency tree
al@603 1221
al@284 1222 BuildDepends)
al@284 1223 if [ -z "$SEARCH" ]; then
al@603 1224 cat <<EOT
al@603 1225 <h3>$(_ 'Loop dependence of build')</h3>
al@603 1226 <pre class="hard">
al@603 1227 EOT
al@284 1228 for i in $WOK/*/receipt; do
al@284 1229 PACKAGE=
al@284 1230 WANTED=
al@284 1231 BUILD_DEPENDS=
al@284 1232 . $i
al@284 1233 echo "$PACKAGE $WANTED $(echo $BUILD_DEPENDS)"
al@284 1234 done | show_loops
al@603 1235 echo '</pre>'
al@603 1236
al@284 1237 elif package_exist $SEARCH ; then
al@603 1238 cat <<EOT
al@603 1239 <h3>$(_ 'Package "%s" requires next packages to be built' "$SEARCH")</h3>
al@603 1240 <pre class="hard">
al@603 1241 EOT
al@603 1242 unset ALL_DEPS
al@603 1243 dep_scan $SEARCH '' build
al@603 1244 echo '</pre>'
pankso@230 1245
al@603 1246 cat <<EOT
al@603 1247 <h3>$(_ 'Next packages requires package "%s" to be built' "$SEARCH")</h3>
al@603 1248 <pre class="hard">
al@603 1249 EOT
slaxemulator@336 1250 unset ALL_DEPS
al@284 1251 rdep_scan $SEARCH build
al@603 1252 echo '</pre>'
al@284 1253 fi
al@284 1254 ;;
al@284 1255
al@284 1256
al@603 1257
al@603 1258
al@284 1259 ### Common files
al@603 1260
al@284 1261 FileOverlap)
pascal@318 1262 if package_exist $SEARCH; then
al@603 1263 cat <<EOT
pankso@230 1264
al@603 1265 <h3>$(_ 'Next packages may overwrite files of package "%s"' "$SEARCH")</h3>
al@603 1266 <pre class="hard">
al@603 1267 EOT
pascal@457 1268 ( unlzma < $filelist | grep ^$SEARCH: ;
pascal@457 1269 unlzma < $filelist | grep -v ^$SEARCH: ) | awk '
pankso@230 1270 BEGIN { pkg=""; last="x" }
pankso@230 1271 {
pankso@230 1272 if ($2 == "") next
al@603 1273 if (index($2, last) == 1 && substr($2, 1+length(last), 1) == "/")
pankso@230 1274 delete file[last]
pankso@230 1275 last=$2
pankso@230 1276 if (pkg == "") pkg=$1
pankso@230 1277 if ($1 == pkg) file[$2]=$1
pankso@230 1278 else if (file[$2] == pkg) print
pankso@230 1279 }
pankso@230 1280 ' | display_packages_and_files
al@603 1281 echo '</pre>'
al@284 1282 fi
al@284 1283 ;;
al@284 1284
al@284 1285
al@603 1286
al@603 1287
al@284 1288 ### File search
al@603 1289
al@284 1290 File)
al@284 1291 if [ -n "$SEARCH" ]; then
al@603 1292 cat <<EOT
pankso@230 1293
al@603 1294 <h3>$(_ 'File names matching the "%s"' "$SEARCH")</h3>
al@603 1295 <table class="list">
al@603 1296 EOT
slaxemulator@336 1297 unset last
al@603 1298 unlzma < $filelist | grep -i "$SEARCH" | \
al@603 1299 while read pkg file; do
al@603 1300 echo "$file" | grep -qi "$SEARCH" || continue
pankso@230 1301 if [ "$last" != "${pkg%:}" ]; then
al@603 1302 [ -n "$last" ] && cat <<EOT
al@603 1303 </td></tr>
al@603 1304 EOT
pankso@230 1305 last=${pkg%:}
pankso@230 1306 (
pankso@230 1307 . $WOK/$last/receipt
al@603 1308 package_entry
al@603 1309 cat <<EOT
al@603 1310 <tr><td colspan="3" class="pre">
al@293 1311 EOT
pankso@230 1312 )
pankso@230 1313 fi
al@603 1314 echo -n "$file" | awk -vquery="$SEARCH" 'BEGIN{IGNORECASE=1}gsub(query, "<mark>&</mark>")'
al@603 1315 echo "<br/>"
pankso@230 1316 done
al@603 1317 cat <<EOT
al@293 1318 </td></tr>
al@293 1319 </table>
al@603 1320 EOT
al@284 1321 fi
al@284 1322 ;;
al@284 1323
al@284 1324
al@603 1325
al@603 1326
al@284 1327 ### List of files
al@603 1328
al@284 1329 File_list)
al@284 1330 if package_exist $SEARCH; then
al@603 1331 cat <<EOT
pankso@230 1332
al@603 1333 <h3>$(_ 'List of files in the package "%s"' "$SEARCH")</h3>
al@603 1334 <pre class="hard">
al@603 1335 EOT
slaxemulator@336 1336 unset last
pascal@457 1337 unlzma < $filelist \
al@603 1338 | grep ^$SEARCH: | sed 's|.*: | |' | sort
al@603 1339 cat <<EOT
pankso@230 1340 </pre>
al@603 1341 <pre class="hard">
al@603 1342 EOT
pascal@457 1343 filenb=$(unlzma < $filelist | grep ^$SEARCH: | wc -l)
al@603 1344 _p '%s file' '%s files' "$filenb" "$filenb"
al@603 1345 cat <<EOT
al@284 1346 \
slaxemulator@320 1347 $(busybox sed -n "/^$SEARCH$/{nnnpq}" $pkglist)
al@284 1348 </pre>
al@603 1349 EOT
al@284 1350 fi
al@284 1351 ;;
al@284 1352
al@284 1353
al@603 1354
al@603 1355
al@284 1356 ### Package description
al@603 1357
al@284 1358 Desc)
al@603 1359 if [ -z "$SEARCH" ]; then
al@603 1360 cat <<EOT
al@603 1361 <div class="err">$(_ 'Please specify name of the package.')</div>
al@603 1362 <p> <br/> </p>
al@603 1363 EOT
al@603 1364 xhtml_footer
al@603 1365 exit 0
al@603 1366 fi
pankso@230 1367
al@603 1368 cat <<EOT
al@603 1369 <h3>$(_ 'Descriptions matching the "%s"' "$SEARCH")</h3>
al@603 1370 EOT
al@603 1371 if [ -f "$pinfo" ]; then
al@603 1372 package_entries desc "$SEARCH"
al@284 1373 else
al@603 1374 echo '<table class="list">'
slaxemulator@336 1375 unset last
al@603 1376 # FIXME packages.desc should not be used (at least this way)
al@603 1377 grep -i "$SEARCH" "$pkgsrepo/packages.desc" | \
al@284 1378 sort | while read pkg extras ; do
al@603 1379 . "$WOK/$pkg/receipt"
al@284 1380 package_entry
al@284 1381 done
al@603 1382 echo '</table>'
al@284 1383 fi
al@284 1384 ;;
al@284 1385
al@603 1386
al@603 1387
al@603 1388
slaxemulator@336 1389 Bugs)
al@603 1390 cat <<EOT
slaxemulator@336 1391
al@603 1392 <h3>$(_ 'Known bugs in the packages')</h3>
al@603 1393
al@603 1394 <table class="bugs list">
al@603 1395 EOT
slaxemulator@336 1396 unset last
slaxemulator@336 1397 grep ^BUGS= $WOK/*/receipt | \
slaxemulator@336 1398 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
slaxemulator@336 1399 unset BUGS
al@603 1400 . "$WOK/$pkg/receipt"
al@603 1401 package_entry
al@603 1402 echo -n '<tr><td> </td><td colspan="2">'
al@603 1403 echo -n "$BUGS" | htmlize
al@603 1404 echo '</td></tr>'
slaxemulator@336 1405 done
al@603 1406 echo '</table>'
slaxemulator@336 1407 ;;
slaxemulator@336 1408
slaxemulator@336 1409
al@603 1410
al@603 1411
slaxemulator@336 1412 ### Arch
al@603 1413
slaxemulator@336 1414 Arch)
al@603 1415 if [ -n "$SEARCH" ]; then
al@603 1416 cat <<EOT
slaxemulator@336 1417
al@603 1418 <h3>$(_ 'The list of packages of architecture "%s"' "$SEARCH")</h3>
al@603 1419 <pre class="hard">
al@603 1420 EOT
al@603 1421 unset last
al@603 1422 grep ^HOST_ARCH= $WOK/*/receipt | grep -i "$SEARCH" | \
al@603 1423 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
al@603 1424 unset HOST_ARCH
al@603 1425 . "$WOK/$pkg/receipt"
al@603 1426 echo " $HOST_ARCH " | grep -iq " $SEARCH " &&
al@603 1427 package_entry_inline
al@603 1428 done
al@603 1429 cat <<EOT
slaxemulator@336 1430 </pre>
al@603 1431 EOT
al@603 1432 else
al@603 1433 # Display arch cloud
al@603 1434 grep -l ^HOST_ARCH= $WOK/*/receipt | while read file; do
al@603 1435 HOST_ARCH=
al@603 1436 . $file
al@603 1437 echo $HOST_ARCH
al@603 1438 done | display_cloud arch
al@603 1439 fi
slaxemulator@336 1440 ;;
al@284 1441
al@603 1442
al@603 1443
al@603 1444
pascal@458 1445 ### Maintainer
al@603 1446
pascal@458 1447 Maintainer)
pascal@458 1448 if [ -n "$SEARCH" ]; then
al@603 1449 cat <<EOT
pascal@458 1450
al@603 1451 <h3>$(_n 'The list of packages that <%s> maintains' "$SEARCH" | htmlize)</h3>
al@603 1452 <table class="list">
al@603 1453 EOT
pascal@458 1454 unset last
pascal@458 1455 grep ^MAINTAINER= $WOK/*/receipt | grep -i "$SEARCH" | \
pascal@458 1456 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
al@603 1457 . "$WOK/$pkg/receipt"
pascal@458 1458 package_entry
pascal@458 1459 done
al@603 1460 cat <<EOT
pascal@458 1461 </table>
al@603 1462 EOT
pascal@458 1463 else
pascal@458 1464 # Display maintainer cloud
pascal@458 1465 grep -l ^MAINTAINER= $WOK/*/receipt | while read file; do
pascal@458 1466 MAINTAINER=
pascal@458 1467 . $file
pascal@458 1468 echo $MAINTAINER
pascal@458 1469 done | display_cloud maintainer
pascal@458 1470 fi
pascal@458 1471 ;;
pascal@458 1472
al@603 1473
al@603 1474
al@603 1475
pascal@458 1476 ### License
al@603 1477
pascal@458 1478 License)
pascal@458 1479 if [ -n "$SEARCH" ]; then
al@603 1480 cat <<EOT
al@603 1481 <h3>$(_ 'Packages with "%s" license' "$SEARCH")</h3>
al@603 1482 <table class="list">
al@603 1483 EOT
pascal@458 1484 unset last
pascal@458 1485 grep ^LICENSE= $WOK/*/receipt | grep -i "$SEARCH" | \
pascal@458 1486 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
al@603 1487 . "$WOK/$pkg/receipt"
pascal@458 1488 package_entry
pascal@458 1489 done
al@603 1490 echo '</table>'
pascal@458 1491 else
pascal@458 1492 # Display license cloud
pascal@458 1493 grep -l ^LICENSE= $WOK/*/receipt | while read file; do
pascal@458 1494 LICENSE=
pascal@458 1495 . $file
pascal@458 1496 echo $LICENSE
pascal@458 1497 done | display_cloud license
pascal@458 1498 fi
pascal@458 1499 ;;
pascal@458 1500
al@603 1501
al@603 1502
al@603 1503
pascal@458 1504 ### Category
al@603 1505
pascal@458 1506 Category)
pascal@458 1507 if [ -n "$SEARCH" ]; then
al@603 1508 cat <<EOT
al@603 1509 <h3>$(_ 'Packages of category "%s"' "$SEARCH")</h3>
al@603 1510 EOT
al@603 1511 if [ -f "$pinfo" ]; then
al@603 1512 package_entries category "$SEARCH"
al@603 1513 else
al@603 1514 echo '<table class="list">'
al@603 1515 unset last
al@603 1516 grep ^CATEGORY= $WOK/*/receipt | grep -i "$SEARCH" | \
al@603 1517 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
al@603 1518 . "$WOK/$pkg/receipt"
al@603 1519 package_entry
al@603 1520 done
al@603 1521 echo '</table>'
al@603 1522 fi
pascal@458 1523 else
pascal@458 1524 # Display category cloud
al@603 1525 if [ -f "$pinfo" ]; then
al@603 1526 TAGS="$(awk -F$'\t' '{if($3){print $3}}' "$pinfo" | tr ' ' $'\n' | sort | uniq -c)"
al@603 1527 MAX="$(echo "$TAGS" | awk '{if ($1 > MAX) MAX = $1} END{print MAX}')"
al@603 1528 echo "$TAGS" | awk -vMAX="$MAX" -vv="$SLITAZ_VERSION" '{
al@603 1529 printf "<span class=\"tagn\">%s</span>", $1;
al@603 1530 printf "<a class=\"taga tag%s\" ", int($1 * 10 / MAX + 1);
al@603 1531 printf "href=\"?category=%s&amp;version=%s\">%s</a> ", $2, v, $2;
al@603 1532 }'
al@603 1533 else
al@603 1534 grep -l ^CATEGORY= $WOK/*/receipt | \
al@603 1535 while read file; do
al@603 1536 CATEGORY=
al@603 1537 . $file
al@603 1538 echo $CATEGORY
pascal@458 1539 done | display_cloud category
al@603 1540 fi
pascal@458 1541 fi
pascal@458 1542 ;;
pascal@458 1543
al@603 1544
al@603 1545
al@603 1546
al@284 1547 ### Tags
al@603 1548
al@284 1549 Tags)
pascal@312 1550 if [ -n "$SEARCH" ]; then
al@603 1551 cat <<EOT
al@603 1552 <h3>$(_ 'The list of packages tagged "%s"' "$SEARCH")</h3>
al@603 1553 EOT
al@603 1554 if [ -f "$pinfo" ]; then
al@603 1555 package_entries tags "$SEARCH"
al@603 1556 else
al@603 1557 echo '<table class="list">'
al@603 1558 unset last
al@603 1559 grep ^TAGS= $WOK/*/receipt | grep -i "$SEARCH" | \
al@603 1560 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
al@603 1561 . "$WOK/$pkg/receipt"
al@603 1562 package_entry
al@603 1563 done
al@603 1564 echo '</table>'
al@603 1565 fi
pascal@312 1566 else
pascal@312 1567 # Display tag cloud
al@603 1568 if [ -f "$pinfo" ]; then
al@603 1569 TAGS="$(awk -F$'\t' '{if($6){print $6}}' "$pinfo" | tr ' ' $'\n' | sort | uniq -c)"
al@603 1570 MAX="$(echo "$TAGS" | awk '{if ($1 > MAX) MAX = $1} END{print MAX}')"
al@603 1571 echo "$TAGS" | awk -vMAX="$MAX" -vv="$SLITAZ_VERSION" '{
al@603 1572 printf "<span class=\"tagn\">%s</span>", $1;
al@603 1573 printf "<a class=\"taga tag%s\" ", int($1 * 10 / MAX + 1);
al@603 1574 printf "href=\"?tags=%s&amp;version=%s\">%s</a> ", $2, v, $2;
al@603 1575 }'
al@603 1576 else
al@603 1577 grep -l ^TAGS= $WOK/*/receipt | \
al@603 1578 while read file; do
al@603 1579 TAGS=
al@603 1580 . $file
al@603 1581 echo $TAGS
pascal@560 1582 done | display_cloud tags
al@603 1583 fi
pascal@312 1584 fi
al@284 1585 ;;
al@284 1586
al@284 1587
al@603 1588
al@603 1589
al@293 1590 ### Package receipt with syntax highlighter
al@603 1591
al@284 1592 Receipt)
al@293 1593 if package_exist "$SEARCH"; then
al@603 1594 cat <<EOT
pankso@230 1595
al@603 1596 <h3>$(_ 'Receipt for package "%s"' "$SEARCH")</h3>
al@603 1597 <pre class="hard">
al@603 1598 EOT
al@603 1599 if [ -f $WOK/$SEARCH/taz/*/receipt ]; then
al@603 1600 syntax_highlighter $WOK/$SEARCH/taz/*/receipt
al@293 1601 else
al@603 1602 syntax_highlighter $WOK/$SEARCH/receipt
al@293 1603 fi
al@293 1604 echo '</pre>'
al@293 1605 fi
al@284 1606 ;;
al@284 1607
al@284 1608
al@603 1609
al@603 1610
al@284 1611 ### Package
al@603 1612
al@284 1613 Package)
al@603 1614 if check_n "$SEARCH"; then
al@603 1615 cat <<EOT
al@603 1616 <h3>$(_ 'Package names matching the "%s"' "$SEARCH")</h3>
al@603 1617 EOT
pankso@230 1618
al@603 1619 if [ -f "$pinfo" ]; then
al@603 1620 package_entries name "$SEARCH"
al@603 1621 else
al@603 1622 echo '<table class="list">'
al@603 1623 for pkg in $(ls $WOK/ | grep -i "$SEARCH"); do
al@603 1624 . "$WOK/$pkg/receipt"
al@603 1625 package_entry
al@603 1626 done
al@603 1627 echo '</table>'
al@603 1628 fi
pankso@230 1629
al@603 1630 vpkgs="$(cut -d= -f1 < $equiv | grep -i $SEARCH)"
al@603 1631 for vpkg in $vpkgs; do
al@603 1632 cat <<EOT
al@603 1633
al@603 1634 <h3>$(_ 'Packages providing the package "%s"' "$vpkg")</h3>
al@603 1635
al@603 1636 <table class="list">
al@603 1637 EOT
al@603 1638 for pkg in $(grep $vpkg= $equiv | sed "s|$vpkg=||"); do
pankso@230 1639 . $WOK/${pkg#*:}/receipt
pankso@230 1640 package_entry
pankso@230 1641 done
al@603 1642 echo '</table>'
pankso@230 1643 done
al@284 1644 fi
al@284 1645 ;;
al@284 1646 esac
al@284 1647
al@284 1648 xhtml_footer
pankso@230 1649
pankso@230 1650 exit 0