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