-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathgit_commit_all_submodules.sh
More file actions
executable file
·56 lines (51 loc) · 2.32 KB
/
git_commit_all_submodules.sh
File metadata and controls
executable file
·56 lines (51 loc) · 2.32 KB
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
#!/bin/bash
# ORIGINAL FILE: https://github.com/mtransitapps/commons/tree/master/shared-overwrite
mapfile -t SUBMODULES < <(git submodule foreach --quiet 'basename "$(pwd)"');
echo "${#SUBMODULES[@]} submodule(s): ";
COMMIT_MESSAGE_TITLE_START="Sync code";
if [[ -n "${CI}" ]]; then
COMMIT_MESSAGE_TITLE_START="CI: $COMMIT_MESSAGE_TITLE_START";
fi
COMMIT_MESSAGE_TITLE="";
COMMIT_MESSAGE_BODY="";
ONE_COMMIT_MESSAGE="";
COMMITS=0;
for SUBMODULE in "${SUBMODULES[@]}"; do
SUBMODULE_CURRENT_SHA=$(git ls-tree HEAD "$SUBMODULE" | awk '{ print $3 }')
SUBMODULE_LATEST_SHA=$(git -C "$SUBMODULE" rev-parse HEAD);
if [[ "$SUBMODULE_CURRENT_SHA" == "$SUBMODULE_LATEST_SHA" ]]; then
echo "- '$SUBMODULE': no change.";
else
mapfile -t SUBMODULE_CHANGES < <(git -C "$SUBMODULE" log --oneline --pretty=format:"%s" "$SUBMODULE_CURRENT_SHA"..HEAD);
echo "- '$SUBMODULE': ${#SUBMODULE_CHANGES[@]} changes: ";
for SUBMODULE_CHANGE in "${SUBMODULE_CHANGES[@]}"; do
echo " - '$SUBMODULE_CHANGE'";
# Replace PR references (#123) with full GitHub URLs
SUBMODULE_CHANGE_WITH_URLS=$(printf '%s' "$SUBMODULE_CHANGE" | sed -E "s|\(#([0-9]+)\)|https://github.com/mtransitapps/$SUBMODULE/pull/\1|g");
COMMIT_MESSAGE_BODY+="\n- $SUBMODULE: $SUBMODULE_CHANGE_WITH_URLS";
ONE_COMMIT_MESSAGE="$COMMIT_MESSAGE_TITLE_START from '$SUBMODULE': $SUBMODULE_CHANGE_WITH_URLS";
((COMMITS++));
done
if [[ -z $COMMIT_MESSAGE_TITLE ]]; then
COMMIT_MESSAGE_TITLE+="$COMMIT_MESSAGE_TITLE_START from '$SUBMODULE'";
else
COMMIT_MESSAGE_TITLE+=" & '$SUBMODULE'";
fi
git add "$SUBMODULE";
fi
done
echo "$COMMITS change(s) to commit.";
if [[ "${COMMITS}" -eq 1 ]]; then
echo "--------------------------------------------------------------------------------";
echo -e "$ONE_COMMIT_MESSAGE";
echo "--------------------------------------------------------------------------------";
printf "$ONE_COMMIT_MESSAGE" | git commit -F -
elif [[ "${COMMITS}" -gt 1 ]]; then
COMMIT_MESSAGE="$COMMIT_MESSAGE_TITLE:\n$COMMIT_MESSAGE_BODY";
echo "--------------------------------------------------------------------------------";
echo -e "$COMMIT_MESSAGE";
echo "--------------------------------------------------------------------------------";
printf "$COMMIT_MESSAGE" | git commit -F -
# else # 0 commits
# do nothing
fi