mostly indenting
authorIan Kelling <iank@fsf.org>
Sun, 11 Oct 2020 13:00:51 +0000 (09:00 -0400)
committerIan Kelling <iank@fsf.org>
Sun, 11 Oct 2020 13:00:51 +0000 (09:00 -0400)
src/identify-distros
src/package-manager-abstractions

index f9d68ff95e934d6b11548b3804e9f429d40d417d..a62889ee4541f08d5c569cafc105ba3abf8520e2 100644 (file)
 # 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 <<EOF ||:
+  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 <<EOF ||:
 /o=$d/I!b a;/l=$d/I!b a;/c=main/!b a b b;
 : a;s/^ *([-0-9]+).*/\1/;h;b;
 : b;s/^.*a=([^,]+).*/ \1/;H;x;s/\n//;p
 EOF
-    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"
+  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; }
index 9311038c4f0b616d6b7ad1837d25a413edbfb3ff..dece84830169562a1217de1a7b71f019c7b866ba 100644 (file)
@@ -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
   }