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