spk view spk-rm @ rev 16

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