From 1550d2b551dd02700d4e3e1317d34f2fa25a2192 Mon Sep 17 00:00:00 2001 From: Ian Kelling Date: Sun, 11 Oct 2020 09:00:51 -0400 Subject: [PATCH] mostly indenting --- src/identify-distros | 155 ++++++++++++++++--------------- src/package-manager-abstractions | 20 +++- 2 files changed, 97 insertions(+), 78 deletions(-) diff --git a/src/identify-distros b/src/identify-distros index f9d68ff..a62889e 100644 --- a/src/identify-distros +++ b/src/identify-distros @@ -14,118 +14,123 @@ # limitations under the License. distro-name() { - local x - if [[ -f /etc/fedora-release ]]; then - echo fedora - elif [[ -e /etc/os-release ]]; then - sed -rn 's/^ID=(.*)/\1/p' /etc/os-release - elif type -p lsb_release &>/dev/null; then - # well, this is more standard, but it's 2 ms vs 200 ms - x=$(lsb_release -si); echo ${x,,} - else - echo "unknown distro" - return 1 - fi + local x + if [[ -f /etc/fedora-release ]]; then + echo fedora + elif [[ -e /etc/os-release ]]; then + sed -rn 's/^ID=(.*)/\1/p' /etc/os-release + elif type -p lsb_release &>/dev/null; then + # well, this is more standard, but it's 2 ms vs 200 ms + x=$(lsb_release -si); echo ${x,,} + else + echo "unknown distro" + return 1 + fi } distro-name-compat() { - local x=$(distro-name) - case $x in - trisquel) - echo ubuntu - ;; - *) - echo $x - ;; - esac + local x=$(distro-name) + case $x in + trisquel) + echo ubuntu + ;; + *) + echo $x + ;; + esac } distro-name-ver() { - echo `distro-name``debian-archive` + echo $(distro-name)$(debian-archive) +} + +distro-num() { + # subshell keeps environment clean + ( . /etc/os-release; echo ${VERSION_ID%%.*}; ) } debian-archive() { - isdeb || return 0 - local archive expression pri name highpri shortest - local policy="${1:-$(apt-cache policy)}" || return $? - # a = archive - # n = codename - # o = origin - # c = component (licensing component) - # l = label (Debian{,-Security,-Updates}) - local d=$(distro-name) - # goto b for archive lines we are interested in, a for lines we arent - # print priority + archive name. priority is in - # the previous line from the archive line. - # case insensitive, because $d is lower and we are matching with first char upper - read -rd '' expression < ${#name} )); then - shortest=$name - fi - done < <(echo "$policy" | sed -rn "$expression" | sort -rn || [[ $? == 141 ]]) - echo "$shortest" + while read -r pri name; do + # in ubuntu, we get archives like flidas, flidas-updates, all the same pri, + # so just pick the shortest one. + if [[ ! $highpri ]]; then + highpri=$pri; + shortest=$name + continue + fi + if [[ $pri != $highpri ]]; then + break + fi + if (( ${#shortest} > ${#name} )); then + shortest=$name + fi + done < <(echo "$policy" | sed -rn "$expression" | sort -rn || [[ $? == 141 ]]) + echo "$shortest" } isdebian-testing() { - [[ $(debian-archive) == testing ]] + [[ $(debian-archive) == testing ]] } # I only do testing or stable. isdebian-stable() { - [[ $(debian-archive) == stable ]] + [[ $(debian-archive) == stable ]] } debian-codename() { - isdeb || return 0 - local policy="$(apt-cache policy)" || return $? - archive=$(debian-archive "$policy") - echo "$policy" | sed -rn "s/^.*a=$archive,n=([a-z]+).*/\1/p;T;q" || [[ $? == 141 ]] + isdeb || return 0 + local policy="$(apt-cache policy)" || return $? + archive=$(debian-archive "$policy") + echo "$policy" | sed -rn "s/^.*a=$archive,n=([a-z]+).*/\1/p;T;q" || [[ $? == 141 ]] } debian-codename-compat() { - local n=$(debian-codename) - case $n in - flidas) - echo xenial - ;; - etiona) - echo bionic - ;; - *) - echo $n - ;; - esac + local n=$(debian-codename) + case $n in + flidas) + echo xenial + ;; + etiona) + echo bionic + ;; + *) + echo $n + ;; + esac } isfedora() { - [[ $(distro-name) == fedora ]] + [[ $(distro-name) == fedora ]] } isdebian() { - [[ $(distro-name) == debian ]] + [[ $(distro-name) == debian ]] } isarch() { - [[ $(distro-name) == arch ]] + [[ $(distro-name) == arch ]] } isubuntu() { - [[ $(distro-name) == ubuntu ]] + [[ $(distro-name) == ubuntu ]] } istrisquel() { - [[ $(distro-name) == trisquel ]] + [[ $(distro-name) == trisquel ]] } # is debian/apt based isdeb() { command -v apt-get &>/dev/null; } diff --git a/src/package-manager-abstractions b/src/package-manager-abstractions index 9311038..dece848 100644 --- a/src/package-manager-abstractions +++ b/src/package-manager-abstractions @@ -88,11 +88,25 @@ elif command -v apt-get &>/dev/null; then esac } pupdate() { - local s f; [[ $EUID != 0 ]] && s=sudo + local now t s f cachetime limittime; [[ $EUID != 0 ]] && s=sudo # update package list if its more than an 2 hours old f=/var/cache/apt/pkgcache.bin - if [[ ! -r $f ]] \ - || (( $(( $(date +%s) - $(stat -c %Y $f ) )) > 60*60*2 )); then + if [[ -r $f ]]; then + cachetime=$(stat -c %Y $f ) + else + cachetime=0 + fi + now=$(date +%s) + limittime=$(( now - 60*60*2 )) + for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.list; do + if [[ -r $f ]]; then + t=$(stat -c %Y $f ) + if (( t > limittime )); then + limittime=$t + fi + fi + done + if (( cachtime > limittime )); then $s apt-get update fi } -- 2.30.2