tazpkg rev 405

Various: several minor speed improvements, ask for a category now works properly in undigest window, major speedup of search packages/description, search packages/description now search only in packages/descriptions fields + equiv, new display for search for file - some debugs into it but it's not perfect as multi-repository handling needs some major improvement.
author Antoine Bodin <gokhlayeh@slitaz.org>
date Mon Jan 24 22:47:08 2011 +0100 (2011-01-24)
parents 15934c1240f7
children bed335284b2e
files lib/libtazpkgbox
line diff
     1.1 --- a/lib/libtazpkgbox	Sun Dec 26 11:01:45 2010 +0100
     1.2 +++ b/lib/libtazpkgbox	Mon Jan 24 22:47:08 2011 +0100
     1.3 @@ -21,7 +21,7 @@
     1.4  
     1.5  usage()
     1.6  {
     1.7 -	[ -n "$1" ] && echo "??? $0 $@"
     1.8 +	[ "$1" ] && echo "??? $0 $@"
     1.9  	echo -e "\nTazpkgbox library\n
    1.10  Usage    : $0 [function] [pkg|args]	[pkg]
    1.11  Functions:
    1.12 @@ -39,24 +39,25 @@
    1.13  undigest_list()
    1.14  {
    1.15  	IFS="|"
    1.16 -	if [ -n "$1" -a "$1" != "all" ]; then
    1.17 -		cat undigest/$1/packages.desc
    1.18 +	if [ "$1" -a "$1" != "all" ]; then
    1.19 +		cut -f 1,2,3,4 -d "|" undigest/$1/packages.desc
    1.20  	else
    1.21 -		cat undigest/*/packages.desc
    1.22 -	fi 2> /dev/null | sort | while read PACKAGE VERSION SHORT_DESC; do
    1.23 +		cut -f 1,2,3,4 -d "|" undigest/*/packages.desc | sort
    1.24 +	fi 2> /dev/null | while read PACKAGE VERSION SHORT_DESC CATEGORY; do
    1.25 +		[ $CAT = all -o $CATEGORY = " $CAT " ] || continue
    1.26  		ICON=tazpkg
    1.27  		PACKAGE=${PACKAGE%% *}
    1.28  		if [ -d installed/$PACKAGE ]; then
    1.29 -			[ "$2" == "installable" ] && continue
    1.30 +			[ "$2" = "installable" ] && continue
    1.31  			ICON=tazpkg-installed
    1.32  			if grep -qs "^$PACKAGE$" blocked-packages.list; then
    1.33  				ICON=stop
    1.34  			fi
    1.35  		else
    1.36 -			[ "$2" == "installed" ] && continue
    1.37 +			[ "$2" = "installed" ] && continue
    1.38  		fi
    1.39 -		[ "$2" == "blocked" -a "$ICON" != "stop" ] && continue
    1.40 -		[ "$2" == "upgradeable" ] && 
    1.41 +		[ "$2" = "blocked" -a "$ICON" != "stop" ] && continue
    1.42 +		[ "$2" = "upgradeable" ] && 
    1.43  		! grep -q ^$PACKAGE$ upgradeable-packages.list && continue
    1.44  		echo "$ICON|$PACKAGE|$VERSION|$SHORT_DESC"
    1.45  	done
    1.46 @@ -72,13 +73,12 @@
    1.47  	     return
    1.48  	fi
    1.49  	IFS="|"
    1.50 -	cat packages.desc undigest/*/packages.desc 2> /dev/null | sort | \
    1.51 +	cut -f 1,2,3,4 -d "|" packages.desc undigest/*/packages.desc 2> /dev/null | sort | \
    1.52  	while read PACKAGE VERSION SHORT_DESC CATEGORY; do
    1.53  		# Check first for category for more speed.
    1.54 -		CATEGORY=${CATEGORY%| *}
    1.55 +		[ $CAT = all -o $CATEGORY = " $CAT " ] || continue
    1.56 +		[ -d installed/${PACKAGE% } ] && continue
    1.57  		ICON=tazpkg
    1.58 -		[ $CAT == all -o $CATEGORY == " $CAT " ] || continue
    1.59 -		[ -d installed/${PACKAGE%% *} ] && continue
    1.60  		grep -qs "^$PACKAGE" undigest/*/packages.desc && ICON=add
    1.61  		echo "$ICON|$PACKAGE|$VERSION|$SHORT_DESC"
    1.62  	done | tee $cache
    1.63 @@ -89,11 +89,11 @@
    1.64  {
    1.65  	for pkg in ${1}installed/*
    1.66  	do
    1.67 -		[ -n "$1" -a -s installed/$(basename $pkg)/receipt ] && continue
    1.68 +		[ "$1" -a -s installed/$(basename $pkg)/receipt ] && continue
    1.69  		. $pkg/receipt
    1.70  		ICON=tazpkg-installed
    1.71 -		[ $CAT == all -o $CATEGORY == $CAT ] || continue
    1.72 -		if [ -n "$1" -o -L $pkg ]; then
    1.73 +		[ $CAT = all -o $CATEGORY = $CAT ] || continue
    1.74 +		if [ "$1" -o -L $pkg ]; then
    1.75  			ICON=media-flash
    1.76  		else
    1.77  			grep -qs "^$PACKAGE" undigest/*/packages.desc && ICON=add
    1.78 @@ -111,7 +111,7 @@
    1.79  	     cat $cache
    1.80  	     return
    1.81  	fi
    1.82 -	( installable_list ; installed_list ) | sort -t \| -k 2 -u | tee $cache
    1.83 +	{ installable_list ; installed_list; } | sort -t \| -k 2 -u | tee $cache
    1.84  }
    1.85  
    1.86  blocked_list()
    1.87 @@ -121,7 +121,7 @@
    1.88  	for pkg in $(cat $1-packages.list 2> /dev/null); do
    1.89  		[ -f installed/$pkg/receipt ] || continue
    1.90  		. installed/$pkg/receipt
    1.91 -		[ $CAT == all -o $CATEGORY == $CAT ] || continue
    1.92 +		[ $CAT = all -o $CATEGORY = $CAT ] || continue
    1.93  		AVAILABLE=$(grep -s "^$pkg " packages.desc \
    1.94  			undigest/*/packages.desc | awk '{ print $3 }')
    1.95  		echo "$ICON|$PACKAGE|$VERSION (Available: $AVAILABLE)|$SHORT_DESC"
    1.96 @@ -139,27 +139,31 @@
    1.97  
    1.98  list_files()
    1.99  {
   1.100 -	sed 's/.\[[01]m//g' | awk 'BEGIN { show=0 } {
   1.101 -		if (/^===/) show=1-show;
   1.102 -		else if (/^Package/) pkg=$2;
   1.103 -		else if ($0 != "" && show != 0) printf("%s %s\n",pkg,$0);
   1.104 -	}' | while read pkg file; do
   1.105 -		[ "$pkg" = "0" ] && continue
   1.106 -		version=$(grep -hs "^$pkg " /var/lib/tazpkg/packages.desc \
   1.107 -		  /var/lib/tazpkg/undigest/*/packages.desc | awk '{ print $3 }')
   1.108 -		if [ -d /var/lib/tazpkg/installed/$pkg ]; then
   1.109 -			if [ -x $file ]; then
   1.110 -				echo "exec|$pkg|$version|$file"
   1.111 -			elif [ -f $file ]; then
   1.112 -				echo "txt|$pkg|$version|$file"
   1.113 -			elif [ -d $file ] ; then
   1.114 -				echo "folder|$pkg|$version|$file"
   1.115 +	sed -e "/^$/d" -e "1,/^=*$/d" -e "/^=*$/,/EOT/d" | while read input; do
   1.116 +		if [ "$input" = "${input/ :/}" ]; then
   1.117 +			# Input is a file.
   1.118 +			if [ "$ICON" = tazpkg ]; then
   1.119 +				echo "add|$PACKAGE| |$input"
   1.120  			else
   1.121 -				# Missing installed file.
   1.122 -				echo "dialog-warning|$pkg|$version|$file"
   1.123 -			fi
   1.124 +				if [ -d $input ] ; then
   1.125 +					echo "folder|$PACKAGE| |$input"
   1.126 +				elif [ -x $input ]; then
   1.127 +					echo "exec|$PACKAGE| |$input"
   1.128 +				elif [ -f $input ]; then
   1.129 +					echo "txt|$PACKAGE| |$input"
   1.130 +				else
   1.131 +					# Missing installed file.
   1.132 +					echo "dialog-warning|$PACKAGE| |$input"
   1.133 +				fi
   1.134 +			fi	
   1.135  		else
   1.136 -			echo "tazpkg|$pkg|$version|$file"
   1.137 +			# Input contain package name, don't refer to Package word as
   1.138 +			# tazpkg can use other languages.
   1.139 +			PACKAGE=$(echo $input | sed 's/^.* \(.*\) :.*$/\1/')
   1.140 +			ICON=tazpkg
   1.141 +			[ -d /var/lib/tazpkg/installed/$PACKAGE ] && ICON=tazpkg-installed
   1.142 +			echo "$ICON|$PACKAGE |$(grep -hs "^$PACKAGE " /var/lib/tazpkg/packages.desc \
   1.143 +				/var/lib/tazpkg/undigest/*/packages.desc | cut -f2,3 -d '|' | head -1)"
   1.144  		fi
   1.145  	done
   1.146  }
   1.147 @@ -177,13 +181,13 @@
   1.148  search_package()
   1.149  {
   1.150  	IFS="|"
   1.151 -	cat /var/lib/tazpkg/packages.desc \
   1.152 +	cut -f1,2,3 -d '|' /var/lib/tazpkg/packages.desc \
   1.153  	    /var/lib/tazpkg/undigest/*/packages.desc 2> /dev/null | sort | \
   1.154  	while read PACKAGE VERSION SHORT_DESC; do
   1.155 -	if echo "$PACKAGE $SHORT_DESC" | grep -iq "$SEARCH"; then
   1.156 -		list_package ${PACKAGE%% *}
   1.157 -	fi
   1.158 -	done 
   1.159 +		[ "$PACKAGE" = "${PACKAGE/$SEARCH/}" -a "$SHORT_DESC" = "${SHORT_DESC/$SEARCH/}" ] \
   1.160 +			&& continue
   1.161 +		list_package ${PACKAGE% }
   1.162 +	done
   1.163  	unset IFS
   1.164  }
   1.165  
   1.166 @@ -207,13 +211,9 @@
   1.167  		esac ;;
   1.168  	list-undigest)
   1.169  		cd /var/lib/tazpkg
   1.170 -		CAT=`cat /tmp/tazpkgbox/category`
   1.171  		set -- `cat /tmp/tazpkgbox/undigest-category`
   1.172 -		if [ "$1" == "all" -o "$1" == "" ]; then
   1.173 -			undigest_list $2 $3
   1.174 -		else
   1.175 -			undigest_list $2 $3 | grep "$1"
   1.176 -		fi ;;
   1.177 +		CAT="${1:-all}"
   1.178 +		undigest_list $2 $3 ;;
   1.179  	list-blocked|list-upgradeable)
   1.180  		cd /var/lib/tazpkg
   1.181  		CAT=`cat /tmp/tazpkgbox/category`
   1.182 @@ -225,15 +225,15 @@
   1.183  			/tmp/tazpkgbox/search ;;
   1.184  	search-packages)
   1.185  		clean_search
   1.186 -		( search_package ;
   1.187 +		{ search_package ;
   1.188  		  for i in $(grep ^$SEARCH= /var/lib/tazpkg/packages.equiv | \
   1.189  		          cut -d= -f2); do
   1.190  		        SEARCH=${i#*:}
   1.191  		        search_package
   1.192 -		  done ) > /tmp/tazpkgbox/search ;;
   1.193 +		  done; } > /tmp/tazpkgbox/search ;;
   1.194  	search-tags)
   1.195  		clean_search
   1.196 -		grep -ls TAGS /home/slitaz/wok/*/receipt | while read file; do
   1.197 +		fgrep -ls TAGS /home/slitaz/wok/*/receipt | while read file; do
   1.198  			TAGS=""
   1.199  			. $file
   1.200  			case "$TAGS" in
   1.201 @@ -279,7 +279,7 @@
   1.202  		
   1.203  		if [ "$2" = "list_files" ]; then
   1.204  			CONF_FILES="$(tazpkg list-config $3 | awk "$AWK_FILTER")"
   1.205 -			if [ -n "$CONF_FILES" ]; then
   1.206 +			if [ "$CONF_FILES" ]; then
   1.207  				mkdir $TMP_DIR
   1.208  				zcat $ROOT/installed/$3/volatile.cpio.gz | \
   1.209  					( cd $TMP_DIR ; cpio -id > /dev/null )
   1.210 @@ -308,7 +308,7 @@
   1.211  				fi
   1.212  				echo ""
   1.213  			done
   1.214 -			[ -n "$CONF_FILES" ] && rm -rf $TMP_DIR
   1.215 +			[ "$CONF_FILES" ] && rm -rf $TMP_DIR
   1.216  			exit 0
   1.217  		fi
   1.218  		
   1.219 @@ -323,7 +323,7 @@
   1.220  		
   1.221  		if [ "$2" = "list_packages" ]; then
   1.222  			PKG="$3"
   1.223 -			if [ -n "$4" ]; then
   1.224 +			if [ "$4" ]; then
   1.225  				shift
   1.226  				export LIST_PKGS='
   1.227  		<window title="Packages" icon-name="tazpkg">
   1.228 @@ -428,7 +428,7 @@
   1.229  				/var/lib/tazpkg/undigest/*/packages.desc 2> /dev/null | \
   1.230  				awk "/^$PACKAGE / { print \$3 }" | head -1 )"
   1.231  			UPGRADE=""
   1.232 -			if [ -n "$upgrade_version" ]; then
   1.233 +			if [ "$upgrade_version" ]; then
   1.234  				if [ "$upgrade_version" != "$VERSION" ]; then
   1.235  					UPGRADE="$upgrade_version"
   1.236  				else
   1.237 @@ -437,7 +437,7 @@
   1.238  					new_md5="$(cat /var/lib/tazpkg/packages.md5 \
   1.239  						/var/lib/tazpkg/undigest/*/packages.md5 \
   1.240  						2> /dev/null | awk "/ $PACKAGE-$VERSION/ { print \$1 }")"
   1.241 -					if [ -n "$cur_md5" -a -n "$new_md5" -a \
   1.242 +					if [ "$cur_md5" -a "$new_md5" -a \
   1.243  						"$cur_md5" != "$new_md5" ]; then
   1.244  						UPGRADE="build"
   1.245  					fi
   1.246 @@ -453,23 +453,23 @@
   1.247  				<variable>FIELD</variable>		
   1.248  				<item icon=\"tazpkg\">Version: | $VERSION</item>
   1.249  				<item icon=\"tazpkg\">Category: | $CATEGORY</item>"
   1.250 -		[ -n "$UPGRADE" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.251 +		[ "$UPGRADE" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.252  				<item icon=\"tazpkg\">Upgrade: | $(echo $UPGRADE)</item>"
   1.253 -		[ -n "$DEPENDS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.254 +		[ "$DEPENDS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.255  				<item icon=\"tazpkg\">Depends: | $(echo $DEPENDS)</item>"
   1.256 -		[ -n "$SUGGESTED" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.257 +		[ "$SUGGESTED" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.258  				<item icon=\"tazpkg\">Suggested: | $(echo $SUGGESTED)</item>"
   1.259 -		[ -n "$PACKED_SIZE" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.260 +		[ "$PACKED_SIZE" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.261  				<item icon=\"tazpkg\">Size: | $PACKED_SIZE ($UNPACKED_SIZE installed)</item>"
   1.262 -		[ -n "$MAINTAINER" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.263 +		[ "$MAINTAINER" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.264  				<item icon=\"system-users\">Maintainer: | $MAINTAINER</item>"
   1.265 -		[ -n "$BUGS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.266 +		[ "$BUGS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.267  				<item icon=\"important\">Bugs: | $BUGS</item>"
   1.268 -		[ -n "$HANDBOOK_URL" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.269 +		[ "$HANDBOOK_URL" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.270  				<item icon=\"ascii\">Handbook: | $HANDBOOK_URL</item>"
   1.271 -		[ -n "$TAGS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.272 +		[ "$TAGS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.273  				<item icon=\"tazpkg\">Tags: | $TAGS</item>"
   1.274 -		[ -n "$CONFIG_FILES" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.275 +		[ "$CONFIG_FILES" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.276  				<item icon=\"tazpkg\">Config files: | $CONFIG_FILES</item>"
   1.277  		[ -f $ROOT/installed/$PKG/modifiers ] && 
   1.278  		PACKAGE_INFOS="$PACKAGE_INFOS
   1.279 @@ -498,7 +498,7 @@
   1.280  					$PKG; sleep 5\"</action>
   1.281  					<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
   1.282  				</button>"
   1.283 -			[ -n "$UPGRADE" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.284 +			[ "$UPGRADE" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.285  				<button>
   1.286  					<label>Upgrade</label>
   1.287  					<input file icon=\"go-next\"></input>
   1.288 @@ -506,7 +506,7 @@
   1.289  					tazpkg get-install $PKG --forced ; sleep 5\"</action>
   1.290  					<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
   1.291  				</button>"
   1.292 -			grep -q post_install $ROOT/installed/$PKG/receipt && PACKAGE_INFOS="$PACKAGE_INFOS
   1.293 +			fgrep -q post_install $ROOT/installed/$PKG/receipt && PACKAGE_INFOS="$PACKAGE_INFOS
   1.294  				<button>
   1.295  					<label>Reconfigure</label>
   1.296  					<input file icon=\"reload\"></input>
   1.297 @@ -629,21 +629,21 @@
   1.298  				<variable>FIELD2</variable>
   1.299  				<item icon=\"tazpkg\">Version: | $VERSION</item>
   1.300  				<item icon=\"tazpkg\">Category: | $CATEGORY</item>"
   1.301 -			[ -n "$DEPENDS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.302 +			[ "$DEPENDS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.303  				<item icon=\"tazpkg\">Depends: | $(echo $DEPENDS)</item>"
   1.304 -			[ -n "$SUGGESTED" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.305 +			[ "$SUGGESTED" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.306  				<item icon=\"tazpkg\">Suggested: | $(echo $SUGGESTED)</item>"
   1.307 -			[ -n "$SIZES" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.308 +			[ "$SIZES" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.309  				<item icon=\"tazpkg\">Size: | $SIZES</item>"
   1.310 -			[ -n "$MAINTAINER" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.311 +			[ "$MAINTAINER" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.312  				<item icon=\"system-users\">Maintainer: | $MAINTAINER</item>"
   1.313 -			[ -n "$BUGS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.314 +			[ "$BUGS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.315  				<item icon=\"important\">Bugs: | $BUGS</item>"
   1.316 -			[ -n "$HANDBOOK_URL" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.317 +			[ "$HANDBOOK_URL" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.318  				<item icon=\"ascii\">Handbook: | $HANDBOOK_URL</item>"
   1.319 -			[ -n "$TAGS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.320 +			[ "$TAGS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.321  				<item icon=\"tazpkg\">Tags: | $TAGS</item>"
   1.322 -			[ -n "$CONFIG_FILES" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.323 +			[ "$CONFIG_FILES" ] && PACKAGE_INFOS="$PACKAGE_INFOS
   1.324  				<item icon=\"tazpkg\">Config files: | $CONFIG_FILES</item>"
   1.325  			PACKAGE_INFOS="$PACKAGE_INFOS
   1.326  				<item icon=\"applications-internet\">Website: | $WEB_SITE</item>