tazpkg diff modules/remove @ rev 840

Add a bunch of modules with new-style support of 'root' (not all commands are modules yet); strip and compress resources.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri Aug 28 16:10:34 2015 +0300 (2015-08-28)
parents
children d6cbd0c5f273
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/modules/remove	Fri Aug 28 16:10:34 2015 +0300
     1.3 @@ -0,0 +1,175 @@
     1.4 +#!/bin/sh
     1.5 +# TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg
     1.6 +# remove - TazPkg module
     1.7 +# Remove packages
     1.8 +
     1.9 +
    1.10 +# Connect function libraries
    1.11 +. /lib/libtaz.sh
    1.12 +
    1.13 +# Get TazPkg working environment
    1.14 +. @@MODULES@@/getenv
    1.15 +
    1.16 +
    1.17 +
    1.18 +
    1.19 +remove_with_path() {
    1.20 +	# Avoid dirname errors by checking for argument.
    1.21 +	[ -n "$1" ] || return
    1.22 +
    1.23 +	local dir
    1.24 +	rm -f $1 2>/dev/null
    1.25 +	dir="$1"
    1.26 +	while [ "$dir" != "/" ]; do
    1.27 +		dir="$(dirname "$dir")"
    1.28 +		rmdir "$dir" 2>/dev/null || break
    1.29 +	done
    1.30 +}
    1.31 +
    1.32 +
    1.33 +grepesc() {
    1.34 +	sed 's/\[/\\[/g'
    1.35 +}
    1.36 +
    1.37 +
    1.38 +# Log activity
    1.39 +
    1.40 +log_pkg() {
    1.41 +	[ -w "$LOG" ] &&
    1.42 +	echo "$(date +'%F %T') - $1 - $PACKAGE ($VERSION$EXTRAVERSION)" >> "$LOG"
    1.43 +}
    1.44 +
    1.45 +
    1.46 +# Interactive mode
    1.47 +
    1.48 +im() { tty -s; }
    1.49 +
    1.50 +
    1.51 +
    1.52 +
    1.53 +PACKAGE="$1"
    1.54 +
    1.55 +if [ ! -f "$INSTALLED/$PACKAGE/receipt" ]; then
    1.56 +	newline; _ 'Package "%s" is not installed.' "$PACKAGE"
    1.57 +	exit 1
    1.58 +fi
    1.59 +
    1.60 +. "$INSTALLED/$PACKAGE/receipt"
    1.61 +
    1.62 +# Info #1: dependent packages (to be processed later)
    1.63 +ALTERED="$(awk -F$'\t' -vp=" $PACKAGE " 'index(" " $8 " ", p) { printf "  %s\n", $1 }' "$PKGS_DB/installed.info")"
    1.64 +
    1.65 +if [ -n "$ALTERED" ]; then
    1.66 +	_ 'The following packages depend on package "%s":' "$PACKAGE"
    1.67 +	echo "$ALTERED"
    1.68 +fi
    1.69 +
    1.70 +# Info #2: changed packages (to be processed later)
    1.71 +REFRESH=$(cd "$INSTALLED"; grep -sl "^$PACKAGE$" */modifiers)
    1.72 +
    1.73 +if [ -n "$REFRESH" ]; then
    1.74 +	_ 'The following packages have been modified by package "%s":' "$PACKAGE"
    1.75 +	for i in $REFRESH; do
    1.76 +		echo "  ${i%/modifiers}"
    1.77 +	done
    1.78 +fi
    1.79 +
    1.80 +# Confirmation
    1.81 +if im && [ -z "$auto" ]; then
    1.82 +	confirm "$(_ 'Remove package "%s" (%s)? (y/N)' "$PACKAGE" "$VERSION$EXTRAVERSION")"
    1.83 +	if [ "$?" -ne 0 ]; then
    1.84 +		newline; _ 'Uninstallation of package "%s" cancelled.' "$PACKAGE"
    1.85 +		exit 0
    1.86 +	fi
    1.87 +fi
    1.88 +# We are here: non-interactive mode, or --auto, or answer 'y'
    1.89 +
    1.90 +# Removing package
    1.91 +title 'Removing package "%s"' "$PACKAGE"
    1.92 +
    1.93 +# [1/4] Pre-remove commands
    1.94 +if grep -q ^pre_remove "$INSTALLED/$PACKAGE/receipt"; then
    1.95 +	action 'Execution of pre-remove commands...'
    1.96 +	pre_remove
    1.97 +	status
    1.98 +fi
    1.99 +
   1.100 +# [2/4] Removing files
   1.101 +action 'Removing all files installed...'
   1.102 +if [ -f "$INSTALLED/$PACKAGE/modifiers" ]; then
   1.103 +	for file in $(cat "$INSTALLED/$PACKAGE/files.list"); do
   1.104 +		for mod in $(cat "$INSTALLED/$PACKAGE/modifiers"); do
   1.105 +			[ -f "$INSTALLED/$mod/files.list" ] && \
   1.106 +			[ $(grep "^$(echo $file | grepesc)$" "$INSTALLED/$mod/files.list" | wc -l) -gt 1 ] && \
   1.107 +			continue 2
   1.108 +		done
   1.109 +		[ -n "$debug" ] && echo "remove_with_path $root$file"
   1.110 +		remove_with_path $root$file
   1.111 +	done
   1.112 +else
   1.113 +	for file in $(cat "$INSTALLED/$PACKAGE/files.list"); do
   1.114 +		[ -n "$debug" ] && echo "remove_with_path $root$file"
   1.115 +		remove_with_path $root$file
   1.116 +	done
   1.117 +fi
   1.118 +status
   1.119 +
   1.120 +# [3/4] Post-remove commands
   1.121 +if grep -q ^post_remove "$INSTALLED/$PACKAGE/receipt"; then
   1.122 +	action 'Execution of post-remove commands...'
   1.123 +	post_remove
   1.124 +	status
   1.125 +fi
   1.126 +
   1.127 +# [4/4] Remove package receipt and remove it from databases
   1.128 +action 'Removing package receipt...'
   1.129 +rm -rf "$INSTALLED/$PACKAGE"
   1.130 +sed -i "/ $PACKAGE-$VERSION$EXTRAVERSION.tazpkg$/d" "$PKGS_DB/installed.$SUM"
   1.131 +sed -i "/^$PACKAGE	/d" "$PKGS_DB/installed.info"
   1.132 +status
   1.133 +
   1.134 +footer "$(_ 'Package "%s" (%s) removed.' "$PACKAGE" "$VERSION$EXTRAVERSION")"
   1.135 +
   1.136 +# Log this activity
   1.137 +log_pkg Removed
   1.138 +
   1.139 +# Stop if non-interactive mode and no --auto option
   1.140 +if ! im && [ -z "$auto" ]; then exit 0; fi
   1.141 +
   1.142 +# Process dependent packages
   1.143 +if [ -n "$ALTERED" ]; then
   1.144 +	if [ -n "$auto" ]; then
   1.145 +		answer=0
   1.146 +	else
   1.147 +		confirm "$(_ 'Remove packages depending on package "%s"? (y/N)' "$PACKAGE")"
   1.148 +		answer=$?
   1.149 +	fi
   1.150 +	if [ "$answer" -eq 0 ]; then
   1.151 +		for i in $ALTERED; do
   1.152 +			if [ -d "$INSTALLED/$i" ]; then
   1.153 +				tazpkg remove $i
   1.154 +			fi
   1.155 +		done
   1.156 +	fi
   1.157 +fi
   1.158 +
   1.159 +# Process changed packages
   1.160 +if [ -n "$REFRESH" ]; then
   1.161 +	if [ -n "$auto" ]; then
   1.162 +		answer=0
   1.163 +	else
   1.164 +		confirm "$(_ 'Reinstall packages modified by package "%s"? (y/N)' "$PACKAGE")"
   1.165 +		answer=$?
   1.166 +	fi
   1.167 +	if [ "$answer" -eq 0 ]; then
   1.168 +		for i in $REFRESH; do
   1.169 +			if [ "$(wc -l < "$INSTALLED/$i")" -gt 1 ]; then
   1.170 +				_ 'Check %s for reinstallation' "$INSTALLED/$i"
   1.171 +				continue
   1.172 +			fi
   1.173 +			rm -r "$INSTALLED/$i"
   1.174 +			tazpkg get-install ${i%/modifiers} --forced
   1.175 +		done
   1.176 +	fi
   1.177 +fi
   1.178 +