#!/bin/sh -e
#
# updates_available: calculate and cache the number of updates available
# Copyright (C) 2008 Canonical Ltd.
#
# Authors: Dustin Kirkland <kirkland@canonical.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
PKG="byobu"
color 2>/dev/null || color() { true; }
if [ "$1" = "--detail" -o "$1" = "--short" ]; then
if which yaourt >/dev/null; then
detail=`yaourt -Qu`
if [ "$1" = "--detail" ]; then
printf "$detail"
else
short=`printf "$detail" | wc -l`
printf "$short"
fi
fi
exit 0
fi
print_updates() {
u=$1
s=$2
if [ -n "$u" ]; then
if [ "$u" -gt 0 ]; then
printf "$(color b r W)%d$(color -)$(color r W)!" "$u"
if [ -n "$s" ]; then
if [ "$s" -gt 0 ]; then
printf "!"
fi
fi
printf "$(color -) "
fi
fi
}
update_cache() {
mycache=$1
# Now we actually have to do hard computational work to calculate updates.
# Let's try to be "nice" about it:
renice 10 $$ >/dev/null 2>&1 || true
ionice -c3 -p $$ >/dev/null 2>&1 || true
# These are very computationally intensive processes.
# Background this work, have it write to the cache files,
# and let the next cache check pick up the results.
if which yaourt >/dev/null; then
yaourt -Qu | wc -l > $mycache &
fi
}
PKG="byobu"
# The following is somewhat Ubuntu and Debian specific (apt).
# I would welcome contributions from other distros to make this
# more distro-agnostic.
[ -d "/var/run/screen/S-$USER" ] && DIR="/var/run/screen/S-$USER" || DIR="$HOME/.byobu"
mycache="$DIR/$PKG.updates-available"
# If mycache is present, use it
[ -r $mycache ] && print_updates `grep "^[0-9]" $mycache | sed "s/ .*$//"`
# Update the cache if necessary
if [ ! -e "$mycache" ] || [ "/var/lib/pacman" -nt "$mycache" ] || [ "/var/lib/pacman/sync" -nt "$mycache" ]; then
# If apt is newer than mycache, background an update now
update_cache "$mycache"
fi