tazpkg rev 814

tazpkg: add migration to the 9-field installed.info; pkgs.cgi: fix pkgs type in the lists, fix search when undigest DB is incomplete, implement TazPkg title and sub-title, pkg state icon in the pkg info; pkgs.css: move app-icon to the right.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Mon Jun 08 04:07:13 2015 +0300 (2015-06-08)
parents 33d93f743150
children a639d8217550
files tazpanel/pkgs.cgi tazpanel/pkgs.css tazpkg
line diff
     1.1 --- a/tazpanel/pkgs.cgi	Fri Jun 05 00:37:48 2015 +0300
     1.2 +++ b/tazpanel/pkgs.cgi	Mon Jun 08 04:07:13 2015 +0300
     1.3 @@ -165,8 +165,7 @@
     1.4  
     1.5  
     1.6  # xHTML 5 header with special side bar for categories.
     1.7 -TITLE=$(TEXTDOMAIN='tazpkg'; _ 'TazPanel - Packages')
     1.8 -xhtml_header | sed 's/id="content"/id="content-sidebar"/'
     1.9 +TITLE=$(TEXTDOMAIN='tazpkg'; _ 'Packages')
    1.10  
    1.11  
    1.12  pkg_info_link() {
    1.13 @@ -275,20 +274,6 @@
    1.14  #
    1.15  
    1.16  
    1.17 -# ENTER will search but user may search for a button, so put one.
    1.18 -
    1.19 -search_form() {
    1.20 -	cat <<EOT
    1.21 -<form class="search"><!--
    1.22 -	--><a data-icon="web" href="http://pkg.slitaz.org/" target="_blank" title="$(_n 'Web search tool')"></a> <!--
    1.23 -	--><input type="search" name="search" results="5" autosave="pkgsearch" autocomplete="on"><!--
    1.24 -	--><button type="submit">$(_n 'Search')</button><!--
    1.25 -	--><button name="files" value="yes">$(_n 'Files')</button><!--
    1.26 ---></form>
    1.27 -EOT
    1.28 -}
    1.29 -
    1.30 -
    1.31  table_head() {
    1.32  	cat <<EOT
    1.33  <table class="wide zebra pkglist" id="head1">
    1.34 @@ -379,7 +364,7 @@
    1.35  
    1.36  
    1.37  repo_list() {
    1.38 -	if [ -n "$(ls $PKGS_DB/undigest/ 2> /dev/null)" ]; then
    1.39 +	if [ -n "$(ls $PKGS_DB/undigest/ 2>/dev/null)" ]; then
    1.40  		case "$repo" in
    1.41  			Public)
    1.42  				;;
    1.43 @@ -388,11 +373,11 @@
    1.44  					[ -d "$i" ] && echo "$i$1"
    1.45  				done ;;
    1.46  			*)
    1.47 -				echo "$PKGS_DB/undigest/$repo$1"
    1.48 +				ls "$PKGS_DB/undigest/$repo$1" 2>/dev/null
    1.49  				return ;;
    1.50  		esac
    1.51  	fi
    1.52 -	echo "$PKGS_DB$1"
    1.53 +	[ -e "$PKGS_DB$1" ] && echo "$PKGS_DB$1"
    1.54  }
    1.55  
    1.56  
    1.57 @@ -456,7 +441,7 @@
    1.58  		sed 's|.*|&\ti|' $i/installed.info
    1.59  		[ "$cat" == 'extra' ] || [ $1 == 'my' ] || cat $i/packages.info
    1.60  		[ "$cat" == 'extra' ] &&
    1.61 -		sed 's,\([^|]*\)|\([^|]*\)|\([^|]*\)|\([^|]*\)|\([^|]*\).*,\1\t\5\textra\t\2\thttp://mirror.slitaz.org/packages/get/\1\t-\t-\t-,' $PKGS_DB/extra.list
    1.62 +		sed 's,\([^|]*\)|\([^|]*\)|\([^|]*\)|\([^|]*\)|\([^|]*\).*,\1\t\5\textra\t\2\thttp://mirror.slitaz.org/packages/get/\1\t-\t-\t-\t-,' $PKGS_DB/extra.list
    1.63  	} | sort -t$'\t' -k1,1 | sed '/^$/d' | awk -F$'\t' -vc="${cat:--}" -vt="${tag:--}" '
    1.64  {
    1.65  	if (PKG && PKG != $1) {
    1.66 @@ -474,8 +459,8 @@
    1.67  	if (NF == 2) { DSCL = $2; next }
    1.68  	if (c == "all" || $3 == c || index(" "$6" ", " "t" ")) { SEL = 1 }
    1.69  	if (SEL) {
    1.70 -		if ($9 == "i") { VER = $2; DSC = $4; WEB = $5; INS = "i"; next}
    1.71 -		if (! INS)     { VER = $2; DSC = $4; WEB = $5 }
    1.72 +		if ($10 == "i") { VER = $2; DSC = $4; WEB = $5; INS = "i"; next}
    1.73 +		if (! INS)      { VER = $2; DSC = $4; WEB = $5 }
    1.74  	}
    1.75  }' > $cached
    1.76  
    1.77 @@ -547,6 +532,21 @@
    1.78  }
    1.79  
    1.80  
    1.81 +tazpanel_header() {
    1.82 +	xhtml_header "$1" | sed 's/id="content"/id="content-sidebar"/'
    1.83 +	cat <<EOT
    1.84 +<form class="search"><!--
    1.85 +	--><a data-icon="web" href="http://pkg.slitaz.org/" target="_blank" title="$(_n 'Web search tool')"></a> <!--
    1.86 +	--><input type="search" name="search" value="$(GET search)" results="5" autosave="pkgsearch" autocomplete="on"><!--
    1.87 +	--><button type="submit">$(_n 'Search')</button><!--
    1.88 +	--><button name="files" value="yes">$(_n 'Files')</button><!--
    1.89 +--></form>
    1.90 +EOT
    1.91 +	sidebar
    1.92 +}
    1.93 +
    1.94 +
    1.95 +
    1.96  
    1.97  #
    1.98  # Commands
    1.99 @@ -560,12 +560,10 @@
   1.100  		#
   1.101  		# List linkable packages.
   1.102  		#
   1.103 -		search_form; sidebar
   1.104 +		tazpanel_header "$(_ 'Linkable packages')"
   1.105  		loading_msg "$(_ 'Listing linkable packages...')"
   1.106  
   1.107  		cat <<EOT
   1.108 -<h2>$(_ 'Linkable packages')</h2>
   1.109 -
   1.110  <form class="wide">
   1.111  	$(_ 'Selection:') $(show_button do=Link)
   1.112  EOT
   1.113 @@ -596,9 +594,7 @@
   1.114  		#
   1.115  		# List of all categories.
   1.116  		#
   1.117 -		search_form; sidebar
   1.118 -
   1.119 -		echo "<h2>$(_ 'Categories list')</h2>"
   1.120 +		tazpanel_header "$(_ 'Categories list')"
   1.121  
   1.122  		for pkgsinfo in $(repo_list /packages.info); do
   1.123  			cat <<EOT
   1.124 @@ -640,7 +636,7 @@
   1.125  		#
   1.126  		# List all packages by category.
   1.127  		#
   1.128 -		search_form; sidebar
   1.129 +		tazpanel_header "$(_ 'Packages list')"
   1.130  		loading_msg "$(_ 'Listing packages...')"
   1.131  
   1.132  		bcat="<b>$cat</b>"; brepo="<b>$repo</b>"
   1.133 @@ -658,9 +654,7 @@
   1.134  		esac
   1.135  
   1.136  		cat <<EOT
   1.137 -<h2>$(_ 'Packages list')</h2>
   1.138  <p>$title</p>
   1.139 -
   1.140  EOT
   1.141  
   1.142  		[ ! -f $PKGS_DB/packages.info ] && msg warn \
   1.143 @@ -697,16 +691,13 @@
   1.144  		# Search for packages. Here default is to search in packages.desc
   1.145  		# and so get result including packages names and descriptions
   1.146  		#
   1.147 +		tazpanel_header "$(_ 'Search packages')"
   1.148 +		loading_msg "$(_ 'Searching packages...')"
   1.149 +
   1.150  		pkg=$(GET search); [ -z "$pkg" ] && xhtml_footer && exit
   1.151  		cd $PKGS_DB
   1.152  
   1.153 -		search_form | sed "s|name=\"search\"|& value=\"$pkg\"|"
   1.154 -		sidebar
   1.155 -		loading_msg "$(_ 'Searching packages...')"
   1.156 -
   1.157  		cat <<EOT
   1.158 -<h2>$(_ 'Search packages')</h2>
   1.159 -
   1.160  <section>
   1.161  	<div>$(_ 'Selected packages:') <span id="countSelected"></span></div>
   1.162  	<footer>
   1.163 @@ -761,11 +752,10 @@
   1.164  		#
   1.165  		# Lets recharge the packages list
   1.166  		#
   1.167 -		search_form; sidebar
   1.168 +		tazpanel_header "$(_ 'Recharge')"
   1.169  		loading_msg "$(_ 'Recharging lists...')"
   1.170  
   1.171  		cat <<EOT
   1.172 -<h2>$(_ 'Recharge')</h2>
   1.173  <p>$(_ 'Recharge checks for new or updated packages')</p>
   1.174  
   1.175  <section>
   1.176 @@ -787,12 +777,10 @@
   1.177  		#
   1.178  		# Upgrade packages
   1.179  		#
   1.180 -		search_form; sidebar
   1.181 +		tazpanel_header "$(_ 'Up packages')"
   1.182  		loading_msg "$(_ 'Checking for upgrades...')"
   1.183  
   1.184  		cat <<EOT
   1.185 -<h2>$(_ 'Up packages')</h2>
   1.186 -
   1.187  <section>
   1.188  	<div>$(_ 'Selected packages:') <span id="countSelected"></span></div>
   1.189  	<footer>
   1.190 @@ -824,7 +812,7 @@
   1.191  		#
   1.192  		# Do an action on one or some packages
   1.193  		#
   1.194 -		search_form; sidebar
   1.195 +		tazpanel_header "TazPkg: $(GET do)"
   1.196  		loading_msg
   1.197  
   1.198  		# Find the command
   1.199 @@ -847,8 +835,6 @@
   1.200  		esac
   1.201  
   1.202  		cat <<EOT
   1.203 -<h2>TazPkg: $(GET do)</h2>
   1.204 -
   1.205  <div>$MSG</div>
   1.206  EOT
   1.207  		# Do the command for all asked packages
   1.208 @@ -866,24 +852,33 @@
   1.209  		#
   1.210  		# Packages info
   1.211  		#
   1.212 -		pkg=$(GET info)
   1.213 -		search_form; sidebar
   1.214 +		tazpanel_header "$(_ 'Package info')"
   1.215  		loading_msg "$(_ 'Getting package info...')"
   1.216  
   1.217 +		pkg="$(GET info)"
   1.218 +
   1.219 +		# Symbolic icon
   1.220 +		if [ -d "$INSTALLED/$pkg" ]; then
   1.221 +			if grep -q "^$pkg$" "$PKGS_DB/blocked-packages.list"
   1.222 +				then icon='pkgib'
   1.223 +				else icon='pkgi'
   1.224 +			fi
   1.225 +			else icon='pkg'
   1.226 +		fi
   1.227 +
   1.228  		cat <<EOT
   1.229  <section>
   1.230  	<header>
   1.231 -		$(_ 'Package %s' $pkg)
   1.232 +		<span data-icon="$icon">$(_ 'Package %s' "$pkg")</span>
   1.233  		<form>
   1.234  			<input type="hidden" name="pkg" value="${pkg#get-}"/>
   1.235  EOT
   1.236  
   1.237  		# Get receipt variables, show Install/Remove buttons
   1.238 -		if [ -d $INSTALLED/$pkg ]; then
   1.239 +		if [ -d "$INSTALLED/$pkg" ]; then
   1.240  			. $INSTALLED/$pkg/receipt
   1.241  			files=$(wc -l < $INSTALLED/$pkg/files.list)
   1.242 -			[ "$REMOTE_USER" == "root" ] &&
   1.243 -			show_button do=Remove
   1.244 +			[ "$REMOTE_USER" == 'root' ] && show_button do=Remove
   1.245  		else
   1.246  			cd $PKGS_DB
   1.247  			eval "$(awk -F$'\t' -vp=$pkg '
   1.248 @@ -898,13 +893,13 @@
   1.249  					printf "PACKAGE=\"%s\"; SHORT_DESC=\"%s\"; WEB_SITE=\"%s\"; ", $1, $2, $3
   1.250  					printf "CATEGORY=\"%s\"; VERSION=\"%s\"; LICENSE=\"%s\"; ", $4, $5, $6
   1.251  				}' extra.list undigest/*/extra.list)"
   1.252 -				[ "$CATEGORY" ] || CATEGORY="non-free"
   1.253 +				[ -z "$CATEGORY" ] && CATEGORY='non-free'
   1.254  			fi
   1.255  			PACKED_SIZE=${SIZES% *}
   1.256  			UNPACKED_SIZE=${SIZES#* }
   1.257 -			[ "$REMOTE_USER" == "root" ] &&
   1.258 +			[ "$REMOTE_USER" == 'root' ] &&
   1.259  			if [ "${pkg#get-}" != "$pkg" ]; then
   1.260 -				show_button "do=Install&amp;nf"
   1.261 +				show_button 'do=Install&amp;nf'
   1.262  			else
   1.263  				show_button do=Install
   1.264  			fi
   1.265 @@ -929,24 +924,23 @@
   1.266  		</form>
   1.267  	</header>
   1.268  
   1.269 -<table class="wide summary">
   1.270 -	<tr><td id="appImg"><img src="pkgs.cgi?app_img=$PACKAGE"/></td><td>
   1.271  <table class="wide zebra summary" id="infoTable">
   1.272  <tbody>
   1.273 -	<tr><td><b>$(_ 'Name')</b></td><td>$PACKAGE</td></tr>
   1.274 -	<tr><td><b>$(_ 'Version')</b></td><td>$VERSION</td></tr>
   1.275 +	<tr><td><b>$(_ 'Name')</b></td><td>$PACKAGE
   1.276 +	<div id="appImg"><img src="pkgs.cgi?app_img=$PACKAGE"/></div>
   1.277 +	</td></tr>
   1.278 +	$([ -n "$VERSION" ] && echo "<tr><td><b>$(_ 'Version')</b></td><td>$VERSION</td></tr>")
   1.279  	<tr><td><b>$(_ 'Category')</b></td><td><a href="?list&amp;cat=$CATEGORY">$CATEGORY</a></td></tr>
   1.280  	<tr><td><b>$(_ 'Description')</b></td><td>$SHORT_DESC</td></tr>
   1.281  	$([ -n "$MAINTAINER" ] && echo "<tr><td><b>$(_ 'Maintainer')</b></td><td>$MAINTAINER</td></tr>")
   1.282  	$([ -n "$LICENSE" ] && echo "<tr><td><b>$(_ 'License')</b></td><td><a href=\"?license=$pkg\">$LICENSE</a></td></tr>")
   1.283  	<tr><td><b>$(_ 'Website')</b></td><td><a href="$WEB_SITE" target="_blank">$WEB_SITE</a></td></tr>
   1.284  	$(show_info_links "$TAGS" "$(_ 'Tags')" 'tag')
   1.285 -	<tr><td><b>$(_ 'Sizes')</b></td><td>${PACKED_SIZE/.0/}/${UNPACKED_SIZE/.0/}</td></tr>
   1.286 +	$([ -n "$PACKED_SIZE" ] && echo "<tr><td><b>$(_ 'Sizes')</b></td><td>${PACKED_SIZE/.0/}/${UNPACKED_SIZE/.0/}</td></tr>")
   1.287  	$(show_info_links "$DEPENDS" "$(_ 'Depends')" 'info')
   1.288  	$(show_info_links "$SUGGESTED" "$(_ 'Suggested')" 'info')
   1.289  </tbody>
   1.290  </table>
   1.291 -</td></tr></table>
   1.292  
   1.293  	<footer>
   1.294  		<a data-icon="text" href="?show_receipt=$pkg">$(_ 'View receipt')</a>
   1.295 @@ -1000,13 +994,14 @@
   1.296  		#
   1.297  		# TazPkg configuration page
   1.298  		#
   1.299 +		tazpanel_header "$(_ 'Administration')"
   1.300 +		loading_msg
   1.301 +
   1.302  		cmd=$(GET admin)
   1.303  		pager="$(GET pager)"; pager=${pager:-$PAGE_SIZE}; pager=${pager:-100}
   1.304  		mirror="$(GET mirror)"; mirror="${mirror%/}/"
   1.305  		repository="$PKGS_DB/undigest/$(GET repository)"
   1.306  		link="$(GET link)"; link=${link%/}
   1.307 -		search_form; sidebar
   1.308 -		loading_msg
   1.309  
   1.310  		case "$cmd" in
   1.311  			clean)
   1.312 @@ -1037,8 +1032,6 @@
   1.313  		esac
   1.314  
   1.315  		cat <<EOT
   1.316 -<h2>$(_ 'Administration')</h2>
   1.317 -
   1.318  <p>$(_ 'TazPkg administration and settings')</p>
   1.319  
   1.320  <form id="actions">
   1.321 @@ -1245,7 +1238,7 @@
   1.322  		#
   1.323  		# Show licenses for installed packages
   1.324  		#
   1.325 -		search_form; sidebar
   1.326 +		tazpanel_header "$(_ 'Administration')"
   1.327  
   1.328  		pkg=$(GET license)
   1.329  		case $pkg in
   1.330 @@ -1322,24 +1315,23 @@
   1.331  		#
   1.332  		# Show tag cloud
   1.333  		#
   1.334 -		search_form; sidebar
   1.335 +		tazpanel_header "$(_ 'Tags list')"
   1.336  
   1.337 -		echo "<h2>$(_ 'Tags list')</h2>"
   1.338  		brepo="<b>$repo</b>"
   1.339  		case $repo in
   1.340  			Any) title="$(_ 'List of tags in all repositories')" ;;
   1.341  			*)   title="$(_ 'List of tags in repository "%s"' "$brepo")" ;;
   1.342  		esac
   1.343  		echo "<p>$title</p><p id=\"tags\">"
   1.344 -		to_read=""
   1.345 -		for i in $(repo_list ""); do
   1.346 -			if [ ! -e $i/packages.info ]; then
   1.347 -				list=installed
   1.348 -			else
   1.349 -				list=packages
   1.350 +		to_read=''
   1.351 +		for i in $(repo_list ''); do
   1.352 +			if [ -e "$i/packages.info" ]; then
   1.353 +				to_read="$to_read $i/packages.info"
   1.354 +			elif [ -e "$i/installed.info" ]; then
   1.355 +				to_read="$to_read $i/installed.info"
   1.356  			fi
   1.357 -			to_read="$to_read $i/$list.info"
   1.358  		done
   1.359 +
   1.360  		TAGS="$(awk -F$'\t' '{if($6){print $6}}' $to_read | tr ' ' $'\n' | sort | uniq -c)"
   1.361  		MAX="$(echo "$TAGS" | awk '{if ($1 > MAX) MAX = $1} END{print MAX}')"
   1.362  		echo "$TAGS" | awk -vMAX="$MAX" '{
   1.363 @@ -1353,13 +1345,10 @@
   1.364  		#
   1.365  		# Show packages with matching tag
   1.366  		#
   1.367 -		search_form; sidebar
   1.368 +		tag=$(GET tag)
   1.369 +		tazpanel_header "$(_ 'Tag "%s"' $tag)"
   1.370  
   1.371 -		tag=$(GET tag)
   1.372 -		cat <<EOT
   1.373 -<h2 data-icon="tag">$(_ 'Tag "%s"' $tag)</h2>
   1.374 -EOT
   1.375 -		[ "$REMOTE_USER" == "root" ] && cat <<EOT
   1.376 +		[ "$REMOTE_USER" == 'root' ] && cat <<EOT
   1.377  <section>
   1.378  	<div>$(_ 'Selected packages:') <span id="countSelected"></span></div>
   1.379  	<footer>
   1.380 @@ -1385,11 +1374,9 @@
   1.381  		#
   1.382  		# Show blocked packages list
   1.383  		#
   1.384 -		search_form; sidebar
   1.385 +		tazpanel_header "$(_ 'Blocked packages list')"
   1.386  
   1.387  		cat <<EOT
   1.388 -<h2>$(_ 'Blocked packages list')</h2>
   1.389 -
   1.390  <section>
   1.391  	<div>$(_ 'Selected packages:') <span id="countSelected"></span></div>
   1.392  	<footer>
   1.393 @@ -1420,10 +1407,11 @@
   1.394  		#
   1.395  		# Improving packages by the community effort
   1.396  		#
   1.397 -		search_form; sidebar
   1.398 +		pkg=$(GET improve)
   1.399 +		tazpanel_header "$(_ 'Improve package "%s"' $pkg)"
   1.400 +
   1.401  		msg warn 'Under construction!<br/>It is only imitation of working'
   1.402  
   1.403 -		pkg=$(GET improve)
   1.404  		user=$(POST user); type=$(POST type); text="$(POST text)"
   1.405  		login=$(POST login); password=$(POST password)
   1.406  
   1.407 @@ -1464,6 +1452,8 @@
   1.408  			<tr><td>$(_ 'Password:')</td>
   1.409  				<td><input type="password" name="password"/></td></tr>
   1.410  			<tr><td colspan="2">
   1.411 +				<label><input type="checkbox" name="rememberme"/>$(_ 'Remember me')</label></td></tr>
   1.412 +			<tr><td colspan="2">
   1.413  				<button type="submit" data-icon="user">$(_ 'Log in')</button></td></tr>
   1.414  		</table>
   1.415  	</form>
   1.416 @@ -1542,7 +1532,9 @@
   1.417  		</table>
   1.418  
   1.419  		<textarea name="text" id="improveText" style="width:100%; resize: vertical; min-height:10rem"></textarea>
   1.420 -		<button type="submit" data-icon="slitaz">$(_ 'Send')</button>
   1.421 +		<footer>
   1.422 +			<button type="submit" data-icon="slitaz">$(_ 'Send')</button>
   1.423 +		</footer>
   1.424  	</form>
   1.425  </section>
   1.426  EOT
   1.427 @@ -1569,7 +1561,8 @@
   1.428  		#
   1.429  		# Default to summary
   1.430  		#
   1.431 -		search_form; sidebar; loading_msg
   1.432 +		tazpanel_header
   1.433 +		loading_msg
   1.434  
   1.435  		cat <<EOT
   1.436  <form>
     2.1 --- a/tazpanel/pkgs.css	Fri Jun 05 00:37:48 2015 +0300
     2.2 +++ b/tazpanel/pkgs.css	Mon Jun 08 04:07:13 2015 +0300
     2.3 @@ -162,7 +162,11 @@
     2.4  section .hborders thead tr { border-top: none; border-bottom: 1pt solid #DDD; }
     2.5  
     2.6  
     2.7 -#appImg { vertical-align: top; width: 48px; padding: 0; margin: 0; }
     2.8 +#appImg {
     2.9 +	display: inline-block;
    2.10 +	position: absolute; right: 0.6rem;
    2.11 +	vertical-align: top; width: 48px; padding: 0; margin: 0;
    2.12 +}
    2.13  #appImg img { height: 48px !important; width: 48px !important; }
    2.14  
    2.15  
     3.1 --- a/tazpkg	Fri Jun 05 00:37:48 2015 +0300
     3.2 +++ b/tazpkg	Mon Jun 08 04:07:13 2015 +0300
     3.3 @@ -357,7 +357,7 @@
     3.4  	info_path="$ROOT$PKGS_DB/installed.info"
     3.5  	if [ ! -f "$info_path" ]; then
     3.6  		if [ "$(id -u)" == '0' ]; then
     3.7 -			_ 'File "%s" generated. Please wait...' installed.info
     3.8 +			_ 'File "%s" generated. Please wait...' 'installed.info'
     3.9  			for pkg in $ROOT$PKGS_DB/installed/*/receipt; do
    3.10  				unset_receipt
    3.11  				. $pkg
    3.12 @@ -376,8 +376,21 @@
    3.13  		fi
    3.14  	fi
    3.15  
    3.16 -	# Check for md5 field in the installed.info
    3.17 -
    3.18 +	# Check for md5 field (#9) in the installed.info
    3.19 +	if [ -n "$(awk -F$'\t' 'BEGIN{ n = "" } { if(NF != 9){ n = "o"; } } END{ print n }' $info_path)" ]; then
    3.20 +		_n 'File "%s" generated. Please wait...' 'installed.info.new'
    3.21 +		awk -F$'\t' -vm="$ROOT$PKGS_DB/installed.md5" 'BEGIN{OFS="\t"}
    3.22 +		{
    3.23 +			if (NF != 9) {
    3.24 +				pkg = $1 "-" $2 ".tazpkg";
    3.25 +				"fgrep " pkg " " m " | cut -c-32" | getline $9;
    3.26 +				$9 = ($9 == "") ? "00000000000000000000000000000000" : $9;
    3.27 +			}
    3.28 +			print;
    3.29 +		}' $info_path > $info_path.new
    3.30 +		mv -f $info_path.new $info_path
    3.31 +		status
    3.32 +	fi
    3.33  }
    3.34  
    3.35  
    3.36 @@ -570,12 +583,12 @@
    3.37  extract_package() {
    3.38  	action 'Extracting package...'
    3.39  	cpio -idm --quiet < "${PACKAGE_FILE##*/}" && rm -f "${PACKAGE_FILE##*/}"
    3.40 -	status
    3.41  	if [ -f fs.cpio.lzma ]; then
    3.42  		unlzma -c fs.cpio.lzma | cpio -idm --quiet && rm fs.cpio.lzma
    3.43  	elif [ -f fs.cpio.gz ]; then
    3.44  		zcat fs.cpio.gz | cpio -idm --quiet && rm fs.cpio.gz
    3.45  	fi
    3.46 +	status
    3.47  }
    3.48  
    3.49  
    3.50 @@ -641,8 +654,7 @@
    3.51  		cp $TMP_DIR/modifiers  "$ROOT$INSTALLED/$PACKAGE" 2>/dev/null
    3.52  		cp $TMP_DIR/files.list "$ROOT$INSTALLED/$PACKAGE" 2>/dev/null
    3.53  		rm -rf $TMP_DIR 2> /dev/null
    3.54 -		sed -i "/ $(basename "$PACKAGE_FILE")$/d" \
    3.55 -			$ROOT$PKGS_DB/installed.$SUM 2> /dev/null
    3.56 +		sed -i "/ $(basename "$PACKAGE_FILE")$/d" $ROOT$PKGS_DB/installed.$SUM 2>/dev/null
    3.57  		cd "$(dirname "$PACKAGE_FILE")"
    3.58  		$CHECKSUM "$(basename "$PACKAGE_FILE")" >> $ROOT$PKGS_DB/installed.$SUM
    3.59  	}
    3.60 @@ -834,11 +846,13 @@
    3.61  	check_for_installed_info
    3.62  	SIZES=$(echo $PACKED_SIZE $UNPACKED_SIZE | sed 's|\.0||g')
    3.63  	DEPENDS=$(echo $DEPENDS) # remove newlines from some receipts
    3.64 +	PKG_SUM="$(fgrep "$(basename "$PACKAGE_FILE")" "$ROOT$PKGS_DB/installed.$SUM" | cut -d' ' -f1)"
    3.65  	II=$ROOT$PKGS_DB/installed.info
    3.66  	sed -i "/^$PACKAGE	/d" $II # remove old entry
    3.67  	cat >> $II <<EOT
    3.68 -$PACKAGE	$VERSION$EXTRAVERSION	$CATEGORY	$SHORT_DESC	$WEB_SITE	$TAGS	$SIZES	$DEPENDS
    3.69 +$PACKAGE	$VERSION$EXTRAVERSION	$CATEGORY	$SHORT_DESC	$WEB_SITE	$TAGS	$SIZES	$DEPENDS	$PKG_SUM
    3.70  EOT
    3.71 +	#awk -F$'\t' -vp="$PACKAGE" '$1==p' $ROOT$PKGS_DB/packages.info > $II
    3.72  	TEMP_FILE=$(mktemp)
    3.73  	sort $II > $TEMP_FILE; mv -f $TEMP_FILE $II; chmod a+r $II; unset II
    3.74