tazpkg rev 122
tazpkg: handle dependancies loop
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Tue Jul 15 09:03:00 2008 +0000 (2008-07-15) |
parents | ec1d2bbce343 |
children | d12e1d8a51b2 |
files | tazpkg |
line diff
1.1 --- a/tazpkg Mon Jul 14 23:44:32 2008 +0000 1.2 +++ b/tazpkg Tue Jul 15 09:03:00 2008 +0000 1.3 @@ -258,6 +258,16 @@ 1.4 # get absolute path 1.5 ROOT=$(cd $ROOT; pwd) 1.6 fi 1.7 + ( 1.8 + # Create package path early to avoid dependancies loop 1.9 + mkdir -p $TMP_DIR 1.10 + ( cd $TMP_DIR ; cpio -i receipt > /dev/null) < $PACKAGE_FILE 1.11 + . $TMP_DIR/receipt 1.12 + rm -rf $TMP_DIR 1.13 + # Make the installed package data dir to store 1.14 + # the receipt and the files list. 1.15 + mkdir -p $ROOT$INSTALLED/$PACKAGE 1.16 + ) 1.17 # Resolv package deps. 1.18 check_for_deps $ROOT 1.19 if [ ! "$MISSING_PACKAGE" = "" ]; then 1.20 @@ -296,9 +306,6 @@ 1.21 echo "$PACKAGE" >> $(dirname $j)/modifiers 1.22 done 1.23 done 1.24 - # Make the installed package data dir to store 1.25 - # the receipt and the files list. 1.26 - mkdir -p $ROOT$INSTALLED/$PACKAGE 1.27 cp receipt files.list $ROOT$INSTALLED/$PACKAGE 1.28 # Copy the description if found. 1.29 if [ -f "description.txt" ]; then 1.30 @@ -325,13 +332,41 @@ 1.31 echo "" 1.32 } 1.33 1.34 +# Check for loop in deps tree. 1.35 +check_for_deps_loop() 1.36 +{ 1.37 + local list 1.38 + local pkg 1.39 + local deps 1.40 + pkg=$1 1.41 + shift 1.42 + [ -n "$1" ] || return 1.43 + list="" 1.44 + # Filter out already processed deps 1.45 + for i in $@; do 1.46 + case " $ALL_DEPS" in 1.47 + *\ $i\ *);; 1.48 + *) list="$list $i";; 1.49 + esac 1.50 + done 1.51 + ALL_DEPS="$ALL_DEPS$list " 1.52 + for i in $list; do 1.53 + [ -f $i/receipt ] || continue 1.54 + deps="$(DEPENDS=""; . $i/receipt; echo $DEPENDS)" 1.55 + case " $deps " in 1.56 + *\ $pkg\ *) echo -e "$MSG $i"; MSG="";; 1.57 + *) check_for_deps_loop $pkg $deps;; 1.58 + esac 1.59 + done 1.60 +} 1.61 + 1.62 # Check for missing deps listed in a receipt packages. 1.63 check_for_deps() 1.64 { 1.65 local saved; 1.66 saved=$PACKAGE 1.67 mkdir -p $TMP_DIR 1.68 - ( cd $TMP_DIR ; cpio -i receipt ) < $PACKAGE_FILE 1.69 + ( cd $TMP_DIR ; cpio -i receipt > /dev/null ) < $PACKAGE_FILE 1.70 . $TMP_DIR/receipt 1.71 PACKAGE=$saved 1.72 rm -rf $TMP_DIR 1.73 @@ -340,6 +375,8 @@ 1.74 if [ ! -d "$1$INSTALLED/$i" ]; then 1.75 MISSING_PACKAGE=$i 1.76 deps=$(($deps+1)) 1.77 + elif [ ! -f "$1$INSTALLED/$i/receipt" ]; then 1.78 + echo -e "$WARNING Dependancy loop between $PACKAGE and $i." 1.79 fi 1.80 done 1.81 if [ ! "$MISSING_PACKAGE" = "" ]; then 1.82 @@ -481,6 +518,7 @@ 1.83 for pkg in $list 1.84 do 1.85 EXTRAVERSION="" 1.86 + [ -f $INSTALLED/$pkg/receipt ] || continue 1.87 . $INSTALLED/$pkg/receipt 1.88 echo -n "$PACKAGE " 1.89 echo -en "\033[24G $VERSION$EXTRAVERSION" 1.90 @@ -558,7 +596,7 @@ 1.91 zcat $FLAVOR.flavor | cpio -i 2>/dev/null 1.92 while read file; do 1.93 for pkg in $(ls -d $INSTALLED/${file%%-*}*); do 1.94 - [ -d $pkg ] || continue 1.95 + [ -f $pkg/receipt ] || continue 1.96 EXTRAVERSION="" 1.97 . $pkg/receipt 1.98 [ "$PACKAGE-$VERSION$EXTRAVERSION" = "$file" ] && break 1.99 @@ -575,7 +613,7 @@ 1.100 get-$pkg 1.101 done < $FLAVOR.nonfree 1.102 [ "$ARG" == "--purge" ] && for pkg in $(ls $INSTALLED); do 1.103 - [ -d $INSTALLED/$pkg ] || continue 1.104 + [ -f $INSTALLED/$pkg/receipt ] || continue 1.105 EXTRAVERSION="" 1.106 . $INSTALLED/$pkg/receipt 1.107 grep -q ^$PACKAGE-$VERSION$EXTRAVERSION$ $FLAVOR.pkglist && continue 1.108 @@ -635,6 +673,7 @@ 1.109 echo "================================================================================" 1.110 for pkg in $INSTALLED/* 1.111 do 1.112 + [ -f $pkg/receipt ] || continue 1.113 EXTRAVERSION="" 1.114 . $pkg/receipt 1.115 if [ "$CATEGORY" == "$ASKED_CATEGORY" ]; then 1.116 @@ -653,6 +692,7 @@ 1.117 echo "================================================================================" 1.118 for pkg in $INSTALLED/* 1.119 do 1.120 + [ -f $pkg/receipt ] || continue 1.121 EXTRAVERSION="" 1.122 . $pkg/receipt 1.123 echo -n "$PACKAGE" 1.124 @@ -683,6 +723,7 @@ 1.125 echo -n "Creating packages informations..." 1.126 for pkg in $INSTALLED/* 1.127 do 1.128 + [ -f $pkg/receipt ] || continue 1.129 EXTRAVERSION="" 1.130 . $pkg/receipt 1.131 xhtml_pkg_info 1.132 @@ -852,7 +893,7 @@ 1.133 # name and the full path to the file(s). 1.134 for pkg in $INSTALLED/* 1.135 do 1.136 - if grep -q "$2" $pkg/files.list; then 1.137 + if grep -qs "$2" $pkg/files.list; then 1.138 . $pkg/receipt 1.139 echo "" 1.140 echo -e "\033[1mPackage $PACKAGE :\033[0m" 1.141 @@ -969,7 +1010,7 @@ 1.142 # 1.143 check_root 1.144 check_for_package_on_cmdline 1.145 - if [ ! -d "$INSTALLED/$PACKAGE" ]; then 1.146 + if [ ! -f "$INSTALLED/$PACKAGE/receipt" ]; then 1.147 echo -e "\n$PACKAGE is not installed.\n" 1.148 exit 0 1.149 else 1.150 @@ -1211,7 +1252,8 @@ 1.151 # Some packages must be installed first 1.152 FIRST_CLASS_PACKAGE=" glibc-base slitaz-base-files slitaz-boot-scripts " 1.153 for pkg in $INSTALLED/* 1.154 - do 1.155 + do 1.156 + [ -f $pkg/receipt ] || continue 1.157 EXTRAVERSION="" 1.158 . $pkg/receipt 1.159 # Diplay package name to show that Tazpkg is working... 1.160 @@ -1326,6 +1368,10 @@ 1.161 check_root 1.162 cd $INSTALLED 1.163 for PACKAGE in `ls`; do 1.164 + if [ ! -f $PACKAGE/receipt ]; then 1.165 + echo "The package $PACKAGE installation is not completed" 1.166 + continue 1.167 + fi 1.168 DEPENDS="" 1.169 EXTRAVERSION="" 1.170 . $PACKAGE/receipt 1.171 @@ -1350,6 +1396,9 @@ 1.172 echo -e "$MSG $i" 1.173 MSG="" 1.174 done 1.175 + MSG="Dependencies loop between $PACKAGE and :\n" 1.176 + ALL_DEPS="" 1.177 + check_for_deps_loop $PACKAGE $DEPENDS 1.178 done 1.179 if [ "$PACKAGE_FILE" = "--full" ]; then 1.180 for file in */md5sum; do