cookutils 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 88141f5b4731
children 44799da9eaeb
files cooker lighttpd/index.cgi modules/postcheck
line diff
     1.1 --- a/cooker	Sat Dec 29 17:30:21 2018 +0200
     1.2 +++ b/cooker	Wed Jan 02 18:06:34 2019 +0200
     1.3 @@ -468,7 +468,7 @@
     1.4  		cook_list ;;
     1.5  
     1.6  	pkg|-p)
     1.7 -		# Same as 'cook pkg' but with log for web interface.
     1.8 +		# Same as 'cook pkg'.
     1.9  		ps | grep -q "cook $pkg$" && echo 'Already running' && continue
    1.10  		cook $pkg || broken
    1.11  		clean_exit ;;
    1.12 @@ -672,6 +672,7 @@
    1.13  				sed -i "/^${pkg}$/d" $blocked $broken $commits.tmp
    1.14  				sed -i "/^$pkg\t/d" $PKGS/packages-$ARCH.info
    1.15  				sed -i "/^$pkg:/d" $cache/files.list
    1.16 +				sed -i "/^$pkg\t/d" $cache/badges
    1.17  			fi
    1.18  			if [ -d "$wok/$pkg/stuff" ]; then
    1.19  				if [ ! -d "$wok-hg/$pkg/stuff" ]; then
     2.1 --- a/lighttpd/index.cgi	Sat Dec 29 17:30:21 2018 +0200
     2.2 +++ b/lighttpd/index.cgi	Wed Jan 02 18:06:34 2019 +0200
     2.3 @@ -34,6 +34,7 @@
     2.4  command="$CACHE/command"; touch $command
     2.5  blocked="$CACHE/blocked"
     2.6  broken="$CACHE/broken"
     2.7 +badges="$CACHE/badges"
     2.8  cooknotes="$CACHE/cooknotes"
     2.9  cooktime="$CACHE/cooktime"
    2.10  wokrev="$CACHE/wokrev"
    2.11 @@ -940,13 +941,22 @@
    2.12  
    2.13  show_badges() {
    2.14  	local t p s # title problem solution
    2.15 +	unset t p s
    2.16 +	counts=$(mktemp)
    2.17  
    2.18  	case $layout in
    2.19  		table)
    2.20  			echo "<section><h2>Badges</h2><table class=\"badges\"><thead><tr><th></th><th>Problem</th><th>Solution</th></tr></thead><tbody>"
    2.21  			;;
    2.22  		list)
    2.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>"
    2.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>"
    2.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
    2.26 +				case $i in
    2.27 +					no-badge) num=$(awk -F$'\t' '{if (! $2) print 1}' $badges | wc -l);;
    2.28 +					*) num=$(awk -F$'\t' -vi=" $i " '{if (index(" " $2 " ", i)) print 1}' $badges | wc -l);;
    2.29 +				esac
    2.30 +				echo "$i	$num" >>$counts
    2.31 +			done
    2.32  			;;
    2.33  	esac
    2.34  
    2.35 @@ -1065,7 +1075,8 @@
    2.36  			list)
    2.37  				p=$(echo $p | sed 's|<a [^>]*>\([^<]*\)</a>|\1|g')
    2.38  				s=$(echo $s | sed 's|<a [^>]*>\([^<]*\)</a>|\1|g|')
    2.39 -				echo "<tr><td><a href=\"$badge\" class=\"button badge $badge\" title=\"$t\"></a></td><td>$p</td></tr>"
    2.40 +				c=$(awk -vbadge="$badge" '{if ($1 == badge) { print $2; exit }}' $counts)
    2.41 +				echo "<tr><td><a href=\"$badge\" class=\"button badge $badge\" title=\"$t\"></a></td><td>$p</td><td>$c</td></tr>"
    2.42  				;;
    2.43  			*)
    2.44  				echo -n "<span class=\"badge $badge\" title=\"$t\"/>"
    2.45 @@ -1078,6 +1089,8 @@
    2.46  			echo "</tbody></table></section>"
    2.47  			;;
    2.48  	esac
    2.49 +
    2.50 +	rm $counts
    2.51  }
    2.52  
    2.53  
    2.54 @@ -1609,9 +1622,8 @@
    2.55  							<tbody>
    2.56  				EOT
    2.57  
    2.58 -				ls $WOK \
    2.59 +				awk -F$'\t' '{if (! $2) print $1}' $badges \
    2.60  				| while read pkg; do
    2.61 -					[ -s $WOK/$pkg/.badges ] && continue
    2.62  					awk -F$'\t' -vpkg="$pkg" -vbase="$base/" '{
    2.63  						if ($1 == pkg) {
    2.64  							url = base $1 "/";
    2.65 @@ -1632,28 +1644,25 @@
    2.66  							<tbody>
    2.67  				EOT
    2.68  
    2.69 -				ls $WOK \
    2.70 +				awk -F$'\t' -vbadge=" $badge " '{if (index(" " $2 " ", badge)) print $1}' $badges \
    2.71  				| while read pkg; do
    2.72 -					[ -e $WOK/$pkg/.badges ] || continue
    2.73 -					if grep -q "^${badge}$" $WOK/$pkg/.badges; then
    2.74 -						if grep -q "^$pkg	" $PKGS/packages-$ARCH.info; then
    2.75 -							awk -F$'\t' -vpkg="$pkg" -vbase="$base/" '{
    2.76 -								if ($1 == pkg) {
    2.77 -									url = base $1 "/";
    2.78 -									gsub("+", "%2B", url);
    2.79 -									printf("<tr><td><img src=\"%ss/%s\" alt=\"%s\"> ", base, $1, $1);
    2.80 -									printf("<a href=\"%s\">%s</a></td><td>%s</td><td>%s</td></tr>\n", url, $1, $4, $3);
    2.81 -								}
    2.82 -							}' $PKGS/packages-$ARCH.info
    2.83 -						else
    2.84 -							# broken packages absent in packages-<arch>.info; use receipt (slower)
    2.85 -							{
    2.86 -								. $WOK/$pkg/receipt
    2.87 -								echo -n "<tr><td><img src=\"$base/s/$pkg\" alt=\"$pkg\"> "
    2.88 -								echo -n "<a href=\"$base/$pkg/\">$pkg</a></td>"
    2.89 -								echo    "<td>$SHORT_DESC</td><td>$CATEGORY</td></tr>"
    2.90 +					if grep -q "^$pkg	" $PKGS/packages-$ARCH.info; then
    2.91 +						awk -F$'\t' -vpkg="$pkg" -vbase="$base/" '{
    2.92 +							if ($1 == pkg) {
    2.93 +								url = base $1 "/";
    2.94 +								gsub("+", "%2B", url);
    2.95 +								printf("<tr><td><img src=\"%ss/%s\" alt=\"%s\"> ", base, $1, $1);
    2.96 +								printf("<a href=\"%s\">%s</a></td><td>%s</td><td>%s</td></tr>\n", url, $1, $4, $3);
    2.97  							}
    2.98 -						fi
    2.99 +						}' $PKGS/packages-$ARCH.info
   2.100 +					else
   2.101 +						# broken packages absent in packages-<arch>.info; use receipt (slower)
   2.102 +						{
   2.103 +							. $WOK/$pkg/receipt
   2.104 +							echo -n "<tr><td><img src=\"$base/s/$pkg\" alt=\"$pkg\"> "
   2.105 +							echo -n "<a href=\"$base/$pkg/\">$pkg</a></td>"
   2.106 +							echo    "<td>$SHORT_DESC</td><td>$CATEGORY</td></tr>"
   2.107 +						}
   2.108  					fi
   2.109  				done
   2.110  				;;
   2.111 @@ -1724,8 +1733,9 @@
   2.112  
   2.113  
   2.114  		# Show Cooker badges
   2.115 -		if [ -s $wok/$pkg/.badges ]; then
   2.116 -			layout='table' show_badges $(cat $wok/$pkg/.badges)
   2.117 +		pkg_badges=$(awk -F$'\t' -vpkg="$pkg" '{if ($1 == pkg) { print $2; exit } }' $badges)
   2.118 +		if [ -n "$pkg_badges" ]; then
   2.119 +			layout='table' show_badges $pkg_badges
   2.120  		fi
   2.121  
   2.122  
     3.1 --- a/modules/postcheck	Sat Dec 29 17:30:21 2018 +0200
     3.2 +++ b/modules/postcheck	Wed Jan 02 18:06:34 2019 +0200
     3.3 @@ -16,6 +16,8 @@
     3.4  badges="$WOK/$1/.badges"
     3.5  echo -n > $badges # clean badges
     3.6  
     3.7 +badges_global="$CACHE/badges"; touch $badges_global
     3.8 +
     3.9  overrides="$WOK/$1/stuff/overrides"
    3.10  overrides_exp="$data/overrides_exp"
    3.11  fail="$data/fail" # file used as flag, if will be empty if no fails were found
    3.12 @@ -302,3 +304,8 @@
    3.13  footer
    3.14  
    3.15  rm -r $data # clean
    3.16 +
    3.17 +# move badges to the global database
    3.18 +sed "/^$PACKAGE	/d" $badges_global
    3.19 +echo "$PACKAGE	$(tr '\n' ' ' <$badges | sed 's| $||')" >>$badges_global
    3.20 +rm $badges