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|*)