spk annotate spk-up @ rev 92
spk-up: small cosmetic fix
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Fri May 25 16:01:20 2012 +0200 (2012-05-25) |
parents | 75dbce631b42 |
children | f59ca5e10f5e |
rev | line source |
---|---|
pankso@81 | 1 #!/bin/sh |
pankso@81 | 2 # |
pankso@81 | 3 # Spk-up - Update packages. Read the README before adding or |
pankso@81 | 4 # modifing any code in spk! |
pankso@81 | 5 # |
pankso@81 | 6 # Copyright (C) SliTaz GNU/Linux - BSD License |
pankso@81 | 7 # Author: See AUTHORS files |
pankso@81 | 8 # |
pankso@81 | 9 . /usr/lib/slitaz/libspk.sh |
pankso@81 | 10 |
pankso@81 | 11 # |
pankso@81 | 12 # Functions |
pankso@81 | 13 # |
pankso@81 | 14 |
pankso@81 | 15 # Help and usage |
pankso@81 | 16 usage() { |
pankso@81 | 17 name=$(basename $0) |
pankso@81 | 18 cat << EOT |
pankso@81 | 19 |
pankso@81 | 20 $(boldify $(gettext "Usage:")) $name [packages|--options] |
pankso@81 | 21 |
pankso@81 | 22 $(gettext "Update packages lists and upgrade the system") |
pankso@81 | 23 |
pankso@81 | 24 $(boldify $(gettext "Options:")) |
pankso@81 | 25 --list $(gettext "Recharges the packages lists") |
pankso@81 | 26 --add $(gettext "Install upgrade automaticaly") |
pankso@81 | 27 --forced $(gettext "Force recharging the lists") |
pankso@81 | 28 --mirror= $(gettext "Specify a mirror to check") |
pankso@81 | 29 |
pankso@81 | 30 $(boldify $(gettext "Examples:")) |
pankso@81 | 31 $name package1 package2 |
pankso@81 | 32 $name --list --forced --mirror=main |
pankso@81 | 33 |
pankso@81 | 34 EOT |
pankso@81 | 35 exit 0 |
pankso@81 | 36 } |
pankso@81 | 37 |
pankso@81 | 38 # Headers fo system or packages update |
pankso@81 | 39 up_headers() { |
pankso@81 | 40 newline |
pankso@81 | 41 boldify $(gettext "Package") \ |
pankso@81 | 42 $(echo -n $(indent 28 $(gettext "Version"))) \ |
pankso@81 | 43 $(echo -n $(indent 48 $(gettext "Status"))) \ |
pankso@81 | 44 $(echo -n $(indent 68 $(gettext "Mirror"))) |
pankso@81 | 45 separator |
pankso@81 | 46 } |
pankso@81 | 47 |
pankso@81 | 48 # Recharges all list from one mirror or all mirrors |
pankso@81 | 49 recharge_lists() { |
pankso@81 | 50 check_root |
pankso@81 | 51 newline |
pankso@81 | 52 boldify $(gettext "Updating packages lists") |
pankso@81 | 53 separator |
pankso@81 | 54 check="$extradb/*/mirror $PKGS_DB/mirror" |
pankso@81 | 55 if [ "$mirror" ]; then |
pankso@81 | 56 check=$extradb/$mirror/mirror |
pankso@81 | 57 [ "$mirror" == "main" ] && check=$PKGS_DB/mirror |
pankso@81 | 58 fi |
pankso@81 | 59 for mirror in $check; do |
pankso@81 | 60 [ -f "$mirror" ] || continue |
pankso@81 | 61 # Skip local mirror |
pankso@81 | 62 [ ! $(readlink $(dirname $mirror)/packages.desc) ] || continue |
pankso@81 | 63 # Get want a mirror name and download url |
pankso@81 | 64 name=$(basename $(dirname $mirror)) |
pankso@81 | 65 url=$(cat $mirror) |
pankso@81 | 66 lists="packages.list packages.md5 packages.desc packages.equiv files.list.lzma" |
pankso@81 | 67 [ "$(dirname $mirror)" == "$PKGS_DB" ] && name="main" |
pankso@81 | 68 [ "$quiet" ] && quiet="-q" |
pankso@81 | 69 |
pankso@81 | 70 gettext "Checking mirror:"; colorize 34 " $name" |
pankso@81 | 71 cd $(dirname $mirror) |
pankso@81 | 72 |
pankso@81 | 73 # ID |
pankso@81 | 74 [ -f "ID" ] || echo "$$" > ID |
pankso@81 | 75 mv ID ID.bak |
pankso@81 | 76 wget -q ${url%/}/ID |
pankso@81 | 77 debug "ID: $(cat ID)" |
pankso@81 | 78 debug "ID.bak: $(cat ID.bak)" |
pankso@81 | 79 if [ $(cat ID) == $(cat ID.bak) ] && [ ! "$forced" ]; then |
pankso@81 | 80 gettext "Mirror is up-to-date"; newline |
pankso@81 | 81 continue |
pankso@81 | 82 fi |
pankso@81 | 83 |
pankso@81 | 84 # Backup and get all lists |
pankso@81 | 85 for list in $lists |
pankso@81 | 86 do |
pankso@81 | 87 [ -f "$list" ] && cp -f $list $list.bak |
pankso@81 | 88 debug "url: ${url%/}/$list" |
pankso@81 | 89 rm -f $list |
pankso@81 | 90 busybox wget $quiet ${url%/}/$list |
pankso@81 | 91 done |
pankso@81 | 92 done |
pankso@81 | 93 separator |
pankso@81 | 94 } |
pankso@81 | 95 |
pankso@81 | 96 # Repo priority: local, extras then official |
pankso@81 | 97 priority() { |
pankso@81 | 98 extras=$(ls $extradb | sed s"/local//") |
pankso@81 | 99 for i in $extras; do |
pankso@81 | 100 extras="$extradb/$i" |
pankso@81 | 101 done |
pankso@83 | 102 [ -d "$extradb/local" ] && local="$extradb/local" |
pankso@83 | 103 echo "$local $extras $PKGS_DB" |
pankso@81 | 104 } |
pankso@81 | 105 |
pankso@81 | 106 # Types: blocked, new build or new version |
pankso@81 | 107 up_type() { |
pankso@81 | 108 # Jump to next repository if pkg doesn't exists in this one. |
pankso@81 | 109 grep -q "^$PACKAGE |" $dbdesc || continue |
pankso@81 | 110 |
pankso@81 | 111 echo -n "$PACKAGE" |
pankso@81 | 112 echo -n $(indent 28 "$VERSION") |
pankso@81 | 113 |
pankso@81 | 114 # Blocked |
pankso@81 | 115 if $(grep -qs "^$PACKAGE" $blocked); then |
pankso@81 | 116 blocked_count=$(($blocked_count + 1)) |
pankso@81 | 117 echo -n $(colorize 31 $(indent 48 $(gettext "Blocked"))) |
pankso@81 | 118 indent 68 "$reponame" |
pankso@81 | 119 break |
pankso@81 | 120 fi |
pankso@81 | 121 |
pankso@81 | 122 new=$(grep "^$PACKAGE |" $dbdesc | awk '{print $3}') |
pankso@81 | 123 |
pankso@81 | 124 if [ "$VERSION" == "$new" ]; then |
pankso@81 | 125 build_count=$(($build_count + 1)) |
pankso@81 | 126 echo -n $(colorize 34 $(indent 48 $(gettext "New build"))) |
pankso@81 | 127 else |
pankso@81 | 128 echo -n $(colorize 32 $(indent 48 $(gettext "New") $new)) |
pankso@81 | 129 fi |
pankso@81 | 130 indent 68 "$reponame" |
pankso@81 | 131 echo "$PACKAGE" >> $pkgsup |
pankso@81 | 132 } |
pankso@81 | 133 |
pankso@81 | 134 # Check if we have an upgrade for a package |
pankso@81 | 135 check_pkgup() { |
pankso@81 | 136 unset_receipt |
pankso@81 | 137 . $pkg/receipt |
pankso@82 | 138 localdb=$extradb/local |
pankso@81 | 139 sum=$(fgrep " $PACKAGE-${VERSION}$EXTRAVERSION.tazpkg" \ |
pankso@81 | 140 $installed.$SUM | awk '{print $1}') |
pankso@81 | 141 |
pankso@81 | 142 # Skip up-to-date local packages |
pankso@83 | 143 if [ -d "$localdb" ] && fgrep -q "$sum $PACKAGE-" $localdb/packages.$SUM; then |
pankso@82 | 144 reponame=$(gettext "Local") |
pankso@82 | 145 return 0 |
pankso@81 | 146 fi |
pankso@81 | 147 |
pankso@81 | 148 for repo in $(priority); do |
pankso@81 | 149 dbdesc=$repo/packages.desc |
pankso@81 | 150 dbsum=$repo/packages.$SUM |
pankso@81 | 151 |
pankso@82 | 152 # Mirror name |
pankso@82 | 153 case $repo in |
pankso@82 | 154 $PKGS_DB) reponame=$(gettext "Official") ;; |
pankso@82 | 155 *) reponame=$(gettext "Extra") ;; |
pankso@82 | 156 esac |
pankso@82 | 157 # Overwrite: Local have priority |
pankso@83 | 158 if [ -d "$localdb" ] && fgrep -q "$sum $PACKAGE-" $localdb/packages.$SUM; then |
pankso@82 | 159 reponame=$(gettext "Local") |
pankso@82 | 160 fi |
pankso@82 | 161 |
pankso@81 | 162 # Sum match or not ? |
pankso@81 | 163 if ! fgrep -q "$sum $PACKAGE-" $dbsum; then |
pankso@81 | 164 up_type |
pankso@81 | 165 break |
pankso@81 | 166 fi |
pankso@81 | 167 done |
pankso@81 | 168 } |
pankso@81 | 169 |
pankso@81 | 170 # Log and install an upgradable package. |
pankso@81 | 171 install_up() { |
pankso@81 | 172 mirrored_pkg $pkg |
pankso@81 | 173 vers=$(echo "$mirrored" | awk '{print $3}') |
pankso@81 | 174 mkdir -p $logdir/$pkg |
pankso@81 | 175 echo "$(date '+%Y-%m-%d %H:%M') : Upgrade to $vers" >> $logdir/$pkg/up.log |
pankso@81 | 176 spk-add $pkg --forced |
pankso@81 | 177 } |
pankso@81 | 178 |
pankso@81 | 179 # |
pankso@81 | 180 # Handle packages and --options |
pankso@81 | 181 # |
pankso@81 | 182 |
pankso@81 | 183 count=0 |
pankso@81 | 184 |
pankso@81 | 185 for arg in $@ |
pankso@81 | 186 do |
pankso@81 | 187 case "$arg" in |
pankso@81 | 188 *usage|*help) usage ;; |
pankso@92 | 189 --list) |
pankso@92 | 190 recharge_lists |
pankso@92 | 191 newline && exit 0 ;; |
pankso@81 | 192 --*) continue ;; |
pankso@81 | 193 *) |
pankso@81 | 194 pkg=$arg |
pankso@81 | 195 system=no |
pankso@81 | 196 [ "$count" == 0 ] && up_headers |
pankso@81 | 197 if [ -f "$installed/$pkg/receipt" ]; then |
pankso@81 | 198 count=$(($count +1)) |
pankso@81 | 199 cd $installed |
pankso@82 | 200 . $pkg/receipt |
pankso@81 | 201 check=$(check_pkgup) |
pankso@81 | 202 if [ "$check" != "" ]; then |
pankso@81 | 203 echo "$check" |
pankso@81 | 204 [ "$add" ] && install_up |
pankso@81 | 205 else |
pankso@82 | 206 echo -n "$pkg" |
pankso@82 | 207 echo -n $(indent 28 "$VERSION") |
pankso@82 | 208 echo -n $(colorize 32 $(indent 48 $(gettext "up-to-date"))) |
pankso@82 | 209 check_pkgup |
pankso@82 | 210 indent 68 "$reponame" |
pankso@81 | 211 fi |
pankso@81 | 212 fi ;; |
pankso@81 | 213 esac |
pankso@81 | 214 done |
pankso@81 | 215 |
pankso@81 | 216 # Skip system-wide upgrade if some packages was updated individually. |
pankso@81 | 217 if [ "$system" ]; then |
pankso@81 | 218 [ "$add" ] || newline |
pankso@81 | 219 exit 0 |
pankso@81 | 220 fi |
pankso@81 | 221 |
pankso@81 | 222 # |
pankso@81 | 223 # Check all mirrors list and upgrade system. |
pankso@81 | 224 # |
pankso@81 | 225 |
pankso@81 | 226 time=$(date +%s) |
pankso@81 | 227 build_count=0 |
pankso@81 | 228 blocked_count=0 |
pankso@81 | 229 |
pankso@87 | 230 recharge_lists |
pankso@81 | 231 up_headers |
pankso@81 | 232 cd $installed |
pankso@81 | 233 newline > $pkgsup |
pankso@81 | 234 |
pankso@81 | 235 # Check all installed packages |
pankso@81 | 236 for pkg in * |
pankso@81 | 237 do |
pankso@81 | 238 check_pkgup |
pankso@81 | 239 done |
pankso@81 | 240 |
pankso@81 | 241 # Remove empty line and count |
pankso@81 | 242 sed -i /^$/d $pkgsup |
pankso@81 | 243 upnb=$(cat $pkgsup | wc -l) |
pankso@81 | 244 pkgs=$(ls | wc -l) |
pankso@81 | 245 time=$(($(date +%s) - $time)) |
pankso@81 | 246 |
pankso@84 | 247 if [ "$upnb" == 0 ] && [ "$blocked_count" == 0 ]; then |
pankso@81 | 248 gettext "System is up-to-date..."; newline |
pankso@81 | 249 fi |
pankso@81 | 250 separator |
pankso@81 | 251 echo -n "$pkgs "; gettext "installed packages scanned in"; echo " ${time}s" |
pankso@81 | 252 newline |
pankso@81 | 253 |
pankso@81 | 254 # Summary |
pankso@81 | 255 boldify $(gettext "Packages upgrade summary") |
pankso@81 | 256 separator |
pankso@81 | 257 gettext "New version :"; colorize 32 " $(($upnb - $build_count))" |
pankso@81 | 258 gettext "New build :"; colorize 34 " $build_count" |
pankso@81 | 259 gettext "Blocked :"; colorize 31 " $blocked_count" |
pankso@81 | 260 separator |
pankso@81 | 261 newline |
pankso@81 | 262 |
pankso@81 | 263 # Pkgs to upgrade ? Skip, let --add/--install them all or ask user |
pankso@81 | 264 if [ "$upnb" -gt 0 ]; then |
pankso@81 | 265 if [ "$add" ] || [ "$install" ]; then |
pankso@81 | 266 continue |
pankso@81 | 267 else |
pankso@81 | 268 gettext "Do you wish to upgrade now" |
pankso@81 | 269 if ! confirm; then |
pankso@81 | 270 gettext "Upgrade cancelled" |
pankso@81 | 271 echo -e "\n" && exit 0 |
pankso@81 | 272 fi |
pankso@81 | 273 fi |
pankso@81 | 274 # Install and log all upgrade |
pankso@81 | 275 for pkg in $(cat $pkgsup) |
pankso@81 | 276 do |
pankso@81 | 277 install_up |
pankso@81 | 278 done |
pankso@81 | 279 # List is generated each time and must be cleaned so |
pankso@81 | 280 # tazpkg-notify dont find upgrade anymore. |
pankso@81 | 281 rm $pkgsup && touch $pkgsup |
pankso@81 | 282 newline |
pankso@81 | 283 gettext "Handeled upgrades:"; colorize 32 " $upnb" |
pankso@81 | 284 newline |
pankso@81 | 285 fi |
pankso@81 | 286 |
pankso@81 | 287 exit 0 |