sup view libsup.sh @ rev 46

Smal fix and up pot/msgmerge
author Christophe Lincoln <pankso@slitaz.org>
date Fri Mar 10 09:12:43 2017 +0100 (2017-03-10)
parents 66fa352226c4
children 46a8dc676569
line source
1 #!/bin/sh
2 #
3 # libsup.sh - Shared SHell functions between sup cmdline/gtk+ tools
4 #
5 # Copyright (C) 2017 SliTaz GNU/Linux - BSD License
6 # Author: Christophe Lincoln <pankso@slitaz.org>
7 #
8 . /lib/libtaz.sh
10 config="$HOME/.config"
11 cache="$HOME/.cache/sup"
12 data="$HOME/.local/share"
13 supdb="$data/sup"
14 installed="$supdb/installed"
15 activity="$cache/activity.log"
16 downloads="$cache/downloads"
18 server="http://scn.slitaz.org/"
19 mirror="${server}content/sup/packages"
20 pkgsdb="$supdb/packages.sql"
22 wok="$supdb/wok"
23 supcook="$HOME/sup-cook"
24 cooked="$supcook/packages"
26 export TEXTDOMAIN='sup-clients'
28 #
29 # Functions
30 #
32 # --> get_cols
33 tty_size() {
34 if ! stty size | cut -d " " -f 2; then
35 echo 80
36 fi
37 }
39 # Print info a la status way: info [color] [content]
40 info() {
41 local info="$2"
42 local char="$(echo $info | wc -L)"
43 local in=$((7 + ${char}))
44 indent $(($(get_cols) - ${in})) "[ $(colorize $1 $info) ]"
45 }
47 # Pretty Busybox wget output. Usage: download [name] [url] [dest]
48 # Download in current dir if $3 is not set
49 download() {
50 name="$1"
51 url="$2"
52 dest=${3:-$(pwd)}
53 file=$(basename $url)
54 trap "echo -e '\nExiting...'; rm -f ${dest%/}/$file" SIGINT INT TERM
55 # i18n
56 dl="$(gettext 'Downloading')"
58 # Get download name chars to adjust progress bar placement
59 char="$(echo $dl $name | wc -L)"
60 in=$((3 + ${char}))
62 echo -n "$dl $(colorize 035 $name →)"
63 busybox wget -c -P ${dest} "$url" 2>&1 | while read file pct progress null
64 do
65 case "$progress" in
66 "|"*) echo -n "$(indent ${in} $progress)" | sed s'!*!-!'g ;;
67 esac
68 done
70 case "$?" in
71 0)
72 # Handle 4.0K 46.0M
73 size="$(du -mh ${dest%/}/$(basename $2) | awk '{print $1}')"
74 char="$(echo $size | wc -L)"
75 in=$((7 + ${char}))
76 indent $(($(tty_size) - ${in})) "[ $(colorize 035 $size) ]" ;;
77 1) status ;;
78 esac
79 }
81 # Extract a sup package: extract_sup "/path/to/pkg.sup"
82 extract_sup() {
83 pkg="$(basename ${1%.sup})"
84 supfile="$(readlink -f ${1%.sup}.sup)"
86 gettext "Uncompressing package tree..."
87 rm -rf ${pkg} && mkdir -p ${pkg} && cd ${pkg}
89 cpio -idm --quiet < "$supfile"
90 unlzma -c files.lzma | cpio -idm --quiet
92 rm files.lzma
93 size="$(du -sh $dest | cut -d " " -f 1)"
94 status
95 }
97 # System dependencies: exit on missing system deps ?
98 check_sys_deps() {
99 . /etc/slitaz/slitaz.conf # PKGS_DB
100 for dep in ${@}; do
101 if [ ! -d "$PKGS_DB/installed/$dep" ]; then
102 gettext "Missing dependency:"; colorize 31 " $dep"; return 1
103 fi
104 done
105 }
107 # Install a sup package
108 install_sup() {
109 pkg="$(basename ${1%.sup})"
110 supfile="$(readlink -f ${1%.sup}.sup)"
112 rm -rf ${cache}/install && mkdir ${cache}/install
113 cp ${supfile} ${cache}/install && cd ${cache}/install
115 # Get receip for deps
116 cpio -i receip --quiet < ${supfile}
117 . receip
119 # Install sup deps
120 gettext "Checking package dependencies"
121 deps="$(echo $SUP_DEPS $DEPENDS | wc -w)"
122 in=$((8 + ${deps}))
123 indent $(($(tty_size) - ${in})) "[ $(colorize 033 $deps) ]"
125 for dep in ${SUP_DEPS}; do
126 if [ ! -d "$installed/$dep" ]; then
127 gettext "Missing dependency:"; colorize 35 " $dep"
128 sup -i "$dep"
129 fi
130 done
131 check_sys_deps "$DEPENDS"
133 # Remove existing package files to avoid untracked files
134 if [ -d "$installed/$PACKAGE" ]; then
135 gettext "Removing existing package files..."
136 remove_sup "$PACKAGE" >/dev/null; status
137 fi
139 newline
140 echo -n "$(colorize 33 $(gettext 'Installing package:'))"
141 colorize 36 " $PACKAGE $VERSION"
142 log "$(gettext 'Installing package:') $PACKAGE $VERSION"
143 separator
145 # Extract and source receip first to check deps
146 md5sum=$(md5sum $supfile | awk '{print $1}')
147 extract_sup "$supfile"
149 # Execute sup_install() in files/ tree so packages maintainers just
150 # have to dl and move files where they were in $HOME
151 cd files
152 if grep -q "^sup_install" ../receip; then
153 gettext "Executing install function:"
154 indent $(($(tty_size) - 18)) "[ $(colorize 033 sup_install) ]"
155 sup_install
156 fi
158 # Create files.list
159 if [ "$verbose" ]; then
160 gettext "Creating the list of installed files..."; echo
161 fi
162 files_list="${cache}/install/${PACKAGE}-${VERSION}/files.list"
163 cd ${cache}/install/${PACKAGE}-${VERSION}/files
164 find . -type f -print > ${files_list}
165 find . -type l -print >> ${files_list}
166 sed -i s'/^.//'g ${files_list}
168 # Back to pkg tree
169 cd ${cache}/install/${PACKAGE}-${VERSION}
170 echo "sup_size=\"$(du -sh files | cut -d " " -f 1)\"" >> receip
171 echo "md5_sum=\"${md5sum}\"" >> receip
172 separator "-"
174 # Now we need a place to store package data and set $sup_size
175 echo -n "$(colorize 036 $(gettext 'Installing files:'))"
176 echo -n " $(colorize 033 $(wc -l files.list | cut -d ' ' -f 1))"
178 data="${installed}/${PACKAGE}"
179 mkdir -p ${data}
181 for file in receip README files.list; do
182 [ -f "$file" ] && cp -f ${file} ${data}
183 done
184 for file in $(ls -A files); do
185 cp -rf files/${file} ${HOME}
186 done
187 status
189 newline && rm -rf ${cache}/install
190 }
192 # Remove a sup package
193 remove_sup() {
194 pkg="$1"
195 files_list="$installed/$pkg/files.list"
196 . ${installed}/${pkg}/receip
198 newline
199 echo -n "$(colorize 33 $(gettext 'Removing package:'))"
200 colorize 36 " $PACKAGE $VERSION"
201 log "$(gettext 'Removing package:') $PACKAGE $VERSION"
202 separator
204 gettext "Files to remove :"
205 files="$(wc -l ${files_list} | cut -d ' ' -f 1)"
206 char="$(echo $files | wc -L)"
207 in=$((7 + ${char}))
208 indent $(($(tty_size) - ${in})) "[ $(colorize 033 $files) ]"
210 # Remove all files
211 for file in $(cat $files_list)
212 do
213 # --verbose
214 if [ "$verbose" ]; then
215 gettext "Removing file :"; echo -n " ${file#/}"
216 rm -f "${HOME}${file}"; status
217 # Empty folder ?
218 if [ ! "$(ls -A ${HOME}$(dirname $file))" ]; then
219 path="$(dirname $file)"
220 gettext "Removing folder :"; echo -n " ${path#/}"
221 rmdir "${HOME}$(dirname $file)"; status
222 fi
223 else
224 rm -f "${HOME}${file}"
225 # Empty folder ?
226 if [ ! "$(ls -A ${HOME}$(dirname $file))" ]; then
227 rmdir "${HOME}$(dirname $file)"
228 fi
229 fi
230 done
231 gettext "Removing packages from local database..."
232 rm -rf ${installed}/${pkg}; status
233 newline
234 }