# HG changeset patch # User Christian Mesh # Date 1336752969 18000 # Node ID 7cd8650b22aedffdcf726f9bdfd1045da9e905ec # Parent 624b83cf0e4a5a21990540c5705a0f908794e2bb added serveral functions to libspk and changes spk-remove to use generic yes-no function diff -r 624b83cf0e4a -r 7cd8650b22ae doc/libspk.txt --- a/doc/libspk.txt Fri May 11 17:04:26 2012 +0200 +++ b/doc/libspk.txt Fri May 11 11:16:09 2012 -0500 @@ -10,9 +10,11 @@ FUNCTIONS receipt_info + extract_receipt count_installed count_mirrored - + equivalent_pkg + missing_deps OPTIONS AUTHOR diff -r 624b83cf0e4a -r 7cd8650b22ae lib/libspk.sh --- a/lib/libspk.sh Fri May 11 17:04:26 2012 +0200 +++ b/lib/libspk.sh Fri May 11 11:16:09 2012 -0500 @@ -22,6 +22,7 @@ # # Display receipt information. +# Expects a reciept to be sourced receipt_info() { cat << EOT $(gettext "Version :") ${VERSION}${EXTRAVERSION} @@ -30,14 +31,78 @@ EOT } +# Extract receipt from tazpkg +# Parameters: result_dir package_file +extract_receipt() { + local dir="$1" + local file="$2" + + pushd "$dir" + { cpio --quiet -i receipt > /dev/null 2>&1; } < $file + popd +} + # Used by: list count_installed() { - count=$(ls $installed | wc -l) + local count=$(ls $installed | wc -l) gettext "Installed packages"; echo ": $count" } # Used by: list count_mirrored() { - count=$(cat $pkgsmd5 | wc -l) + local count=$(cat $pkgsmd5 | wc -l) gettext "Mirrored packages"; echo ": $count" } + +# get an already installed package from packages.equiv +equivalent_pkg() { + for i in $(grep -hs "^$1=" $PKGS_DB/packages.equiv \ + $PKGS_DB/undigest/*/packages.equiv | sed "s/^$1=//") + do + if echo $i | fgrep -q : ; then + # format 'alternative:newname' + # if alternative is installed then substitute newname + if [ -f $installed/${i%:*}/receipt ]; then + # substitute package dependancy + echo ${i#*:} + return + fi + else + # if alternative is installed then nothing to install + if [ -f $installed/$i/receipt ]; then + # substitute installed package + echo $i + return + fi + fi + done + # if not found in packages.equiv then no substitution + echo $1 +} + +# Check for missing deps listed in a receipt packages. +# Parameters: package dependencies +missing_deps() { + local package="$1" + shift 1 + local depends="$@" + + local deps=0 + local missing + + #Calculate missing dependencies + for pkgorg in $depends; do + local pkg=$(equivalent_pkg $pkgorg) + if [ ! -d "$installed/$pkg" ]; then + gettext "Missing: \$pkg"; newline + deps=$(($deps+1)) + elif [ ! -f "$installed/$pkg/receipt" ]; then + gettext "WARNING Dependency loop between \$package and \$pkg."; newline + fi + done + + gettext "\$deps missing package(s) to install."; newline + + # Return true if missing deps + [ "$deps" != "0" ] +} diff -r 624b83cf0e4a -r 7cd8650b22ae spk-rm --- a/spk-rm Fri May 11 17:04:26 2012 +0200 +++ b/spk-rm Fri May 11 11:16:09 2012 -0500 @@ -46,15 +46,10 @@ # Handle --confirm if [ "$confirm" ]; then gettext "Confirm uninstalltion of:"; echo " $pkg" - gettext "Anser [y|Y|yes] or [n|N|no] : " - # A read_anser function ? - read anser - case "$anser" in - y|Y|yes) ;; - *) + if ! yes_no; then gettext "Uninstallation canceled" echo -e "\n" && exit 0 ;; - esac + fi fi gettext "TODO"; echo done ;;