tazpkg rev 299
Speedup install_package
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Wed Sep 30 14:32:08 2009 +0200 (2009-09-30) |
parents | 2affdd0c18e2 |
children | 3e0b726b512b |
files | tazpkg |
line diff
1.1 --- a/tazpkg Fri Sep 18 10:10:23 2009 +0200 1.2 +++ b/tazpkg Wed Sep 30 14:32:08 2009 +0200 1.3 @@ -398,6 +398,17 @@ 1.4 fi 1.5 } 1.6 1.7 +remove_with_path() 1.8 +{ 1.9 + local dir 1.10 + rm -f $1 2>/dev/null 1.11 + dir="$1" 1.12 + while [ "$dir" != "/" ]; do 1.13 + dir="$(dirname $dir)" 1.14 + rmdir $dir 2> /dev/null || break 1.15 + done 1.16 +} 1.17 + 1.18 # This function installs a package in the rootfs. 1.19 install_package() 1.20 { 1.21 @@ -471,28 +482,46 @@ 1.22 done < $PACKAGE/files.list > $TMP_DIR/files2remove.list 1.23 fi 1.24 # Remember modified packages 1.25 - for i in $(grep -v '\[' $TMP_DIR/files.list); do 1.26 + { check=false 1.27 + for i in $(grep -v '\[' $TMP_DIR/files.list); do 1.28 [ -e "$ROOT$i" ] || continue 1.29 [ -d "$ROOT$i" ] && continue 1.30 - for j in $(grep -l "^$i$" */files.list); do 1.31 - local dir 1.32 - dir=$(dirname $j) 1.33 - [ "$j" = "$PACKAGE/files.list" ] && continue 1.34 - if grep -qs ^$dir$ $PACKAGE/modifiers; then 1.35 - # Do not overload an overloaded file ! 1.36 - rm $TMP_DIR$i 2> /dev/null 1.37 - continue 1.38 - fi 1.39 - grep -qs ^$PACKAGE$ $dir/modifiers && continue 1.40 - if [ -s "$dir/volatile.cpio.gz" ]; then 1.41 - # We can modify backed up files 1.42 - zcat $dir/volatile.cpio.gz | \ 1.43 - cpio -t 2> /dev/null | \ 1.44 - grep -q "^${i#/}$" && continue 1.45 - fi 1.46 - echo "$PACKAGE" >> $dir/modifiers 1.47 - done 1.48 + echo "- $i" 1.49 + check=true 1.50 + done ; 1.51 + $check && for i in *; do 1.52 + [ "$i" == "$PACKAGE" ] && continue 1.53 + awk "{ printf \"$i %s\\n\",\$1 }" < $i/files.list 1.54 + done } | awk ' 1.55 +{ 1.56 + if ($1 == "-" || file[$2] != "") { 1.57 + file[$2] = file[$2] " " $1 1.58 + if ($1 != "-") { 1.59 + if (pkg[$1] == "") all = all " " $1 1.60 + pkg[$1] = pkg[$1] " " $2 1.61 + } 1.62 + } 1.63 +} 1.64 +END { 1.65 + for (i = split(all, p, " "); i > 0; i--) 1.66 + for (j = split(pkg[p[i]], f, " "); j > 0; j--) 1.67 + printf "%s %s\n",p[i],f[j]; 1.68 +} 1.69 + ' | while read dir file; do 1.70 + if grep -qs ^$dir$ $PACKAGE/modifiers; then 1.71 + # Do not overload an overloaded file ! 1.72 + rm $TMP_DIR$file 2> /dev/null 1.73 + continue 1.74 + fi 1.75 + grep -qs ^$PACKAGE$ $dir/modifiers && continue 1.76 + if [ -s "$dir/volatile.cpio.gz" ]; then 1.77 + # We can modify backed up files without notice 1.78 + zcat $dir/volatile.cpio.gz | cpio -t 2> /dev/null | \ 1.79 + grep -q "^${file#/}$" && continue 1.80 + fi 1.81 + echo "$PACKAGE" >> $dir/modifiers 1.82 done 1.83 + 1.84 cd $TMP_DIR 1.85 cp receipt files.list $ROOT$INSTALLED/$PACKAGE 1.86 # Copy the description if found. 1.87 @@ -529,13 +558,9 @@ 1.88 if [ -s files2remove.list ]; then 1.89 echo -n "Removing old $PACKAGE... " 1.90 while read file; do 1.91 - rm -f $ROOT$file 1.92 - dir=$(dirname $ROOT$file) 1.93 - while true; do 1.94 - rmdir $dir 2> /dev/null || { true; break; } 1.95 - dir=$(dirname $dir) 1.96 - done 1.97 + remove_with_path $ROOT$file 1.98 done < files2remove.list 1.99 + true 1.100 status 1.101 fi 1.102 # Remove the temporary random directory. 1.103 @@ -926,7 +951,7 @@ 1.104 if (all_deps[pkg] == 1) return 1.105 all_deps[pkg] = 1 1.106 if (space != "") printf "%s%s\n",space,pkg 1.107 - for (i = 1; i <= split(deps[pkg], mydeps, " "); i++) { 1.108 + for (i = 1, n = split(deps[pkg], mydeps, " "); i <= n; i++) { 1.109 show_deps(deps, all_deps, mydeps[i]," " space) 1.110 } 1.111 } 1.112 @@ -1705,23 +1730,13 @@ 1.113 for file in `cat $INSTALLED/$PACKAGE/files.list` 1.114 do 1.115 [ $(grep ^$file$ $INSTALLED/$mod/files.list | wc -l) -gt 1 ] && continue 1.116 - rm -f $file 2>/dev/null 1.117 - dir="$file" 1.118 - while [ "$dir" != "/" ]; do 1.119 - dir="$(dirname $dir)" 1.120 - rmdir $dir 2> /dev/null || break 1.121 - done 1.122 + remove_with_path $file 1.123 done 1.124 done 1.125 else 1.126 for file in `cat $INSTALLED/$PACKAGE/files.list` 1.127 do 1.128 - rm -f $file 2>/dev/null 1.129 - dir="$file" 1.130 - while [ "$dir" != "/" ]; do 1.131 - dir="$(dirname $dir)" 1.132 - rmdir $dir 2> /dev/null || break 1.133 - done 1.134 + remove_with_path $file 1.135 done 1.136 fi 1.137 status