#!/bin/sh -e # # updates_available: calculate and cache the number of updates available # # Copyright (C) 2008 Canonical Ltd. # Copyright (C) 2011-2014 Dustin Kirkland # # Authors: Dustin Kirkland <kirkland@byobu.org> # # 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 flock="$1.lock" # 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. # Ensure that no more than one of these run at a given time if [ -x /usr/lib/update-notifier/apt-check ]; then # If apt-check binary exists, use it flock -xn "$flock" /usr/lib/update-notifier/apt-check 2>&1 | awk '-F;' 'END { print $1, $2 }' >"$mycache" 2>/dev/null & elif eval $BYOBU_TEST apt-get >/dev/null; then # If apt-get exists, use it flock -xn "$flock" apt-get -s -o Debug::NoLocking=true upgrade | grep -c ^Inst >$mycache 2>/dev/null & elif eval $BYOBU_TEST pkcon >/dev/null; then # use packagekit to show list of packages LC_ALL=C flock -xn "$flock" pkcon get-updates -p | awk '/^Results:$/ { start=NR }; /^Security/ { security++ }; END { if (!/There are no updates available at this time./) { print NR-start, security }}' > "$mycache" 2>/dev/null & elif eval $BYOBU_TEST zypper >/dev/null; then # If zypper exists, use it flock -xn "$flock" zypper --no-refresh lu --best-effort | grep -c 'v |' >$mycache 2>/dev/null & elif eval $BYOBU_TEST yum >/dev/null; then # If yum exists, use it # TODO: We need a better way of counting updates available from a RH expert flock -xn "$flock" yum list updates -q | grep -vc "Updated Packages" >$mycache 2>/dev/null & elif eval $BYOBU_TEST pacman >/dev/null; then # If pacman (Archlinux) exists, use it LC_ALL=C flock -xn "$flock" pacman -Sup | grep -vc "^\(::\| \)" >$mycache 2>/dev/null & elif eval $BYOBU_TEST brew >/dev/null; then # If homebrew (Mac OSX) exists, use it, also background if flock exists if eval $BYOBU_TEST flock; then flock -xn "$flock" brew outdated | wc -l >$mycache 2>/dev/null & else brew outdated | wc -l >$mycache & fi 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 eval $BYOBU_TEST 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 eval $BYOBU_TEST pacman >/dev/null; then # Archlinux local db for db in /var/lib/pacman/sync/*.db; do [ "$db" -nt "$mycache" ] && return 0 done return 1 elif eval $BYOBU_TEST brew >/dev/null; then # Mac OSX # check if any new versions have been installed since # we last cached. this may not recognize formulae # installed with HEAD for f in $(brew --prefix)/Cellar/*; do [ "$f" -nt "$mycache" ] && return 0 done # nothing new has been installed, so check wether the # formulae database was updated [ "$(brew --prefix)/Library/Formula" -nt "$mycache" ] return $? fi return 1 } __updates_available_detail() { if eval $BYOBU_TEST 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
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
include | Folder | 0755 |
|
|
apport | File | 1.51 KB | 0755 |
|
arch | File | 916 B | 0755 |
|
battery | File | 4.1 KB | 0755 |
|
color | File | 1.04 KB | 0755 |
|
cpu_count | File | 1.03 KB | 0755 |
|
cpu_freq | File | 1.84 KB | 0755 |
|
cpu_temp | File | 1.79 KB | 0755 |
|
custom | File | 1.88 KB | 0755 |
|
date | File | 990 B | 0755 |
|
disk | File | 1.8 KB | 0755 |
|
disk_io | File | 2.92 KB | 0755 |
|
distro | File | 1.04 KB | 0755 |
|
ec2_cost | File | 4.21 KB | 0755 |
|
entropy | File | 1.06 KB | 0755 |
|
fan_speed | File | 1.85 KB | 0755 |
|
hostname | File | 1.3 KB | 0755 |
|
ip_address | File | 3.02 KB | 0755 |
|
load_average | File | 1.1 KB | 0755 |
|
logo | File | 3.92 KB | 0755 |
|
File | 1.31 KB | 0755 |
|
|
memory | File | 2.61 KB | 0755 |
|
menu | File | 1.61 KB | 0755 |
|
network | File | 3.1 KB | 0755 |
|
processes | File | 1.13 KB | 0755 |
|
raid | File | 1.4 KB | 0755 |
|
rcs_cost | File | 3.55 KB | 0755 |
|
reboot_required | File | 2.15 KB | 0755 |
|
release | File | 1.83 KB | 0755 |
|
services | File | 2.08 KB | 0755 |
|
session | File | 1.28 KB | 0755 |
|
swap | File | 1.75 KB | 0755 |
|
time | File | 1.06 KB | 0755 |
|
time_binary | File | 4.18 KB | 0755 |
|
time_utc | File | 960 B | 0755 |
|
trash | File | 1.13 KB | 0755 |
|
updates_available | File | 5.03 KB | 0755 |
|
uptime | File | 1.64 KB | 0755 |
|
users | File | 1.51 KB | 0755 |
|
whoami | File | 959 B | 0755 |
|
wifi_quality | File | 1.85 KB | 0755 |
|