From 8f404fb26fdf9f74f2b39bc4f98b3d29338d4839 Mon Sep 17 00:00:00 2001 From: Hari Sekhon Date: Fri, 18 Oct 2019 14:45:59 +0100 Subject: [PATCH] added git_update_repos_submodules.sh --- git_update_repos_submodules.sh | 71 ++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100755 git_update_repos_submodules.sh diff --git a/git_update_repos_submodules.sh b/git_update_repos_submodules.sh new file mode 100755 index 00000000..dee9850f --- /dev/null +++ b/git_update_repos_submodules.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash +# vim:ts=4:sts=4:sw=4:et +# +# Author: Hari Sekhon +# Date: 2016-01-17 12:14:06 +0000 (Sun, 17 Jan 2016) +# +# https://github.com/harisekhon/bash-tools +# +# License: see accompanying Hari Sekhon LICENSE file +# +# If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help improve or steer this or other code I publish +# +# https://www.linkedin.com/in/harisekhon +# + +set -euo pipefail +[ -n "${DEBUG:-}" ] && set -x +srcdir="$(cd "$(dirname "$0")" && pwd)" + +git_url="${GIT_URL:-https://github.com}" + +git_base_dir=~/github + +mkdir -pv "$git_base_dir" + +cd "$git_base_dir" + +repofile="$srcdir/setup/repolist.txt" + +if [ $# -gt 0 ]; then + repolist="$*" +else + repolist="${*:-${REPOS:-}}" + if [ -n "$repolist" ]; then + : + elif [ -f "$repofile" ]; then + echo "processing repos from file: $repofile" + repolist="$(sed 's/#.*//; /^[[:space:]]*$/d' < "$repofile")" + else + echo "fetching repos from GitHub repo list" + repolist="$(curl -sL https://raw.githubusercontent.com/HariSekhon/bash-tools/master/setup/repolist.txt | sed 's/#.*//')" + fi +fi + +run(){ + local repolist="$*" + echo "Updating Git submodules" + echo + for repo in $repolist; do + repo_dir="${repo##*/}" + repo_dir="${repo_dir##*:}" + repo="${repo%%:*}" + if ! echo "$repo" | grep -q "/"; then + repo="HariSekhon/$repo" + fi + if ! [ -d "$repo_dir" ]; then + git clone "$git_url/$repo" "$repo_dir" + fi + pushd "$repo_dir" + # make update does git pull but if that mechanism is broken then this first git pull will allow the repo to self-fix itself + git pull + git submodule update --init --remote + for submodule in $(git submodule | awk '{print $2}'); do + echo "committing latest hashref for submodule $submodule" + git ci -m "updated submodule $submodule" || : + done + popd + done +} + +run "$repolist"