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 +