spk view spk-rm @ rev 32

A bunch of fix to add an lib
author Christophe Lincoln <pankso@slitaz.org>
date Tue May 15 20:32:41 2012 +0200 (2012-05-15)
parents daf5adaaa87b
children becb0314c7e1
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 gettext "The following packages depend on"; boldify " $PACKAGE:"
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 gettext "The following packages have been modified by"
73 boldify " $PACKAGE:"
74 for i in $refresh; do
75 echo " ${i%/modifiers}"
76 done
77 fi
79 # Do we have packages depending on $pkg ?
80 if [ "$altered" ]; then
81 if [ "$confirm" ]; then
82 gettext "Remove packages depending on:"; echo -n " $PACKAGE"
83 if ! confirm; then
84 gettext "Keeping packages depending on:"; echo " $PACKAGE"
85 echo -e "\n" && continue
86 fi
87 fi
88 for i in $altered; do
89 if [ -d "$installed/$i" ]; then
90 # TODO: use spk-rm
91 echo "spk-rm $i --root=$root"
92 fi
93 done
94 fi
96 # Handle pre_remove
97 if grep -q ^pre_remove $installed/$PACKAGE/receipt; then
98 pre_remove $root
99 fi
101 # Remove all files
102 gettext "Removing all installed files..."
103 [ "$verbose" ] && newline
104 if [ -f $installed/$PACKAGE/modifiers ]; then
105 for file in $(cat $installed/$PACKAGE/files.list)
106 do
107 for mod in $(cat $installed/$PACKAGE/modifiers)
108 do
109 [ -f $installed/$mod/files.list ] && \
110 [ $(grep "^$(echo $file | grepesc)$" $installed/$mod/files.list | wc -l) -gt 1 ] \
111 && continue 2
112 done
113 [ "$verbose" ] && (gettext "Removing:"; echo -n " ${root}${file}")
114 remove_file ${root}${file}
115 done
116 else
117 for file in $(cat $installed/$PACKAGE/files.list)
118 do
119 if [ "$verbose" ]; then
120 gettext "Removing:"; echo -n " ${root}${file}"
121 fi
122 remove_file ${root}${file}
123 [ "$verbose" ] && status
124 done
125 fi
126 [ ! "$verbose" ] && status
128 # Handle post_remove
129 if grep -q ^post_remove $installed/$PACKAGE/receipt; then
130 post_remove $root
131 fi
133 # Remove package receipt.
134 gettext "Removing package receipt..."
135 rm -rf $installed/$PACKAGE
136 status
137 sed -i "/ $PACKAGE-${VERSION}${EXTRAVERSION}$/d" $pkgsmd5 2> /dev/null
139 # Mofified ?
140 if [ "$refresh" ]; then
141 if [ "$confirm" ]; then
142 gettext "Reinstall packages modified by:"; echo " $PACKAGE"
143 if ! confirm; then
144 gettext "Keeping packages modified by:"; echo " $PACKAGE"
145 echo -e "\n" && continue
146 fi
147 fi
148 for i in $refresh; do
149 if [ $(wc -l < $installed/$i) -gt 1 ]; then
150 gettext "For reinstallation check:"; echo " $installed/$i"
151 continue
152 fi
153 # TODO: use spk-add
154 rm -r $installed/$i
155 spk-add ${i%/modifiers} --forced --root=$root
156 done
157 fi
158 }
160 #
161 # Commands and exit
162 #
164 case "$1" in
165 ""|*usage|*help) usage ;;
166 esac
168 #
169 # Handle packages
170 #
172 : ${count=0}
173 check_root
175 for pkg in $@
176 do
177 # Skip options
178 case "$pkg" in
179 --*) continue
180 esac
181 # Be sure package is installed
182 if [ ! -f "$installed/$pkg/receipt" ]; then
183 echo -n "$(boldify "$pkg") "
184 gettext "package is not installed"; newline
185 continue
186 fi
187 count=$(($count + 1))
188 [ "$count" == 1 ] && newline
189 boldify $(gettext "Removing"; echo " $pkg")
190 separator
191 [ "$verbose" ] && echo "DB: $installed"
192 # Handle --confirm
193 if [ "$confirm" ]; then
194 gettext "Confirm uninstallation of"; echo -n " $pkg:"
195 if ! confirm; then
196 gettext "Uninstallation cancelled"
197 echo -e "\n" && continue
198 fi
199 fi
200 remove
201 separator
202 echo "" && log "Removed package: $pkg"
203 done
204 exit 0