-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrefresh-submodules.sh
executable file
·91 lines (73 loc) · 3.15 KB
/
refresh-submodules.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/usr/bin/env bash
PROJECT_DIR=$( git rev-parse --show-toplevel )
#################################
## For `SUBMODULE_CONFIGS` use the following format to specify submodule configurations:
##
## [SUBMODULE_NAME|SUBMODULE_BRANCH|SUBMODULE_URL[|SUBMODULE_DIRECTORY]]
##
## Note `SUBMODULE_DIRECTORY` is optional.
## if not specified, it will default to "${SUBMODULE_NAME}/"
##
SUBMODULE_CONFIGS="
ansible|ansible|[email protected]:lj020326/ansible-datacenter.git
"
refresh_submodules() {
SUBMODULE_CONFIGS=$1
local GIT_LOCAL_BRANCH="$(git symbolic-ref --short HEAD)"
echo "GIT_LOCAL_BRANCH=${GIT_LOCAL_BRANCH}"
local GIT_REMOTE_AND_BRANCH=$(git rev-parse --abbrev-ref "${GIT_LOCAL_BRANCH}@{upstream}")
IFS=/ read GIT_REMOTE GIT_REMOTE_BRANCH <<< "${GIT_REMOTE_AND_BRANCH}"
##
## for each PATH iteration create a soft link back to all files found in the respective base directory (Sandbox/Prod)
##
IFS=$'\n'
for SUBMODULE_CONFIG in ${SUBMODULE_CONFIGS}
do
echo "#######################################################"
echo "#######################################################"
echo "##### Create submodule for SUBMODULE_CONFIG [$SUBMODULE_CONFIG]"
# split sub-list if available
if [[ $SUBMODULE_CONFIG == *"|"* ]]
then
# ref: https://stackoverflow.com/questions/12317483/array-of-arrays-in-bash
# split submodule info from sub-list
# SUBMODULE_CONFIG_ARRAY=(${submodule_config//:/})
IFS="|" read -a SUBMODULE_CONFIG_ARRAY <<< "$SUBMODULE_CONFIG"
SUBMODULE_NAME=${SUBMODULE_CONFIG_ARRAY[0]}
SUBMODULE_URL=${SUBMODULE_CONFIG_ARRAY[2]}
SUBMODULE_DIRECTORY="${SUBMODULE_NAME}/"
# if [[ -n "$SUBMODULE_CONFIG_ARRAY[3]" ]]; then
if [[ -v "SUBMODULE_CONFIG_ARRAY[3]" ]]; then
SUBMODULE_DIRECTORY=${SUBMODULE_CONFIG_ARRAY[3]}
fi
SUBMODULE_BASEDIR=$(dirname "${SUBMODULE_DIRECTORY}")
echo "SUBMODULE_NAME=${SUBMODULE_NAME}"
echo "SUBMODULE_URL=${SUBMODULE_URL}"
echo "SUBMODULE_BASEDIR=${SUBMODULE_BASEDIR}"
echo "SUBMODULE_DIRECTORY=${SUBMODULE_DIRECTORY}"
if [ ! -d "${SUBMODULE_BASEDIR}" ]; then
mkdir -p "${SUBMODULE_BASEDIR}"
fi
git submodule deinit -f "${SUBMODULE_NAME}" > /dev/null 2>&1 || true
git rm "${SUBMODULE_NAME}" > /dev/null 2>&1 || true
git rm --cached "${SUBMODULE_NAME}" > /dev/null 2>&1 || true
rm -fr "${SUBMODULE_DIRECTORY}"
## ref: https://stackoverflow.com/questions/55031993/git-submodule-tracking-current-branch
# git submodule add \
# -b "${GIT_REMOTE_BRANCH}" \
git submodule add \
--force \
--name "${SUBMODULE_NAME}" \
"${SUBMODULE_URL}" \
"${SUBMODULE_DIRECTORY}"
# git submodule set-branch --branch . "${SUBMODULE_NAME}"
git submodule set-branch --branch "${GIT_REMOTE_BRANCH}" "${SUBMODULE_NAME}"
git submodule update --remote
fi
done
git submodule update --init --recursive --remote
## ref: https://stackoverflow.com/questions/12641469/list-submodules-in-a-git-repository#12641787
# git config --file .gitmodules --name-only --get-regexp path
git submodule status
}
refresh_submodules "${SUBMODULE_CONFIGS}"