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 ;;