sup view libsup.sh @ rev 38

Add ru.po
author Aleksej Bobylev <al.bobylev@gmail.com>
date Tue Feb 28 22:58:14 2017 +0200 (2017-02-28)
parents 090432cab673
children d58ceb6b8fe9
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 bin="$HOME/.local/bin"
11 config="$HOME/.config"
12 cache="$HOME/.cache/sup"
13 data="$HOME/.local/share"
14 supdb="$data/sup"
15 installed="$supdb/installed"
16 activity="$cache/activity.log"
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'
27 alias wget="busybox wget"
29 #
30 # Functions
31 #
33 # Set ttysize= # stty will not work if called from GTK box or CGI script
34 tty_size() {
35 if ! stty size | cut -d " " -f 2; then
36 echo 80
37 fi
38 }
40 # Pretty Busybox wget output. Usage: download [name] [url] [dest]
41 # Download in current dir in $3 is not set
42 download() {
43 name="$1"
44 url="$2"
45 dest=${3:-$(pwd)}
46 file=$(basename $url)
47 trap "echo -e '\nExiting...'; rm -f ${dest%/}/$file" SIGINT INT TERM
48 # i18n
49 dl="$(gettext 'Downloading')"
51 # Get download name chars to adjust progress bar placement
52 char="$(echo $dl $name | wc -L)"
53 in=$((3 + ${char}))
55 echo -n "$dl $(colorize 035 $name →)"
56 wget -c -P ${dest} "$url" 2>&1 | while read file pct progress null
57 do
58 case "$progress" in
59 "|"*) echo -n "$(indent ${in} $progress)" | sed s'!*!-!'g ;;
60 esac
61 done
63 case "$?" in
64 0)
65 # Handle 4.0K 46.0M
66 size="$(du -mh ${dest%/}/$(basename $2) | awk '{print $1}')"
67 char="$(echo $size | wc -L)"
68 in=$((7 + ${char}))
69 indent $(($(tty_size) - ${in})) "[ $(colorize 035 $size) ]" ;;
70 1) status ;;
71 esac
72 }
74 # Extract a sup package: extract_sup "/path/to/pkg.sup"
75 extract_sup() {
76 pkg="$(basename ${1%.sup})"
77 supfile="$(readlink -f ${1%.sup}.sup)"
79 gettext "Uncompressing package tree..."
80 rm -rf ${pkg} && mkdir -p ${pkg} && cd ${pkg}
82 cpio -idm --quiet < "$supfile"
83 unlzma -c files.lzma | cpio -idm --quiet
85 rm files.lzma
86 size="$(du -sh $dest | cut -d " " -f 1)"
87 status
88 }
90 # Install a sup package
91 install_sup() {
92 pkg="$(basename ${1%.sup})"
93 supfile="$(readlink -f ${1%.sup}.sup)"
95 rm -rf ${cache}/install && mkdir ${cache}/install
96 cp ${supfile} ${cache}/install && cd ${cache}/install
98 # Get receip for deps
99 cpio -i receip --quiet < ${supfile}
100 . receip
102 # Install sup deps || exit on missing system deps ?
103 newline
104 gettext "Checking dependencies for"; echo " $PACKAGE..."
105 for dep in ${SUP_DEPS}; do
106 if [ ! "$installed/$dep" ]; then
107 echo "Missing dependency:"; colorize 35 " $dep"
108 fi
109 done
110 . /etc/slitaz/slitaz.conf # PKGS_DB
111 for dep in ${DEPENDS}; do
112 if [ ! "$PKGS_DB/installed/$dep" ]; then
113 echo "Missing dependency:"; colorize 35 " $dep"
114 fi
115 done
117 newline
118 echo -n "$(colorize 33 $(gettext 'Installing package:'))"
119 colorize 36 " $PACKAGE $VERSION"
120 log "$(gettext 'Installing package:') $PACKAGE $VERSION"
121 separator
123 # Extract and source receip first to check deps
124 md5sum=$(md5sum $supfile | awk '{print $1}')
125 extract_sup "$supfile"
127 # Execute sup_install() in files/ tree so packages maintainers just
128 # have to dl and move files where they were in $HOME
129 cd files
130 if grep -q "^sup_install" ../receip; then
131 gettext "Executing install function:"
132 indent $(($(tty_size) - 18)) "[ $(colorize 033 sup_install) ]"
133 sup_install
134 fi
136 # Create files.list
137 if [ "$verbose" ]; then
138 gettext "Creating the list of installed files..."; echo
139 fi
140 files_list="${cache}/install/${PACKAGE}-${VERSION}/files.list"
141 find . -type f -print > ${files_list}
142 find . -type l -print >> ${files_list}
143 sed -i s/'^.'/''/g ${files_list}
145 # Back to pkg tree
146 cd ${cache}/install/${PACKAGE}-${VERSION}
147 echo "sup_size=\"$(du -sh files | cut -d " " -f 1)\"" >> receip
148 echo "md5_sum=\"${md5sum}\"" >> receip
150 # Now we need a place to store package data and set $sup_size
151 echo -n "$(colorize 036 $(gettext 'Installing files:'))"
152 echo -n " $(colorize 033 $(wc -l files.list | cut -d ' ' -f 1))"
154 data="${installed}/${PACKAGE}"
155 mkdir -p ${data}
157 for file in receip README files.list; do
158 [ -f "$file" ] && cp -f ${file} ${data}
159 done
160 for file in $(ls -A files); do
161 cp -rf files/${file} ${HOME}
162 done
163 status
165 newline && rm -rf ${cache}/install
166 }
168 # Remove a sup package
169 remove_sup() {
170 pkg="$1"
171 files_list="$installed/$pkg/files.list"
172 . ${installed}/${pkg}/receip
174 newline
175 echo -n "$(colorize 33 $(gettext 'Removing package:'))"
176 colorize 36 " $PACKAGE $VERSION"
177 log "$(gettext 'Removing package:') $PACKAGE $VERSION"
178 separator
180 gettext "Files to remove :"
181 files="$(wc -l ${files_list} | cut -d ' ' -f 1)"
182 char="$(echo $files | wc -L)"
183 in=$((7 + ${char}))
184 indent $(($(tty_size) - ${in})) "[ $(colorize 033 $files) ]"
186 # Remove all files
187 for file in $(cat $files_list)
188 do
189 # --verbose
190 if [ "$verbose" ]; then
191 gettext "Removing file :"; echo -n " ${file#/}"
192 rm -f "${HOME}${file}"; status
193 # Empty folder ?
194 if [ ! "$(ls -A ${HOME}$(dirname $file))" ]; then
195 path="$(dirname $file)"
196 gettext "Removing folder :"; echo -n " ${path#/}"
197 rmdir "${HOME}$(dirname $file)"; status
198 fi
199 else
200 rm -f "${HOME}${file}"
201 # Empty folder ?
202 if [ ! "$(ls -A ${HOME}$(dirname $file))" ]; then
203 rmdir "${HOME}$(dirname $file)"
204 fi
205 fi
206 done
207 gettext "Removing packages from local database..."
208 rm -rf ${installed}/${pkg}; status
209 newline
210 }