overdue commit lots of changes
[buildscripts] / go
diff --git a/go b/go
index ddda94588f47e3817ce00ad3105c9865bc3fe9aa..354b92e3ae3ecc8c0edb7554236362926cf837ee 100755 (executable)
--- a/go
+++ b/go
@@ -1,24 +1,89 @@
 #!/bin/bash
-# Copyright (C) 2019 Ian Kelling
-# SPDX-License-Identifier: AGPL-3.0-or-later
+# I, Ian Kelling, follow the GNU license recommendations at
+# https://www.gnu.org/licenses/license-recommendations.en.html. They
+# recommend that small programs, < 300 lines, be licensed under the
+# Apache License 2.0. This file contains or is part of one or more small
+# programs. If a small program grows beyond 300 lines, I plan to switch
+# its license to GPL.
+
+# Copyright 2024 Ian Kelling
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+#     http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 
 # usage: no args, run to install latest go.
 
 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
+source /usr/local/lib/bash-bear
+
+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; }
 
 
+if [[ ! -d /a/opt/go.git ]]; then
+  mkdir -p /a/opt
+  cd /a/opt
+  git clone --bare https://go.googlesource.com/go
+fi
+
 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 ))
+  fetch_mtime=$(stat -c %Y FETCH_HEAD)
+  if [[ ! $fetch_mtime ]]; then
+    err failed to get output from stat -c %Y FETCH_HEAD
+    exit 1
+  fi
+  # no need to check for updates on go more than once a day
+  if (( fetch_mtime > 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
+  mkdir -p ~/.local
   touch ~/.local/gofetch
 
   vers=($(git tag | sort -Vr | grep -E '^go[0-9.]+$' | head))
@@ -27,7 +92,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,18 +107,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
-
-  shopt -s nullglob
-  for x in go*.tar.gz; do
-    if [[ $x == $f ]]; then continue; fi
-    rm -fv $x
-  done
-
 fi
 
+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
 
-go get -u mvdan.cc/fdroidcl
+for x in go*.tar.gz; do
+  if [[ $x == $f ]]; then continue; fi
+  rm -fv $x
+done