spk view spk-rm @ rev 45

Removed modifers from spk-rm
author Christian Mesh <meshca@clarkson.edu>
date Tue May 15 22:18:01 2012 -0500 (2012-05-15)
parents 4a7b284956e1
children 1d9559a4f75b
line source
1 #!/bin/sh
2 #
3 # Spk-rm - Remove SliTaz packages. Read the README before adding or
4 # modifing any code in spk!
5 #
6 # Copyright (C) SliTaz GNU/Linux - BSD License
7 # Author: See AUTHORS files
8 #
9 . /usr/lib/slitaz/libspk.sh
11 #
12 # Functions
13 #
15 # Help and usage
16 usage() {
17 name=$(basename $0)
18 cat << EOT
20 $(boldify $(gettext "Usage:")) $name [packages|--options]
22 $(gettext "Remove installed packages and ther dependencies")
24 $(boldify $(gettext "Options:"))
25 --confirm $(gettext "Ask before removing any packages")
26 --root= $(gettext "Set the root file system path")
27 --verbose $(gettext "Be more verbose when removing files")
29 $(boldify $(gettext "Examples:"))
30 $name package1 package2 packagesN
31 $name package1 --confirm --verbose
33 EOT
34 exit 0
35 }
37 # Avoid dirname errors by checking for argument anf then remove file and
38 # empty directory. Usage: remove_file file
39 remove_file() {
40 [ "$1" ] || return
41 local dir
42 rm -f $1 2>/dev/null
43 dir="$1"
44 while [ "$dir" != "/" ]; do
45 dir="$(dirname $dir)"
46 rmdir $dir 2> /dev/null || break
47 done
48 }
50 # Remove a single package
51 remove() {
52 altered=""
53 boldify $(gettext "Removing"; echo " $pkg")
54 separator
55 [ "$verbose" ] && echo "DB: $installed"
57 # Reverse deps
58 for i in $(ls $installed); do
59 [ -f $installed/$i/receipt ] || continue
60 unset_receipt
61 . $installed/$i/receipt
62 case " $(echo $DEPENDS) " in
63 *\ $pkg\ *) altered="$altered $i" ;;
64 esac
65 done
66 unset_receipt
67 . $installed/$pkg/receipt
69 if [ "$altered" ]; then
70 gettext "The following packages depend on"; colorize " $pkg" 31
71 for i in $altered; do
72 echo " $(colorize "$i" 32)"
73 done
74 fi
76 # Reverse deps are displayed, confirm uninstall.
77 if [ "$confirm" ]; then
78 gettext "Confirm uninstallation of:"; echo -n " $pkg"
79 if ! confirm; then
80 gettext "Uninstallation cancelled"
81 echo -e "\n" && continue
82 fi
83 fi
85 # Handle pre_remove
86 if grep -q ^pre_remove $installed/$PACKAGE/receipt; then
87 pre_remove $root
88 fi
90 # Remove all files
91 fileslist=$installed/$PACKAGE/files.list
92 gettext "Removing installed files:"
93 echo -n " $(wc -l $fileslist | cut -d " " -f 1)"
94 [ "$verbose" ] && newline
95 for file in $(cat $fileslist)
96 do
97 if [ "$verbose" ]; then
98 gettext "Removing:"; echo -n " ${root}${file}"
99 fi
100 remove_file ${root}${file}
101 [ "$verbose" ] && status
102 done
103 [ ! "$verbose" ] && status
105 # Handle post_remove
106 if grep -q ^post_remove $installed/$PACKAGE/receipt; then
107 post_remove $root
108 fi
110 # Remove package receipt.
111 gettext "Removing package receipt..."
112 rm -rf $installed/$PACKAGE
113 sed -i "/ $PACKAGE-${VERSION}${EXTRAVERSION}$/d" $pkgsmd5
114 status
116 separator && newline
118 # Do we have packages depending on $pkg to remove ?
119 if [ "$altered" ]; then
120 if [ "$confirm" ]; then
121 gettext "Remove packages depending on:"; echo -n " $pkg"
122 if ! confirm; then
123 gettext "Keeping packages..."; newline
124 newline && continue
125 fi
126 fi
127 for i in $altered; do
128 if [ -d "$installed/$i" ]; then
129 spk-rm $i --root=$root
130 fi
131 done
132 fi
133 }
135 #
136 # Commands and exit
137 #
139 case "$1" in
140 ""|*usage|*help) usage ;;
141 esac
143 #
144 # Handle packages
145 #
147 : ${count=0}
148 check_root
150 for pkg in $@
151 do
152 # Skip options
153 case "$pkg" in
154 --*) continue
155 esac
156 # Be sure package is installed
157 if [ ! -f "$installed/$pkg/receipt" ]; then
158 echo -n "$(boldify "$pkg") "
159 gettext "package is not installed"; newline
160 continue
161 fi
162 count=$(($count + 1))
163 [ "$count" == 1 ] && newline
164 remove
165 log "Removed package: $pkg"
166 done
167 exit 0