Current Path : /usr/lib/byobu/ |
Current File : //usr/lib/byobu/updates_available |
#!/bin/sh -e # # updates_available: calculate and cache the number of updates available # # Copyright (C) 2008 Canonical Ltd. # Copyright (C) 2011 Dustin Kirkland # # Authors: Dustin Kirkland <kirkland@ubuntu.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/>. ___print_updates() { local u= s= read u s < "$1" if [ -n "$u" ]; then if [ "$u" -gt 0 ]; then color b r W; printf "%d" "$u"; color -; color r W if [ -n "$s" ] && [ "$s" -gt 0 ]; then printf "$ICON_SECURITY" else printf "$ICON_UPDATES" fi color -- elif [ "$u" = "0" ] && [ -e "$BYOBU_RUN_DIR/status.$BYOBU_BACKEND/updates_available" ]; then # Clear out byobu's status cache rm -f "$BYOBU_RUN_DIR/status.$BYOBU_BACKEND/updates_available"* fi fi } ___update_cache() { local mycache=$1 RUN_THIS_ONE= # 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. # Also, try to ensure that no more than one of these run at # a given time; install the run-one package. command -v run-this-one >/dev/null && RUN_THIS_ONE=run-this-one if [ -x /usr/lib/update-notifier/apt-check ]; then # If apt-check binary exists, use it $RUN_THIS_ONE /usr/lib/update-notifier/apt-check 2>&1 | awk '-F;' 'END { print $1, $2 }' > "$mycache" & elif command -v apt-get >/dev/null; then # If apt-get exists, use it $RUN_THIS_ONE apt-get -s -o Debug::NoLocking=true upgrade | grep -c ^Inst > $mycache & elif command -v pkcon >/dev/null; then # use packagekit to show list of packages $RUN_THIS_ONE pkcon get-updates -p | grep -c '^Package' > "$mycache" & elif command -v zypper >/dev/null; then # If zypper exists, use it $RUN_THIS_ONE zypper --no-refresh lu --best-effort | grep -c 'v |' > $mycache & elif command -v yum >/dev/null; then # If yum exists, use it # TODO: We need a better way of counting updates available from a RH expert $RUN_THIS_ONE yum list updates -q | grep -vc "Updated Packages" > $mycache & elif command -v pacman >/dev/null; then # If pacman (Archlinux) exists, use it LC_ALL=C $RUN_THIS_ONE pacman -Sup | grep -vc "^\(::\| \)" > $mycache & fi } ___update_needed() { # Checks if we need to update the cache. # TODO: add more distro local mycache=$1 # The cache doesn't exist: create it [ ! -e "$mycache" ] && return 0 if command -v apt-get >/dev/null; then # Debian/ubuntu [ "/var/lib/apt" -nt "$mycache" ] || [ "/var/lib/apt/lists" -nt "$mycache" ] return $? elif [ -e "/var/lib/PackageKit/transactions.db" ]; then [ "/var/lib/PackageKit/transactions.db" -nt "$mycache" ] return $? elif command -v pacman >/dev/null; then # Archlinux local db for db in /var/lib/pacman/sync/*.db; do [ "$db" -nt "$mycache" ] && return 0 done return 1 fi return 1 } __updates_available_detail() { if command -v apt-get >/dev/null; then local detail=`apt-get -s -o Debug::NoLocking=true upgrade` if [ "$1" = "--detail" ]; then printf "$detail" else local short=`printf "%s" "$detail" | grep -c ^Inst` printf "$short" fi fi } __updates_available() { local mycache="$BYOBU_RUN_DIR/cache.$BYOBU_BACKEND/updates-available" # If mycache is present, use it [ -r $mycache ] && ___print_updates "$mycache" # If we really need to do so (mycache doesn't exist, or the package database has changed), # background an update now ___update_needed "$mycache" && ___update_cache "$mycache" } # vi: syntax=sh ts=4 noexpandtab