fixes to hdw-get
[hdw-linux/hdw-linux.git] / misc / hdw-tools / hdw-get
index 9ff72ec..5943252 100644 (file)
@@ -11,12 +11,14 @@ usage()     {
        echo "usage:"
        echo "$0 [install/remove] [root] [package]"
        echo "$0 [dist-install] [root] [dist file]"
+       echo "$0 [update]"
        echo
        echo "options:"
        echo "-v        tell me whats going on"
        echo "-a        auto resolve deps, do not prompt user"
        echo "-no-dep   do not care for dependencies (used by hdw-get itself)"
        echo "-s        simulation only, do not install/remove packages"
+       echo "-b        base package, not listed in hdw-get.db"
        echo
 }
 
@@ -26,6 +28,8 @@ d_install="" ; install=""
 verbose="" ; no_dep=""
 auto_resolve_deps=""
 simulate=""
+base=""
+answer="y"
 
 FL_DIR="var/adm/flists"
 DEPS_DIR="var/adm/deps/run"
@@ -46,6 +50,7 @@ while [ "$1" ] ; do
                -a)             auto_resolve_deps="1" ; shift 1 ;;
                -no-dep)        no_dep="1" ; shift 1 ;;
                -s)             simulate="1" ; shift 1 ;;
+               -b)             base="1" ; no_dep="1" ; shift 1;;
                *)              usage ; exit 1 ;;
        esac
 done
@@ -77,9 +82,6 @@ if [ "$update" = "1" ] ; then
        echo -en " done. (`cat $DBF | wc -l` packages)\n"
 fi
 
-# create temp directory
-mkdir -p /tmp/.hdw-get
-
 # remove
 if [ "$remove" = "1" ] ; then
        # check if packages depend on package to be removed
@@ -127,27 +129,11 @@ if [ "$remove" = "1" ] ; then
 
        if [ "$simulate" != "1" ] ; then
 
-       # care about info/dir file
-       rm -f /tmp/.hdw-get/dir* ; modify_info_dir=""
-       if [ -n "`grep usr/share/info/dir $fl_file`" ] ; then
-       modify_info_dir="1"
-       cp $inst_root/usr/share/info/dir /tmp/.hdw-get/
-       for info_obj in `grep 'usr/share/info/.*.info' $fl_file | \
-                        awk -F/ '{ print $4 }'`; do
-               info_o=`echo $info_obj | sed 's/.info//'`
-               [ "$verbose" ] && echo "deleting $info_o from info/dir"
-               grep -v \($info_o\)\. /tmp/.hdw-get/dir | \
-               grep -v ^$package\ info\ -\ added\ by\ hdw > \
-               /tmp/.hdw-get/dir~
-               mv /tmp/.hdw-get/dir~ /tmp/.hdw-get/dir
-       done
-       fi
-
        # remove the files/dirs
-       ((supposed = 0))
-       ((counter = 0))
+       #((supposed = 0))
+       #((counter = 0))
        cat $fl_file | while read pkg file; do
-               ((supposed += 1))
+               #((supposed += 1))
                if [ -e $inst_root/$file ] ; then
                        if [ "$file" != "tmp" ] ; then
                        if [ -d $inst_root/$file ] ; then
@@ -156,19 +142,20 @@ if [ "$remove" = "1" ] ; then
                                rm -f $inst_root/$file > /dev/null 2>&1
                                rmdir -p `dirname $file` > /dev/null 2>&1
                        fi
-                       ((counter += 1))
+                       #((counter += 1))
                        fi
                fi
-               echo -en "\rremoved $counter from $supposed supposed files"
+               #echo -en "\rremoved $counter from $supposed supposed files"
        done
        echo -en "\ndone.\n"
 
-       # reinstall info/dir file
-       if [ "$modify_info_dir" ] ; then
-               [ "$verbose" ] && echo "restoring modified info/dir file"
-               cp /tmp/.hdw-get/dir $inst_root/usr/share/info/dir
-               rm -f /tmp/.hdw-get/dir*
-       fi
+       # care about info/dir file
+       echo "recreating info dir file ..."
+       cd $inst_root/usr/share/info
+       rm -f dir
+       for f in *; do
+               install-info $f dir 2>/dev/null
+       done
 
        fi
 
@@ -193,20 +180,23 @@ elif [ "$install" = "1" ] ; then
        fi
 
        # package in database?
-       if [ "`grep "^$pkg\ -" $DBF`" = "" ] ; then
-               echo "sorry, package $package not found ..."
-               echo "(use 'hdw-get update' to update database)"
-               exit 1
+       if [ -z $base ] ; then
+               if [ "`grep "^$pkg\ -" $DBF`" = "" ] ; then
+                       echo "sorry, package $package not found ..."
+                       echo "(use 'hdw-get update' to update database)"
+                       exit 1
+               fi
        fi
 
        # check for runtime deps
-       if [ -z $no_deps ] ; then
+       if [ -z $no_dep ] ; then
                deps="`grep "^$pkg\ -" $DBF | sed 's/.* -//'`"
                udeps=""
                tudeps=""
                for dep in $deps; do
-                       [ ! -f $inst_root/$FL_DIR/$dep-* ] && \
-                               udeps="$dep $udeps"
+                       [ "$dep" != "$pkg" ] &&
+                               [ ! -f $inst_root/$FL_DIR/$dep-[0-9]* ] && \
+                                       udeps="$dep $udeps"
                done
                while [ "$udeps" != "$tudeps" ] ; do
                        tudeps="$udeps"
@@ -214,6 +204,7 @@ elif [ "$install" = "1" ] ; then
                                deps="`grep "^$tdep\ -" $DBF | sed 's/.* -//'`"
                                for dep in $deps; do
                                        exists=0
+                                       [ "$dep" = "$pkg" ] && break
                                        [ -f $inst_root/$FL_DIR/$dep-* ] && \
                                                break
                                        for i in $udeps; do
@@ -224,29 +215,25 @@ elif [ "$install" = "1" ] ; then
                                done
                        done
                done
-               echo "$pkg depends on the following uninstalled packages:"
-               echo "$udeps"
-               echo
-               echo "continue? [y,n] (default 'n')"
-               if [ -z $auto_resolve_deps ] ; then
-                       read answer
-                       if [ "$answer" = "y" ] ; then
-                               for i in $udeps; do
-                                       [ "$simulate" != "1" ] && \
-                                       $0 -no-dep install $inst_root $i
-                               done
+               if [ ".$udeps" != "." ] ; then
+                       echo "$pkg uninstalled depends:"
+                       echo "$udeps"
+                       echo
+                       echo "continue? [y,n] (default 'n')"
+                       answer="n"
+                       if [ "$auto_resolve_deps" != "1" ] ; then
+                               read answer
+                               if [ "$answer" = "y" ] ; then
+                                       for i in $udeps; do
+                                               [ "$simulate" != "1" ] && \
+                                               $0 -no-dep install $inst_root $i
+                                       done
+                               fi
                        fi
                fi
        fi
        
-       if [ "$simulate" != "1" ] ; then
-
-       # store info/dir file
-       rm -f /tmp/.hdw-get/dir*
-       if [ -f $inst_root/usr/share/info/dir ] ; then
-               [ "$verbose" ] && echo "backing up info/dir file"
-               cp $inst_root/usr/share/info/dir /tmp/.hdw-get/
-       fi
+       if [ "$simulate" != "1" -a "$answer" = "y" ] ; then
        
        # check/install package
        if [ -f $package ] ; then
@@ -277,29 +264,13 @@ elif [ "$install" = "1" ] ; then
                exit 1
        fi
 
-       # merging info/dir file
-       if [ "$pkg" != "00-dirtree" ] ; then
-       fl_file=`ls -A $inst_root/$FL_DIR/$pkg-[0-9]* | tail -1`
-       if [ -n "`grep usr/share/info/dir $fl_file`" ] ; then
-               echo "" >> /tmp/.hdw-get/dir
-               echo "$pkg info - added by hdw `date`" >> /tmp/.hdw-get/dir
-               for info_obj in `grep 'usr/share/info/.*.info' $fl_file | \
-                                       awk -F/ '{ print $4 }'`; do
-                       info_o=`echo $info_obj | sed 's/.info//'`
-                       if [ -z "`grep \($info_o\)\. /tmp/.hdw-get/dir`" ]
-                       then
-                               [ "$verbose" ] && \
-                                       echo "merging $info_o to info/dir"
-                               grep \($info_o\)\. \
-                                       $inst_root/usr/share/info/dir >> \
-                                       /tmp/.hdw-get/dir
-                       fi
-               done
-       fi
-       fi
-       [ -f /tmp/.hdw-get/dir ] && \
-               cp /tmp/.hdw-get/dir $inst_root/usr/share/info/dir
-       rm -f /tmp/.hdw-get/dir
+       # care about info/dir file
+       echo "recreating info dir file ..."
+       cd $inst_root/usr/share/info
+       rm -f dir
+       for f in *; do
+               install-info $f dir 2>/dev/null
+       done
 
        fi
 
@@ -312,11 +283,10 @@ elif [ "$d_install" = "1" ] ; then
                # install all distribution related packages
                for package in `cat $dist_file`; do
                        # execute myelf
-                       $0 install $inst_root $package
+                       auto=""
+                       [ "$auto_resolve_deps" = "1" ] && auto="-a"
+                       $0 $auto -b install $inst_root $package
                done
        fi
 fi
 
-# remove temp directory
-rm -rf /tmp/.hdw-get
-