spk annotate spk-rm @ rev 13
spk-rm: almost finished and works fine
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Tue May 15 10:11:54 2012 +0200 (2012-05-15) |
parents | 8517989e8588 |
children | a1d998d5f6aa |
rev | line source |
---|---|
pankso@8 | 1 #!/bin/sh |
pankso@8 | 2 # |
pankso@8 | 3 # Spk-rm - Remove SliTaz packages. Read the README before adding or |
pankso@8 | 4 # modifing any code in spk! |
pankso@8 | 5 # |
pankso@8 | 6 # Copyright (C) SliTaz GNU/Linux - BSD License |
pankso@8 | 7 # Author: See AUTHORS files |
pankso@8 | 8 # |
pankso@8 | 9 #. /usr/lib/slitaz/libspk.sh |
pankso@8 | 10 . lib/libspk.sh |
pankso@8 | 11 |
pankso@8 | 12 # |
pankso@8 | 13 # Functions |
pankso@8 | 14 # |
pankso@8 | 15 |
pankso@8 | 16 # Help and usage |
pankso@8 | 17 usage() { |
pankso@8 | 18 name=$(basename $0) |
pankso@8 | 19 cat << EOT |
pankso@8 | 20 |
pankso@10 | 21 $(boldify $(gettext "Usage:")) $name [packages|--options] |
pankso@8 | 22 |
pankso@8 | 23 $(boldify $(gettext "Options:")) |
pankso@13 | 24 --confirm $(gettext "Ask before removing any packages") |
pankso@13 | 25 --verbose $(gettext "Be more verbose when removing files") |
pankso@8 | 26 |
pankso@8 | 27 $(boldify $(gettext "Examples:")) |
pankso@13 | 28 $name package1 package2 packagesN |
pankso@13 | 29 $name package1 --confirm --verbose |
pankso@8 | 30 |
pankso@8 | 31 EOT |
pankso@8 | 32 exit 0 |
pankso@8 | 33 } |
pankso@8 | 34 |
pankso@13 | 35 # Avoid dirname errors by checking for argument anf then remove file and |
pankso@13 | 36 # empty directory. Usage: remove_file file |
pankso@13 | 37 remove_file() { |
pankso@13 | 38 [ "$1" ] || return |
pankso@13 | 39 local dir |
pankso@13 | 40 rm -f $1 2>/dev/null |
pankso@13 | 41 dir="$1" |
pankso@13 | 42 while [ "$dir" != "/" ]; do |
pankso@13 | 43 dir="$(dirname $dir)" |
pankso@13 | 44 rmdir $dir 2> /dev/null || break |
pankso@13 | 45 done |
pankso@13 | 46 } |
pankso@13 | 47 |
pankso@13 | 48 # Remove a single package |
pankso@13 | 49 remove() { |
pankso@13 | 50 altered="" |
pankso@13 | 51 for i in $(cd ${root}${installed} ; ls); do |
pankso@13 | 52 [ -f ${root}${installed}/$i/receipt ] || continue |
pankso@13 | 53 unset_receipt |
pankso@13 | 54 . ${root}${installed}/$i/receipt |
pankso@13 | 55 case " $(echo $DEPENDS) " in |
pankso@13 | 56 *\ $pkg\ *) altered="$altered $i" ;; |
pankso@13 | 57 esac |
pankso@13 | 58 done |
pankso@13 | 59 unset_receipt |
pankso@13 | 60 . ${root}${installed}/$pkg/receipt |
pankso@13 | 61 |
pankso@13 | 62 if [ -n "$altered" ]; then |
pankso@13 | 63 eval_gettext "The following packages depend on \$PACKAGE:"; echo |
pankso@13 | 64 for i in $altered; do |
pankso@13 | 65 echo " $i" |
pankso@13 | 66 done |
pankso@13 | 67 fi |
pankso@13 | 68 refresh=$(cd ${root}${installed} ; grep -sl ^$PACKAGE$ */modifiers) |
pankso@13 | 69 if [ -n "$refresh" ]; then |
pankso@13 | 70 eval_gettext "The following packages have been modified by \$PACKAGE:"; echo |
pankso@13 | 71 for i in $refresh; do |
pankso@13 | 72 echo " ${i%/modifiers}" |
pankso@13 | 73 done |
pankso@13 | 74 fi |
pankso@13 | 75 |
pankso@13 | 76 # Do we have packages depending on $pkg ? |
pankso@13 | 77 if [ "$altered" ]; then |
pankso@13 | 78 if [ "$confirm" ]; then |
pankso@13 | 79 gettext "Remove packages depending on:"; echo -n " $PACKAGE" |
pankso@13 | 80 if ! confirm; then |
pankso@13 | 81 gettext "Keeping packages depending on:"; echo " $PACKAGE" |
pankso@13 | 82 echo -e "\n" && continue |
pankso@13 | 83 fi |
pankso@13 | 84 fi |
pankso@13 | 85 for i in $altered; do |
pankso@13 | 86 if [ -d "${root}${installed}/$i" ]; then |
pankso@13 | 87 # TODO: use spk-rm |
pankso@13 | 88 echo "tazpkg remove $i --root=$root" |
pankso@13 | 89 fi |
pankso@13 | 90 done |
pankso@13 | 91 fi |
pankso@13 | 92 |
pankso@13 | 93 # Handle pre_remove |
pankso@13 | 94 if grep -q ^pre_remove ${root}${installed}/$PACKAGE/receipt; then |
pankso@13 | 95 pre_remove $root |
pankso@13 | 96 fi |
pankso@13 | 97 |
pankso@13 | 98 # Remove all files |
pankso@13 | 99 gettext "Removing all installed files..." |
pankso@13 | 100 [ "$verbose" ] && newline |
pankso@13 | 101 if [ -f ${root}${installed}/$PACKAGE/modifiers ]; then |
pankso@13 | 102 for file in `cat ${root}${installed}/$PACKAGE/files.list` |
pankso@13 | 103 do |
pankso@13 | 104 for mod in `cat ${root}${installed}/$PACKAGE/modifiers` |
pankso@13 | 105 do |
pankso@13 | 106 [ -f ${root}${installed}/$mod/files.list ] && \ |
pankso@13 | 107 [ $(grep "^$(echo $file | grepesc)$" ${root}${installed}/$mod/files.list | wc -l) -gt 1 ] \ |
pankso@13 | 108 && continue 2 |
pankso@13 | 109 done |
pankso@13 | 110 [ "$verbose" ] && gettext "Removing:"; echo -n " ${root}${file}" |
pankso@13 | 111 remove_file ${root}${file} |
pankso@13 | 112 done |
pankso@13 | 113 else |
pankso@13 | 114 for file in $(cat ${root}${installed}/$PACKAGE/files.list) |
pankso@13 | 115 do |
pankso@13 | 116 [ "$verbose" ] && gettext "Removing:"; echo -n " ${root}${file}" |
pankso@13 | 117 remove_file ${root}${file} |
pankso@13 | 118 [ "$verbose" ] && status |
pankso@13 | 119 done |
pankso@13 | 120 fi |
pankso@13 | 121 [ "$verbose" ] || status |
pankso@13 | 122 |
pankso@13 | 123 # Handle post_remove |
pankso@13 | 124 if grep -q ^post_remove ${root}${installed}/$PACKAGE/receipt; then |
pankso@13 | 125 post_remove $root |
pankso@13 | 126 fi |
pankso@13 | 127 |
pankso@13 | 128 # Remove package receipt. |
pankso@13 | 129 gettext "Removing package receipt..." |
pankso@13 | 130 rm -rf ${root}${installed}/$PACKAGE |
pankso@13 | 131 status |
pankso@13 | 132 sed -i "/ $PACKAGE-$VERSION$EXTRAVERSION$/d" \ |
pankso@13 | 133 ${root}${PKGS_DB}/installed.$SUM 2> /dev/null |
pankso@13 | 134 |
pankso@13 | 135 # Mofified ? |
pankso@13 | 136 if [ "$refresh" ]; then |
pankso@13 | 137 if [ "$confirm" ]; then |
pankso@13 | 138 gettext "Reinstall packages modified by:"; echo " $PACKAGE" |
pankso@13 | 139 if ! confirm; then |
pankso@13 | 140 gettext "Keeping packages modified by:"; echo " $PACKAGE" |
pankso@13 | 141 echo -e "\n" && continue |
pankso@13 | 142 fi |
pankso@13 | 143 fi |
pankso@13 | 144 for i in $refresh; do |
pankso@13 | 145 if [ $(wc -l < ${root}${installed}/$i) -gt 1 ]; then |
pankso@13 | 146 gettext "For reinstallation check:"; echo " $installed/$i" |
pankso@13 | 147 continue |
pankso@13 | 148 fi |
pankso@13 | 149 # TODO: use spk-add |
pankso@13 | 150 rm -r ${root}${installed}/$i |
pankso@13 | 151 tazpkg -gi ${i%/modifiers} --forced --root=$root |
pankso@13 | 152 done |
pankso@13 | 153 fi |
pankso@13 | 154 } |
pankso@13 | 155 |
pankso@8 | 156 # |
pankso@10 | 157 # Commands and exit |
pankso@8 | 158 # |
pankso@8 | 159 |
pankso@8 | 160 case "$1" in |
pankso@13 | 161 ""|usage|help) usage ;; |
pankso@8 | 162 esac |
pankso@10 | 163 |
pankso@10 | 164 # |
pankso@10 | 165 # Handle packages |
pankso@10 | 166 # |
pankso@10 | 167 |
pankso@10 | 168 count=0 |
pankso@10 | 169 check_root |
pankso@10 | 170 |
pankso@10 | 171 for pkg in $@ |
pankso@10 | 172 do |
pankso@13 | 173 # Skip options |
pankso@13 | 174 case "$pkg" in |
pankso@13 | 175 --*) continue |
pankso@13 | 176 esac |
pankso@13 | 177 # Be sure package is installed |
pankso@13 | 178 if [ ! -f "${root}${installed}/$pkg/receipt" ]; then |
pankso@13 | 179 echo -n "$(boldify "$pkg") " |
pankso@13 | 180 gettext "package is not installed"; newline |
pankso@13 | 181 continue |
pankso@13 | 182 fi |
pankso@10 | 183 count=$(($count + 1)) |
pankso@13 | 184 [ "$count" == 1 ] && newline |
pankso@13 | 185 boldify $(gettext "Removing"; echo " $pkg") |
pankso@10 | 186 separator |
pankso@10 | 187 # Handle --confirm |
pankso@10 | 188 if [ "$confirm" ]; then |
pankso@10 | 189 gettext "Confirm uninstallation of"; echo -n " $pkg:" |
pankso@10 | 190 if ! confirm; then |
paul@12 | 191 gettext "Uninstallation cancelled" |
pankso@13 | 192 echo -e "\n" && continue |
pankso@10 | 193 fi |
pankso@10 | 194 fi |
pankso@13 | 195 remove |
pankso@13 | 196 separator |
pankso@13 | 197 echo "" && log "Removed package: $pkg" |
pankso@10 | 198 done |
pankso@10 | 199 |
pankso@8 | 200 exit 0 |