tazpkg view modules/upgrade @ rev 840
Add a bunch of modules with new-style support of 'root' (not all commands are modules yet); strip and compress resources.
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Fri Aug 28 16:10:34 2015 +0300 (2015-08-28) |
parents | 4fbdffec7f48 |
children | 0560ba4306a1 |
line source
1 #!/bin/sh
2 # TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg
3 # upgrade - TazPkg module
4 # Check for upgrades and make system up-to-date
7 # Environment variables:
8 # root Root of the packages DB
9 # check Only check for upgrades
10 # install Check and install all upgraded packages
13 # Connect function libraries
14 . /lib/libtaz.sh
16 # Get TazPkg working environment
17 . @@MODULES@@/getenv
22 # Functions
23 # ---------
25 # Get repositories priority using $PKGS_DB/priority.
26 # In this file undigest repos are called by their names and main mirror
27 # by 'main'. Sort order: priority
29 look_for_priority() {
30 [ -s "$PKGS_DB/priority" ] && priority=$(cat "$PKGS_DB/priority")
32 for rep in main $(ls "$PKGS_DB/undigest" 2>/dev/null); do
33 if [ ! -s "$PKGS_DB/priority" ] || ! grep -q "^$rep$" "$PKGS_DB/priority"; then
34 priority=$(echo -e "$priority\n$rep")
35 fi
36 done
38 priority=$(echo "$priority" | sed '/^$/d' | \
39 while read line; do
40 case $line in
41 (main) echo "$PKGS_DB";;
42 (*) echo "$PKGS_DB/undigest/$line";;
43 esac
44 done)
45 }
50 time="$(date +%s)"
52 # Recharge packages databases (if necessary) (respects already exported "root" value)
53 tazpkg recharge >&2
55 echo -n > "$UP_LIST"
56 blocked_counter=$(mktemp)
57 tmp_up_list=$(mktemp)
59 look_for_priority
60 repo_number=1
61 for repo in $priority; do
62 if [ "$repo" == "$PKGS_DB" ]; then
63 repo_name='Main'
64 else
65 repo_name="$(basename "$repo")"
66 fi
68 [ ! -f "$repo/packages.info" ] && continue
69 {
70 cat "$BLOCKED" | awk '{printf "%s\t%s\n", $1, "b"}'
71 cat "$PKGS_DB/installed.info" | awk -F$'\t' '{printf "%s\t%s\t%s\t%s\n", $1, "i", $2, $9}'
72 cat "$repo/packages.info" | awk -F$'\t' '{printf "%s\t%s\t%s\t%s\n", $1, "p", $2, $9}'
73 } | sort -t$'\t' -k1,1 | awk -F$'\t' \
74 -vnewbuild="$(_ 'New build')" -vcolornewbuild="$(emsg '<c 34>')" \
75 -vnewver='→ ' -vcolornewver="$(emsg '<c 32>')" \
76 -vblocked=" ($(_ 'Blocked'))" -vcolorblocked="$(emsg '<c 31>')" \
77 -vcolor0="$(emsg '</c>')" \
78 -vreponum="$repo_number" -vreponame="$repo_name" \
79 -vuplist="$UP_LIST" -vblocked_counter="$blocked_counter" \
80 '{
82 if ($1 != p) {
83 if (vi && vp) {
84 bb = (b=="") ? "i" : "b"
85 if ("" vi != vp) { # important: compare as strings
86 startc = (b=="") ? colornewver : colorblocked;
87 printf "%s\t%s\t%s\t%s\t", p, vi, reponum, reponame;
88 printf "%s%s%s%s%s\t%s\n", startc, newver, vp, b, color0, bb;
89 if (b=="")
90 print p >> uplist;
91 else
92 printf 1 >> blocked_counter;
93 } else if (mi != mp) {
94 startc = (b=="") ? colornewbuild : colorblocked;
95 printf "%s\t%s\t%s\t%s\t", p, vi, reponum, reponame;
96 printf "%s%s%s%s\t%s\n", startc, newbuild, b, color0, bb;
97 if (b=="")
98 print p >> uplist;
99 else
100 printf 1 >> blocked_counter;
101 }
102 }
103 p = $1; b = b1 = b2 = vi = mi = vp = mp = "";
104 }
105 if ($2 == "b") { b = blocked; b1 = bl1; b2 = bl2; }
106 if ($2 == "i") { vi = $3; mi = $4; }
107 if ($2 == "p") { vp = $3; mp = $4; }
108 }' >> "$tmp_up_list"
110 repo_number=$((repo_number + 1))
112 done
114 case "$output" in
115 html)
116 cat <<EOT
117 <table class="wide zebra">
118 <thead>
119 <tr><td>$(_ 'Package')</td><td>$(_ 'Repository')</td><td>$(_ 'Version')</td><td>$(_ 'Status')</td></tr>
120 </thead>
121 <tbody>
122 EOT
123 sort -t$'\t' -k1,3 "$tmp_up_list" | awk -F$'\t' '{
124 if($4=="Main"){repo_icon="slitaz"}else{repo_icon="web"}
125 if($6=="b"){data_icon="pkgib"}else{data_icon="pkgi"}
127 printf "<tr><td><input type=\"checkbox\" name=\"pkg\" value=\"%s\"/>", $1;
128 printf "<a data-icon=\"%s\" href=\"?info=%s\">%s</a></td>", data_icon, $1, $1;
129 printf "<td><span data-icon=\"%s\">%s</span></td>", repo_icon, $4;
130 printf "<td>%s</td>", $2;
131 printf "<td>%s</td></tr>\n", $5;
132 }'
133 echo '</tbody></table>' ;;
134 *)
135 emsg "<n>$(_ 'Package')<i 26>$(_ 'Repository')<i 38>$(_ 'Version')<i 49>$(_ 'Status')<->"
136 sort -t$'\t' -k1,3 "$tmp_up_list" | awk -F$'\t' \
137 '{printf "%-24s %-11s %-10s %s\n", $1, $4, $2, $5}';;
138 esac
140 sed -i /^$/d "$UP_LIST"
141 upnb=$(wc -l < "$UP_LIST")
142 pkgs=$(wc -l < "$PKGS_DB/installed.info")
143 time=$(($(date +%s) - $time))
144 if [ "$upnb" -eq 0 ]; then
145 install="n"
146 _ 'System is up-to-date...'
147 else
148 blocked_count=$(wc -m < "$blocked_counter")
150 blocked=$(_p \
151 '%s blocked' \
152 '%s blocked' "$blocked_count" \
153 "$blocked_count")
155 footer "$(_p \
156 'You have %s available upgrade (%s)' \
157 'You have %s available upgrades (%s)' "$upnb" \
158 "$upnb" "$blocked")"
159 fi
160 emsg "$(_p \
161 '%s installed package scanned in %ds' \
162 '%s installed packages scanned in %ds' "$pkgs" \
163 "<c 32>$pkgs</c>" "$time")"
166 # Clean
167 rm "$blocked_counter" "$tmp_up_list"
169 # Pkgs to upgrade ? Skip, let install them all, or ask user
170 [ -n "$check" ] && exit 0
172 if [ "$upnb" -gt 0 ]; then
173 if [ -n "$install" ]; then
174 answer=0
175 else
176 confirm "$(_ 'Do you wish to install them now? (y/N)')"
177 answer=$?
178 fi
179 case "$answer" in
180 0)
181 for pkg in $(cat "$UP_LIST"); do
182 echo 'y' | tazpkg -gi "$pkg" --forced #--reason="upgrade"
183 done
184 # List is generated each time and must be cleaned so
185 # tazpkg-notify doesn't find upgrades anymore.
186 rm "$UP_LIST"; touch "$UP_LIST" ;;
187 *)
188 _ 'Leaving without any upgrades installed.'
189 newline
190 exit 0 ;;
191 esac
192 fi
193 newline