spk view spk-rm @ rev 17

libspk.sh: set $root for all files/DB path, spk-rm: work with --root=
author Christophe Lincoln <pankso@slitaz.org>
date Tue May 15 12:29:41 2012 +0200 (2012-05-15)
parents 57ae420bd1c2
children b9ca2ddbafa1
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 $(gettext "Remove installed packages and ther dependencies")
25 $(boldify $(gettext "Options:"))
26 --confirm $(gettext "Ask before removing any packages")
27 --root $(gettext "Set the root file system path")
28 --verbose $(gettext "Be more verbose when removing files")
30 $(boldify $(gettext "Examples:"))
31 $name package1 package2 packagesN
32 $name package1 --confirm --verbose
34 EOT
35 exit 0
36 }
38 # Avoid dirname errors by checking for argument anf then remove file and
39 # empty directory. Usage: remove_file file
40 remove_file() {
41 [ "$1" ] || return
42 local dir
43 rm -f $1 2>/dev/null
44 dir="$1"
45 while [ "$dir" != "/" ]; do
46 dir="$(dirname $dir)"
47 rmdir $dir 2> /dev/null || break
48 done
49 }
51 # Remove a single package
52 remove() {
53 altered=""
54 for i in $(cd $installed ; ls); do
55 [ -f $installed/$i/receipt ] || continue
56 unset_receipt
57 . $installed/$i/receipt
58 case " $(echo $DEPENDS) " in
59 *\ $pkg\ *) altered="$altered $i" ;;
60 esac
61 done
62 unset_receipt
63 . $installed/$pkg/receipt
65 if [ -n "$altered" ]; then
66 eval_gettext "The following packages depend on \$PACKAGE:"; echo
67 for i in $altered; do
68 echo " $i"
69 done
70 fi
71 refresh=$(cd $installed ; grep -sl ^$PACKAGE$ */modifiers)
72 if [ -n "$refresh" ]; then
73 eval_gettext "The following packages have been modified by \$PACKAGE:"; echo
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 "tazpkg remove $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 [ "$verbose" ] && (gettext "Removing:"; echo -n " ${root}${file}")
120 remove_file ${root}${file}
121 [ "$verbose" ] && status
122 done
123 fi
124 [ ! "$verbose" ] && status
126 # Handle post_remove
127 if grep -q ^post_remove $installed/$PACKAGE/receipt; then
128 post_remove $root
129 fi
131 # Remove package receipt.
132 gettext "Removing package receipt..."
133 rm -rf $installed/$PACKAGE
134 status
135 sed -i "/ $PACKAGE-$VERSION$EXTRAVERSION$/d" \
136 ${root}${PKGS_DB}/installed.$SUM 2> /dev/null
138 # Mofified ?
139 if [ "$refresh" ]; then
140 if [ "$confirm" ]; then
141 gettext "Reinstall packages modified by:"; echo " $PACKAGE"
142 if ! confirm; then
143 gettext "Keeping packages modified by:"; echo " $PACKAGE"
144 echo -e "\n" && continue
145 fi
146 fi
147 for i in $refresh; do
148 if [ $(wc -l < $installed/$i) -gt 1 ]; then
149 gettext "For reinstallation check:"; echo " $installed/$i"
150 continue
151 fi
152 # TODO: use spk-add
153 rm -r $installed/$i
154 tazpkg -gi ${i%/modifiers} --forced --root=$root
155 done
156 fi
157 }
159 #
160 # Commands and exit
161 #
163 case "$1" in
164 ""|*usage|*help) usage ;;
165 esac
167 #
168 # Handle packages
169 #
171 count=0
172 check_root
174 for pkg in $@
175 do
176 # Skip options
177 case "$pkg" in
178 --*) continue
179 esac
180 # Be sure package is installed
181 if [ ! -f "$installed/$pkg/receipt" ]; then
182 echo -n "$(boldify "$pkg") "
183 gettext "package is not installed"; newline
184 continue
185 fi
186 count=$(($count + 1))
187 [ "$count" == 1 ] && newline
188 boldify $(gettext "Removing"; echo " $pkg")
189 separator
190 [ "$verbose" ] && echo "DB: $installed"
191 # Handle --confirm
192 if [ "$confirm" ]; then
193 gettext "Confirm uninstallation of"; echo -n " $pkg:"
194 if ! confirm; then
195 gettext "Uninstallation cancelled"
196 echo -e "\n" && continue
197 fi
198 fi
199 remove
200 separator
201 echo "" && log "Removed package: $pkg"
202 done
203 exit 0