spk view spk-rm @ rev 19

add: spk and some improvments
author Christophe Lincoln <pankso@slitaz.org>
date Tue May 15 14:20:23 2012 +0200 (2012-05-15)
parents c4f1fc1c761a
children daf5adaaa87b
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 for i in $(cd $installed ; ls); do
54 [ -f $installed/$i/receipt ] || continue
55 unset_receipt
56 . $installed/$i/receipt
57 case " $(echo $DEPENDS) " in
58 *\ $pkg\ *) altered="$altered $i" ;;
59 esac
60 done
61 unset_receipt
62 . $installed/$pkg/receipt
64 if [ -n "$altered" ]; then
65 eval_gettext "The following packages depend on \$PACKAGE:"; echo
66 for i in $altered; do
67 echo " $i"
68 done
69 fi
70 refresh=$(cd $installed ; grep -sl ^$PACKAGE$ */modifiers)
71 if [ -n "$refresh" ]; then
72 eval_gettext "The following packages have been modified by \$PACKAGE:"; echo
73 for i in $refresh; do
74 echo " ${i%/modifiers}"
75 done
76 fi
78 # Do we have packages depending on $pkg ?
79 if [ "$altered" ]; then
80 if [ "$confirm" ]; then
81 gettext "Remove packages depending on:"; echo -n " $PACKAGE"
82 if ! confirm; then
83 gettext "Keeping packages depending on:"; echo " $PACKAGE"
84 echo -e "\n" && continue
85 fi
86 fi
87 for i in $altered; do
88 if [ -d "$installed/$i" ]; then
89 # TODO: use spk-rm
90 echo "tazpkg remove $i --root=$root"
91 fi
92 done
93 fi
95 # Handle pre_remove
96 if grep -q ^pre_remove $installed/$PACKAGE/receipt; then
97 pre_remove $root
98 fi
100 # Remove all files
101 gettext "Removing all installed files..."
102 [ "$verbose" ] && newline
103 if [ -f $installed/$PACKAGE/modifiers ]; then
104 for file in `cat $installed/$PACKAGE/files.list`
105 do
106 for mod in `cat $installed/$PACKAGE/modifiers`
107 do
108 [ -f $installed/$mod/files.list ] && \
109 [ $(grep "^$(echo $file | grepesc)$" $installed/$mod/files.list | wc -l) -gt 1 ] \
110 && continue 2
111 done
112 [ "$verbose" ] && (gettext "Removing:"; echo -n " ${root}${file}")
113 remove_file ${root}${file}
114 done
115 else
116 for file in $(cat $installed/$PACKAGE/files.list)
117 do
118 [ "$verbose" ] && (gettext "Removing:"; echo -n " ${root}${file}")
119 remove_file ${root}${file}
120 [ "$verbose" ] && status
121 done
122 fi
123 [ ! "$verbose" ] && status
125 # Handle post_remove
126 if grep -q ^post_remove $installed/$PACKAGE/receipt; then
127 post_remove $root
128 fi
130 # Remove package receipt.
131 gettext "Removing package receipt..."
132 rm -rf $installed/$PACKAGE
133 status
134 sed -i "/ $PACKAGE-$VERSION$EXTRAVERSION$/d" \
135 ${root}${PKGS_DB}/installed.$SUM 2> /dev/null
137 # Mofified ?
138 if [ "$refresh" ]; then
139 if [ "$confirm" ]; then
140 gettext "Reinstall packages modified by:"; echo " $PACKAGE"
141 if ! confirm; then
142 gettext "Keeping packages modified by:"; echo " $PACKAGE"
143 echo -e "\n" && continue
144 fi
145 fi
146 for i in $refresh; do
147 if [ $(wc -l < $installed/$i) -gt 1 ]; then
148 gettext "For reinstallation check:"; echo " $installed/$i"
149 continue
150 fi
151 # TODO: use spk-add
152 rm -r $installed/$i
153 tazpkg -gi ${i%/modifiers} --forced --root=$root
154 done
155 fi
156 }
158 #
159 # Commands and exit
160 #
162 case "$1" in
163 ""|*usage|*help) usage ;;
164 esac
166 #
167 # Handle packages
168 #
170 : ${count=0}
171 check_root
173 for pkg in $@
174 do
175 # Skip options
176 case "$pkg" in
177 --*) continue
178 esac
179 # Be sure package is installed
180 if [ ! -f "$installed/$pkg/receipt" ]; then
181 echo -n "$(boldify "$pkg") "
182 gettext "package is not installed"; newline
183 continue
184 fi
185 count=$(($count + 1))
186 [ "$count" == 1 ] && newline
187 boldify $(gettext "Removing"; echo " $pkg")
188 separator
189 [ "$verbose" ] && echo "DB: $installed"
190 # Handle --confirm
191 if [ "$confirm" ]; then
192 gettext "Confirm uninstallation of"; echo -n " $pkg:"
193 if ! confirm; then
194 gettext "Uninstallation cancelled"
195 echo -e "\n" && continue
196 fi
197 fi
198 remove
199 separator
200 echo "" && log "Removed package: $pkg"
201 done
202 exit 0