spk annotate spk-rm @ rev 122
spk-rm: Moved remove_file function to libspk.sh.
author | Christopher Rogers <slaxemulator@gmail.com> |
---|---|
date | Thu Dec 20 13:31:21 2012 +0000 (2012-12-20) |
parents | 8bcd11c1cc91 |
children | 365a7811faf7 |
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@19 | 9 . /usr/lib/slitaz/libspk.sh |
pankso@8 | 10 |
pankso@8 | 11 # |
pankso@8 | 12 # Functions |
pankso@8 | 13 # |
pankso@8 | 14 |
pankso@8 | 15 # Help and usage |
pankso@8 | 16 usage() { |
pankso@8 | 17 name=$(basename $0) |
pankso@8 | 18 cat << EOT |
pankso@8 | 19 |
pankso@10 | 20 $(boldify $(gettext "Usage:")) $name [packages|--options] |
pankso@8 | 21 |
mojo@79 | 22 $(gettext "Remove installed packages and their dependencies") |
pankso@15 | 23 |
pankso@8 | 24 $(boldify $(gettext "Options:")) |
pankso@13 | 25 --confirm $(gettext "Ask before removing any packages") |
pankso@30 | 26 --root= $(gettext "Set the root file system path") |
pankso@13 | 27 --verbose $(gettext "Be more verbose when removing files") |
pankso@8 | 28 |
pankso@8 | 29 $(boldify $(gettext "Examples:")) |
pankso@13 | 30 $name package1 package2 packagesN |
pankso@13 | 31 $name package1 --confirm --verbose |
pankso@8 | 32 |
pankso@8 | 33 EOT |
pankso@8 | 34 exit 0 |
pankso@8 | 35 } |
pankso@8 | 36 |
pankso@13 | 37 # Remove a single package |
pankso@13 | 38 remove() { |
meshca@103 | 39 local altered |
meshca@70 | 40 boldify $(gettext "Removing") $pkg |
pankso@41 | 41 separator |
pankso@41 | 42 [ "$verbose" ] && echo "DB: $installed" |
pankso@41 | 43 |
pankso@41 | 44 # Reverse deps |
pankso@41 | 45 for i in $(ls $installed); do |
meshca@104 | 46 is_package_installed $i || continue |
pankso@13 | 47 unset_receipt |
meshca@103 | 48 source_receipt $installed/$i/receipt |
meshca@70 | 49 case " $DEPENDS " in |
pankso@13 | 50 *\ $pkg\ *) altered="$altered $i" ;; |
pankso@13 | 51 esac |
pankso@13 | 52 done |
pankso@13 | 53 unset_receipt |
meshca@103 | 54 source_receipt $installed/$pkg/receipt |
pankso@13 | 55 |
pankso@39 | 56 if [ "$altered" ]; then |
meshca@69 | 57 gettext "The following packages depend on"; colorize 31 " $pkg" |
pankso@13 | 58 for i in $altered; do |
meshca@69 | 59 echo " $(colorize 32 $i)" |
pankso@13 | 60 done |
pankso@13 | 61 fi |
pankso@13 | 62 |
pankso@39 | 63 # Reverse deps are displayed, confirm uninstall. |
pankso@39 | 64 if [ "$confirm" ]; then |
meshca@103 | 65 echo $(gettext "Confirm uninstallation of:") " $pkg" |
pankso@39 | 66 if ! confirm; then |
pankso@39 | 67 gettext "Uninstallation cancelled" |
meshca@103 | 68 newline && continue |
pankso@13 | 69 fi |
pankso@13 | 70 fi |
pankso@13 | 71 |
pankso@13 | 72 # Handle pre_remove |
pankso@17 | 73 if grep -q ^pre_remove $installed/$PACKAGE/receipt; then |
pankso@13 | 74 pre_remove $root |
pankso@13 | 75 fi |
pankso@13 | 76 |
pankso@13 | 77 # Remove all files |
pankso@41 | 78 fileslist=$installed/$PACKAGE/files.list |
pankso@78 | 79 gettext "Installed files:" |
pankso@41 | 80 echo -n " $(wc -l $fileslist | cut -d " " -f 1)" |
pankso@13 | 81 [ "$verbose" ] && newline |
pankso@41 | 82 for file in $(cat $fileslist) |
pankso@40 | 83 do |
pankso@40 | 84 if [ "$verbose" ]; then |
pankso@40 | 85 gettext "Removing:"; echo -n " ${root}${file}" |
pankso@40 | 86 fi |
pankso@40 | 87 remove_file ${root}${file} |
pankso@40 | 88 [ "$verbose" ] && status |
pankso@40 | 89 done |
pankso@17 | 90 [ ! "$verbose" ] && status |
pankso@13 | 91 |
pankso@13 | 92 # Handle post_remove |
pankso@17 | 93 if grep -q ^post_remove $installed/$PACKAGE/receipt; then |
pankso@13 | 94 post_remove $root |
pankso@13 | 95 fi |
pankso@13 | 96 |
pankso@13 | 97 # Remove package receipt. |
pankso@13 | 98 gettext "Removing package receipt..." |
pankso@17 | 99 rm -rf $installed/$PACKAGE |
pankso@51 | 100 sed -i "/$PACKAGE-${VERSION}${EXTRAVERSION}.tazpkg/"d $installed.$SUM |
pankso@13 | 101 status |
pankso@13 | 102 |
pankso@53 | 103 separator |
pankso@39 | 104 |
pankso@39 | 105 # Do we have packages depending on $pkg to remove ? |
pankso@39 | 106 if [ "$altered" ]; then |
pankso@13 | 107 if [ "$confirm" ]; then |
meshca@103 | 108 echo $(gettext "Removing packages depending on:") $pkg |
pankso@39 | 109 if ! confirm; then |
pankso@40 | 110 gettext "Keeping packages..."; newline |
pankso@39 | 111 newline && continue |
pankso@39 | 112 fi |
pankso@39 | 113 fi |
pankso@39 | 114 for i in $altered; do |
pankso@39 | 115 if [ -d "$installed/$i" ]; then |
pankso@39 | 116 spk-rm $i --root=$root |
pankso@39 | 117 fi |
pankso@39 | 118 done |
pankso@53 | 119 else |
pankso@53 | 120 newline |
pankso@39 | 121 fi |
pankso@13 | 122 } |
pankso@13 | 123 |
pankso@8 | 124 # |
pankso@10 | 125 # Commands and exit |
pankso@8 | 126 # |
pankso@8 | 127 |
pankso@8 | 128 case "$1" in |
pankso@15 | 129 ""|*usage|*help) usage ;; |
pankso@8 | 130 esac |
pankso@10 | 131 |
pankso@10 | 132 # |
pankso@10 | 133 # Handle packages |
pankso@10 | 134 # |
pankso@10 | 135 |
pankso@19 | 136 : ${count=0} |
pankso@10 | 137 check_root |
pankso@10 | 138 |
pankso@10 | 139 for pkg in $@ |
pankso@10 | 140 do |
pankso@13 | 141 # Skip options |
pankso@13 | 142 case "$pkg" in |
pankso@13 | 143 --*) continue |
pankso@13 | 144 esac |
pankso@13 | 145 # Be sure package is installed |
meshca@104 | 146 if ! is_package_installed $pkg; then |
meshca@71 | 147 echo -n "$(boldify $pkg) " |
pankso@13 | 148 gettext "package is not installed"; newline |
pankso@13 | 149 continue |
pankso@13 | 150 fi |
pankso@10 | 151 count=$(($count + 1)) |
pankso@13 | 152 [ "$count" == 1 ] && newline |
pankso@13 | 153 remove |
pankso@39 | 154 log "Removed package: $pkg" |
pankso@10 | 155 done |
pankso@56 | 156 |
pankso@56 | 157 # Show all new counted packages in verbose mode |
pankso@56 | 158 if [ "$verbose" ]; then |
meshca@69 | 159 gettext "Removed packages:"; colorize 34 " $count" |
pankso@56 | 160 fi |
pankso@56 | 161 |
pankso@8 | 162 exit 0 |