catchup with lots of updates
[buildscripts] / go
diff --git a/go b/go
index 547a1345d968e48bfec6b2820c97989058247271..d948b9d0063c95c53c1cad4128a5f64abc8e8c5a 100755 (executable)
--- a/go
+++ b/go
@@ -9,16 +9,51 @@ if [ -z "$BASH_VERSION" ]; then echo "error: shell is not bash" >&2; exit 1; fi
 shopt -s inherit_errexit 2>/dev/null ||: # ignore fail in bash < 4.4
 source /a/bin/errhandle/err
 
+force=false
+case $1 in
+  -f) force=true ;;
+esac
 
 m() { printf "$pre %s\n"  "$*"; "$@"; }
 e() { printf "$pre %s\n"  "$*"; }
 err() { echo "[$(date +'%Y-%m-%d %H:%M:%S%z')]: $0: $*" >&2; }
 
+
+
 m cd /a/opt/go.git
-# don't check for updates on go more than once a day
-yesterday=$(( $(date +%s) - 60*60*24 ))
-if (( $(stat -c %Y FETCH_HEAD) < yesterday )); then
-  m git fetch
+
+up=true
+install=false
+
+if ! $force; then
+  yesterday=$(( $(date +%s) - 60*60*24 ))
+  # no need to check for updates on go more than once a day
+  if (( $(stat -c %Y FETCH_HEAD) > yesterday )); then
+    up=false
+  fi
+
+  # update will get overwritten if we dont do it on central host.
+  if [[ -e /a/bin/bash_unpublished/source-state ]]; then
+    source /a/bin/bash_unpublished/source-state
+    if [[ $HOSTNAME != "$HOST2" ]]; then
+      up=false
+    fi
+  fi
+fi
+
+shopt -s nullglob
+
+f=$(
+  for f in go*.tar.gz; do
+    echo $f
+  done | sort -Vr | head -n1
+ )
+if [[ ! $f ]]; then
+  up=true
+fi
+
+if $up; then
+  m git fetch --tags
   touch ~/.local/gofetch
 
   vers=($(git tag | sort -Vr | grep -E '^go[0-9.]+$' | head))
@@ -27,7 +62,6 @@ if (( $(stat -c %Y FETCH_HEAD) < yesterday )); then
   dl() {
     arch=$(dpkg --print-architecture)
     f=${ver}.linux-${arch}.tar.gz
-
     if [[ -e $f ]]; then
       timestamp=$(stat -c %Y $f)
     else
@@ -43,15 +77,17 @@ if (( $(stat -c %Y FETCH_HEAD) < yesterday )); then
   fi
 
   new_timestamp=$(stat -c %Y $f)
-  if [[ $timestamp != $new_timestamp || ! -e /usr/local/go/bin/go ]]; then
-    m sudo rm -rf /usr/local/go
-    m sudo tar -C /usr/local -xzf $f
+  if [[ $timestamp != $new_timestamp ]]; then
+    install=true
   fi
+fi
 
-  shopt -s nullglob
-  for x in go*.tar.gz; do
-    if [[ $x == $f ]]; then continue; fi
-    rm -fv $x
-  done
-
+if $install || [[  ! -e /usr/local/go/bin/go ]]; then
+  m sudo rm -rf /usr/local/go
+  m sudo tar -C /usr/local -xzf $f
 fi
+
+for x in go*.tar.gz; do
+  if [[ $x == $f ]]; then continue; fi
+  rm -fv $x
+done