spk rev 55

spk-add: handle local packages and almost fix modified files check and display overwrited files
author Christophe Lincoln <pankso@slitaz.org>
date Thu May 17 13:33:31 2012 +0200 (2012-05-17)
parents ee68829c1d60
children 256ff61b7248
files lib/libspk.sh spk-add
line diff
     1.1 --- a/lib/libspk.sh	Thu May 17 11:08:49 2012 +0200
     1.2 +++ b/lib/libspk.sh	Thu May 17 13:33:31 2012 +0200
     1.3 @@ -46,6 +46,7 @@
     1.4  extract_receipt() {
     1.5  	local dir="$1"
     1.6  	local file="$2"
     1.7 +	debug "extract_receipt $1 $2"
     1.8  	cd "$dir"
     1.9  	{ cpio --quiet -i receipt > /dev/null 2>&1; } < $file
    1.10  	cd - >/dev/null
    1.11 @@ -99,6 +100,7 @@
    1.12  	local name="$1"
    1.13  	if [ -d "$installed/$name" ]; then
    1.14  		echo $(boldify "$name") $(gettext "package is already installed")
    1.15 +		[ "$forced" ] || rm -rf $tmpdir
    1.16  		continue
    1.17  	fi
    1.18  }
     2.1 --- a/spk-add	Thu May 17 11:08:49 2012 +0200
     2.2 +++ b/spk-add	Thu May 17 13:33:31 2012 +0200
     2.3 @@ -11,6 +11,9 @@
     2.4  
     2.5  tmpdir="/tmp/spk/$RANDOM"
     2.6  
     2.7 +# TODO: Handle packages.equiv: php dep on lighttpd, but id apache is installed
     2.8 +# we dont need lighttpd since apache is equivalent.
     2.9 +
    2.10  #
    2.11  # Functions
    2.12  #
    2.13 @@ -64,17 +67,11 @@
    2.14  install_package() {
    2.15  	local package_file=$1
    2.16  
    2.17 -	# Never used I think!!!
    2.18  	# Set by receipt: pre_depends() DEPENDS SELF_INSTALL CONFIG_FILES post_install()
    2.19  
    2.20 -	# Create package path early to avoid dependencies loop
    2.21 -	mkdir -p $tmpdir
    2.22 -	extract_receipt $tmpdir $package_file
    2.23 -	source $tmpdir/receipt
    2.24 -
    2.25  	local package_name=$PACKAGE
    2.26  	local package_dir="$installed/$package_name"
    2.27 -	mkdir -p $package_dir
    2.28 +	mkdir -p $package_dir || exit 1
    2.29  
    2.30  	# Run pre_depends from receipt if it exists
    2.31  	if grep -q ^pre_depends $tmpdir/receipt; then
    2.32 @@ -147,26 +144,29 @@
    2.33  	debug "check modified files"
    2.34  	for file in $file_list
    2.35  	do
    2.36 -		local filegrep=$(grep ^${file}$ $installed/*/files.list)
    2.37 +		local filegrep=$(egrep ^${file}$ $installed/*/files.list)
    2.38  		if [ "$filegrep" ]; then
    2.39  			local list=$(echo $filegrep | cut -d ":" -f 1)
    2.40 +			local count=0
    2.41  			for pkg_file in $list; do
    2.42  				local name=$(basename $(dirname $pkg_file))
    2.43 -				[  "$pkg" == "$name" ] && continue 2
    2.44 -				eval_gettext "Conflict package: \$name"; newline
    2.45 -				# If confirm is set, ask to remove
    2.46 -				if ! $confirm || gettext "Remove " && confirm; then
    2.47 -					spk-rm $name
    2.48 -				else
    2.49 -					eval_gettext "Warning! /$file will be overwritten!"; newline
    2.50 -					eval_gettext "If you remove /$package_name, be sure to reinstall $name"; newline
    2.51 +				[  "$package_name" == "$name" ] && continue 2
    2.52 +				count=$(($count +1))
    2.53 +				[ "$count" == "1" ] && gettext "Modified package:"; \
    2.54 +					colorize " $name" 31
    2.55 +				gettext "Overwriting file:"; echo " $file"
    2.56 +				# If confirm is set, ask to remove. Do we want that ?
    2.57 +				# If gawk is installed for example we will never remove Busybox
    2.58 +				# Use CONFLICTS receipt variable to avoid
    2.59 +				if [ "$confirm" ]; then
    2.60 +					echo -n "NOTE: confirm: spk-rm $name ???"; read
    2.61  				fi
    2.62  			done
    2.63  		fi
    2.64  	done
    2.65  
    2.66  	cd $tmpdir || exit 1
    2.67 -	cp receipt files.list $package_dir
    2.68 +	cp receipt files.list $package_dir || exit 1
    2.69  
    2.70  	# Copy the description if found.
    2.71  	[ -f "description.txt" ] && cp description.txt $package_dir
    2.72 @@ -256,7 +256,22 @@
    2.73  # Parameters: package_file
    2.74  install_local() {
    2.75  	package_file="$1"
    2.76 -	check_valid_tazpkg $package_file
    2.77 +	#check_valid_tazpkg $package_file
    2.78 +	if [ -f "$package_file" ]; then
    2.79 +		if [ $(dirname $package_file) == "." ]; then
    2.80 +			package_file=$(pwd)/$package_file
    2.81 +		fi
    2.82 +		debug "package file: $package_file"
    2.83 +	else
    2.84 +		gettext "Unable to find:"; echo " $package_file"
    2.85 +		exit 1
    2.86 +	fi
    2.87 +
    2.88 +	# Get package name now to check if installed
    2.89 +	mkdir -p $tmpdir
    2.90 +	extract_receipt $tmpdir $package_file
    2.91 +	source $tmpdir/receipt
    2.92 +	[ "$forced" ] || check_installed $PACKAGE
    2.93  	install_package $package_file
    2.94  	update_databases
    2.95  }
    2.96 @@ -299,6 +314,11 @@
    2.97  		newline && download "$package_full.tazpkg"
    2.98  	fi
    2.99  
   2.100 +	# Create package path early to avoid dependencies loop
   2.101 +	mkdir -p $tmpdir
   2.102 +	extract_receipt $tmpdir "$CACHE_DIR/$package_full.tazpkg"
   2.103 +	source $tmpdir/receipt
   2.104 +
   2.105  	install_package "$CACHE_DIR/$package_full.tazpkg"
   2.106  
   2.107  	#[ "$AUTOEXEC" ] && chroot $root/ $package_name
   2.108 @@ -344,10 +364,11 @@
   2.109  do
   2.110  	case "$pkg" in
   2.111  		*.tazpkg|*.spk)
   2.112 -			[ "$forced" ] || check_installed $(package_name $package_file)
   2.113 -			echo "Local package"
   2.114 -			#install_local $pkg
   2.115 -			;;
   2.116 +			#[ "$forced" ] || check_installed $(package_name $pkg)
   2.117 +			install_local $pkg ;;
   2.118 +		*.deb|.rmp)
   2.119 +			echo "TODO: spk-convert then install" ;;
   2.120 +		*.*) gettext "WARNING: Not a valid package:"; echo " $pkg" ;;
   2.121  		--*) continue ;;
   2.122  		*)
   2.123  			[ "$forced" ] || check_installed $pkg