spk rev 9
added serveral functions to libspk and changes spk-remove to use generic yes-no function
author | Christian Mesh <meshca@clarkson.edu> |
---|---|
date | Fri May 11 11:16:09 2012 -0500 (2012-05-11) |
parents | 624b83cf0e4a |
children | 592af8baf056 |
files | doc/libspk.txt lib/libspk.sh spk-rm |
line diff
1.1 --- a/doc/libspk.txt Fri May 11 17:04:26 2012 +0200 1.2 +++ b/doc/libspk.txt Fri May 11 11:16:09 2012 -0500 1.3 @@ -10,9 +10,11 @@ 1.4 1.5 FUNCTIONS 1.6 receipt_info 1.7 + extract_receipt 1.8 count_installed 1.9 count_mirrored 1.10 - 1.11 + equivalent_pkg 1.12 + missing_deps 1.13 OPTIONS 1.14 1.15 AUTHOR
2.1 --- a/lib/libspk.sh Fri May 11 17:04:26 2012 +0200 2.2 +++ b/lib/libspk.sh Fri May 11 11:16:09 2012 -0500 2.3 @@ -22,6 +22,7 @@ 2.4 # 2.5 2.6 # Display receipt information. 2.7 +# Expects a reciept to be sourced 2.8 receipt_info() { 2.9 cat << EOT 2.10 $(gettext "Version :") ${VERSION}${EXTRAVERSION} 2.11 @@ -30,14 +31,78 @@ 2.12 EOT 2.13 } 2.14 2.15 +# Extract receipt from tazpkg 2.16 +# Parameters: result_dir package_file 2.17 +extract_receipt() { 2.18 + local dir="$1" 2.19 + local file="$2" 2.20 + 2.21 + pushd "$dir" 2.22 + { cpio --quiet -i receipt > /dev/null 2>&1; } < $file 2.23 + popd 2.24 +} 2.25 + 2.26 # Used by: list 2.27 count_installed() { 2.28 - count=$(ls $installed | wc -l) 2.29 + local count=$(ls $installed | wc -l) 2.30 gettext "Installed packages"; echo ": $count" 2.31 } 2.32 2.33 # Used by: list 2.34 count_mirrored() { 2.35 - count=$(cat $pkgsmd5 | wc -l) 2.36 + local count=$(cat $pkgsmd5 | wc -l) 2.37 gettext "Mirrored packages"; echo ": $count" 2.38 } 2.39 + 2.40 +# get an already installed package from packages.equiv 2.41 +equivalent_pkg() { 2.42 + for i in $(grep -hs "^$1=" $PKGS_DB/packages.equiv \ 2.43 + $PKGS_DB/undigest/*/packages.equiv | sed "s/^$1=//") 2.44 + do 2.45 + if echo $i | fgrep -q : ; then 2.46 + # format 'alternative:newname' 2.47 + # if alternative is installed then substitute newname 2.48 + if [ -f $installed/${i%:*}/receipt ]; then 2.49 + # substitute package dependancy 2.50 + echo ${i#*:} 2.51 + return 2.52 + fi 2.53 + else 2.54 + # if alternative is installed then nothing to install 2.55 + if [ -f $installed/$i/receipt ]; then 2.56 + # substitute installed package 2.57 + echo $i 2.58 + return 2.59 + fi 2.60 + fi 2.61 + done 2.62 + # if not found in packages.equiv then no substitution 2.63 + echo $1 2.64 +} 2.65 + 2.66 +# Check for missing deps listed in a receipt packages. 2.67 +# Parameters: package dependencies 2.68 +missing_deps() { 2.69 + local package="$1" 2.70 + shift 1 2.71 + local depends="$@" 2.72 + 2.73 + local deps=0 2.74 + local missing 2.75 + 2.76 + #Calculate missing dependencies 2.77 + for pkgorg in $depends; do 2.78 + local pkg=$(equivalent_pkg $pkgorg) 2.79 + if [ ! -d "$installed/$pkg" ]; then 2.80 + gettext "Missing: \$pkg"; newline 2.81 + deps=$(($deps+1)) 2.82 + elif [ ! -f "$installed/$pkg/receipt" ]; then 2.83 + gettext "WARNING Dependency loop between \$package and \$pkg."; newline 2.84 + fi 2.85 + done 2.86 + 2.87 + gettext "\$deps missing package(s) to install."; newline 2.88 + 2.89 + # Return true if missing deps 2.90 + [ "$deps" != "0" ] 2.91 +}
3.1 --- a/spk-rm Fri May 11 17:04:26 2012 +0200 3.2 +++ b/spk-rm Fri May 11 11:16:09 2012 -0500 3.3 @@ -46,15 +46,10 @@ 3.4 # Handle --confirm 3.5 if [ "$confirm" ]; then 3.6 gettext "Confirm uninstalltion of:"; echo " $pkg" 3.7 - gettext "Anser [y|Y|yes] or [n|N|no] : " 3.8 - # A read_anser function ? 3.9 - read anser 3.10 - case "$anser" in 3.11 - y|Y|yes) ;; 3.12 - *) 3.13 + if ! yes_no; then 3.14 gettext "Uninstallation canceled" 3.15 echo -e "\n" && exit 0 ;; 3.16 - esac 3.17 + fi 3.18 fi 3.19 gettext "TODO"; echo 3.20 done ;;