cookutils diff lighttpd/index.cgi @ rev 1126

Using single database for the cooker badges - speed up the listings, show counts
author Aleksej Bobylev <al.bobylev@gmail.com>
date Wed Jan 02 18:06:34 2019 +0200 (2019-01-02)
parents 8cf248ef571e
children 4f2ea8b43594
line diff
     1.1 --- a/lighttpd/index.cgi	Fri Dec 28 02:16:44 2018 +0200
     1.2 +++ b/lighttpd/index.cgi	Wed Jan 02 18:06:34 2019 +0200
     1.3 @@ -34,6 +34,7 @@
     1.4  command="$CACHE/command"; touch $command
     1.5  blocked="$CACHE/blocked"
     1.6  broken="$CACHE/broken"
     1.7 +badges="$CACHE/badges"
     1.8  cooknotes="$CACHE/cooknotes"
     1.9  cooktime="$CACHE/cooktime"
    1.10  wokrev="$CACHE/wokrev"
    1.11 @@ -940,13 +941,22 @@
    1.12  
    1.13  show_badges() {
    1.14  	local t p s # title problem solution
    1.15 +	unset t p s
    1.16 +	counts=$(mktemp)
    1.17  
    1.18  	case $layout in
    1.19  		table)
    1.20  			echo "<section><h2>Badges</h2><table class=\"badges\"><thead><tr><th></th><th>Problem</th><th>Solution</th></tr></thead><tbody>"
    1.21  			;;
    1.22  		list)
    1.23 -			echo "<section><h2>Badges list</h2><p>Click on badge to get list of packages</p><table class=\"badges\"><thead><tr><th></th><th>Problem</th></tr></thead><tbody>"
    1.24 +			echo "<section><h2>Badges list</h2><p>Click on badge to get list of packages</p><table class=\"badges\"><thead><tr><th></th><th>Problem</th><th>Count</th></tr></thead><tbody>"
    1.25 +			for i in bdbroken broken any noany libtool nolibtool own ownover perm permover symlink ss fadd frem fdup old orphan patch win no-badge; do
    1.26 +				case $i in
    1.27 +					no-badge) num=$(awk -F$'\t' '{if (! $2) print 1}' $badges | wc -l);;
    1.28 +					*) num=$(awk -F$'\t' -vi=" $i " '{if (index(" " $2 " ", i)) print 1}' $badges | wc -l);;
    1.29 +				esac
    1.30 +				echo "$i	$num" >>$counts
    1.31 +			done
    1.32  			;;
    1.33  	esac
    1.34  
    1.35 @@ -1065,7 +1075,8 @@
    1.36  			list)
    1.37  				p=$(echo $p | sed 's|<a [^>]*>\([^<]*\)</a>|\1|g')
    1.38  				s=$(echo $s | sed 's|<a [^>]*>\([^<]*\)</a>|\1|g|')
    1.39 -				echo "<tr><td><a href=\"$badge\" class=\"button badge $badge\" title=\"$t\"></a></td><td>$p</td></tr>"
    1.40 +				c=$(awk -vbadge="$badge" '{if ($1 == badge) { print $2; exit }}' $counts)
    1.41 +				echo "<tr><td><a href=\"$badge\" class=\"button badge $badge\" title=\"$t\"></a></td><td>$p</td><td>$c</td></tr>"
    1.42  				;;
    1.43  			*)
    1.44  				echo -n "<span class=\"badge $badge\" title=\"$t\"/>"
    1.45 @@ -1078,6 +1089,8 @@
    1.46  			echo "</tbody></table></section>"
    1.47  			;;
    1.48  	esac
    1.49 +
    1.50 +	rm $counts
    1.51  }
    1.52  
    1.53  
    1.54 @@ -1609,9 +1622,8 @@
    1.55  							<tbody>
    1.56  				EOT
    1.57  
    1.58 -				ls $WOK \
    1.59 +				awk -F$'\t' '{if (! $2) print $1}' $badges \
    1.60  				| while read pkg; do
    1.61 -					[ -s $WOK/$pkg/.badges ] && continue
    1.62  					awk -F$'\t' -vpkg="$pkg" -vbase="$base/" '{
    1.63  						if ($1 == pkg) {
    1.64  							url = base $1 "/";
    1.65 @@ -1632,28 +1644,25 @@
    1.66  							<tbody>
    1.67  				EOT
    1.68  
    1.69 -				ls $WOK \
    1.70 +				awk -F$'\t' -vbadge=" $badge " '{if (index(" " $2 " ", badge)) print $1}' $badges \
    1.71  				| while read pkg; do
    1.72 -					[ -e $WOK/$pkg/.badges ] || continue
    1.73 -					if grep -q "^${badge}$" $WOK/$pkg/.badges; then
    1.74 -						if grep -q "^$pkg	" $PKGS/packages-$ARCH.info; then
    1.75 -							awk -F$'\t' -vpkg="$pkg" -vbase="$base/" '{
    1.76 -								if ($1 == pkg) {
    1.77 -									url = base $1 "/";
    1.78 -									gsub("+", "%2B", url);
    1.79 -									printf("<tr><td><img src=\"%ss/%s\" alt=\"%s\"> ", base, $1, $1);
    1.80 -									printf("<a href=\"%s\">%s</a></td><td>%s</td><td>%s</td></tr>\n", url, $1, $4, $3);
    1.81 -								}
    1.82 -							}' $PKGS/packages-$ARCH.info
    1.83 -						else
    1.84 -							# broken packages absent in packages-<arch>.info; use receipt (slower)
    1.85 -							{
    1.86 -								. $WOK/$pkg/receipt
    1.87 -								echo -n "<tr><td><img src=\"$base/s/$pkg\" alt=\"$pkg\"> "
    1.88 -								echo -n "<a href=\"$base/$pkg/\">$pkg</a></td>"
    1.89 -								echo    "<td>$SHORT_DESC</td><td>$CATEGORY</td></tr>"
    1.90 +					if grep -q "^$pkg	" $PKGS/packages-$ARCH.info; then
    1.91 +						awk -F$'\t' -vpkg="$pkg" -vbase="$base/" '{
    1.92 +							if ($1 == pkg) {
    1.93 +								url = base $1 "/";
    1.94 +								gsub("+", "%2B", url);
    1.95 +								printf("<tr><td><img src=\"%ss/%s\" alt=\"%s\"> ", base, $1, $1);
    1.96 +								printf("<a href=\"%s\">%s</a></td><td>%s</td><td>%s</td></tr>\n", url, $1, $4, $3);
    1.97  							}
    1.98 -						fi
    1.99 +						}' $PKGS/packages-$ARCH.info
   1.100 +					else
   1.101 +						# broken packages absent in packages-<arch>.info; use receipt (slower)
   1.102 +						{
   1.103 +							. $WOK/$pkg/receipt
   1.104 +							echo -n "<tr><td><img src=\"$base/s/$pkg\" alt=\"$pkg\"> "
   1.105 +							echo -n "<a href=\"$base/$pkg/\">$pkg</a></td>"
   1.106 +							echo    "<td>$SHORT_DESC</td><td>$CATEGORY</td></tr>"
   1.107 +						}
   1.108  					fi
   1.109  				done
   1.110  				;;
   1.111 @@ -1724,8 +1733,9 @@
   1.112  
   1.113  
   1.114  		# Show Cooker badges
   1.115 -		if [ -s $wok/$pkg/.badges ]; then
   1.116 -			layout='table' show_badges $(cat $wok/$pkg/.badges)
   1.117 +		pkg_badges=$(awk -F$'\t' -vpkg="$pkg" '{if ($1 == pkg) { print $2; exit } }' $badges)
   1.118 +		if [ -n "$pkg_badges" ]; then
   1.119 +			layout='table' show_badges $pkg_badges
   1.120  		fi
   1.121  
   1.122