tazpkg rev 260

Speedup tazpkg rdepends
author Pascal Bellard <pascal.bellard@slitaz.org>
date Mon May 11 15:20:14 2009 +0200 (2009-05-11)
parents c02154e1b4c5
children 9d4ab409df71
files tazpkg
line diff
     1.1 --- a/tazpkg	Wed Apr 22 23:40:10 2009 +0200
     1.2 +++ b/tazpkg	Mon May 11 15:20:14 2009 +0200
     1.3 @@ -843,24 +843,33 @@
     1.4  # recursive reverse dependencies scan
     1.5  rdep_scan()
     1.6  {
     1.7 -for i in $1; do
     1.8 -	case " $ALL_DEPS " in
     1.9 -	*\ $i\ *) continue;;
    1.10 -	esac
    1.11 -	ALL_DEPS="$ALL_DEPS $i"
    1.12 -	[ -n "$2" ] && echo "$2$i"
    1.13 -	RDEPENDS=""
    1.14 -	for j in *; do
    1.15 -		[ -f $j/receipt ] || continue
    1.16 -		DEPENDS=""
    1.17 -		. $j/receipt
    1.18 -		case " $(echo $DEPENDS) " in
    1.19 -		*\ $i\ *)
    1.20 -			RDEPENDS="$RDEPENDS $j";;
    1.21 -		esac
    1.22 -	done
    1.23 -	[ -n "$RDEPENDS" ] && rdep_scan "$RDEPENDS" "$2  "
    1.24 -done
    1.25 +SEARCH=$1
    1.26 +
    1.27 +for i in * ; do
    1.28 +	DEPENDS=""
    1.29 +	. $i/receipt
    1.30 +	echo "$i $(echo $DEPENDS)"
    1.31 +done | awk -v search=$SEARCH '
    1.32 +function show_deps(deps, all_deps, pkg, space)
    1.33 +{
    1.34 +	if (all_deps[pkg] == 1) return
    1.35 +	all_deps[pkg] = 1
    1.36 +	if (space != "") printf "%s%s\n",space,pkg
    1.37 +	for (i = 1; i <= split(deps[pkg], mydeps, " "); i++) {
    1.38 +		show_deps(deps, all_deps, mydeps[i],"  " space)
    1.39 +	}
    1.40 +}
    1.41 +
    1.42 +{
    1.43 +	all_deps[$1] = 0
    1.44 +	for (i = 2; i <= NF; i++)
    1.45 +		deps[$i] = deps[$i] " " $1
    1.46 +}
    1.47 +
    1.48 +END {
    1.49 +	show_deps(deps, all_deps, search, "")
    1.50 +}
    1.51 +'
    1.52  }
    1.53  
    1.54  ###################
    1.55 @@ -2156,7 +2165,7 @@
    1.56  		cd $INSTALLED
    1.57  		ALL_DEPS=""
    1.58  		if [ -f $2/receipt ]; then
    1.59 -			rdep_scan $2 ""
    1.60 +			rdep_scan $2
    1.61  		fi
    1.62  		;;
    1.63  	usage|*)