mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-11-26 13:35:16 +03:00
401ec7d14d
no issue # Before The pre-commit hook would abort the commit if any submodules were staged for commit, and prompt the user to manually un-stage them and retry the commit. # Now The pre-commit hook automatically un-stages any staged submodules, then allows the commit to proceed. # Why? This was a daily annoyance that caused many common git commands to abort, and required manual un-staging of the submodules before retrying the commit: - `git commit -a` - `git add . && git commit` - `git add -A && git commit` If we ever _do_ need to commit submodules, we can always add them back and run `git commit --no-verify` to accomplish that (which we would have needed to do before regardless). This should accomplish the same goal of not allowing submodules to be committed, but reduce the day to day friction of making commits in Ghost.
49 lines
1.4 KiB
Bash
Executable File
49 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Modified from https://github.com/chaitanyagupta/gitutils
|
|
|
|
[ -n "$CI" ] && exit 0
|
|
|
|
GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
if [ "$GIT_BRANCH" = "main" ]; then
|
|
yarn lint-staged --relative
|
|
lintStatus=$?
|
|
|
|
if [ $lintStatus -ne 0 ]; then
|
|
echo "❌ Linting failed"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
green='\033[0;32m'
|
|
no_color='\033[0m'
|
|
grey='\033[0;90m'
|
|
red='\033[0;31m'
|
|
|
|
ROOT_DIR=$(git rev-parse --show-cdup)
|
|
SUBMODULES=$(grep path ${ROOT_DIR}.gitmodules | sed 's/^.*path = //')
|
|
MOD_SUBMODULES=$(git diff --cached --name-only --ignore-submodules=none | grep -F "$SUBMODULES")
|
|
|
|
echo -e "Checking submodules ${grey}(pre-commit hook)${no_color} "
|
|
|
|
# If no modified submodules, exit with status code 0, else remove them and continue
|
|
if [[ -n "$MOD_SUBMODULES" ]]; then
|
|
echo -e "${grey}Removing submodules from commit...${no_color}"
|
|
for SUB in $MOD_SUBMODULES
|
|
do
|
|
git reset --quiet HEAD "$SUB"
|
|
echo -e "\t${grey}removed:\t$SUB${no_color}"
|
|
done
|
|
echo
|
|
echo -e "${grey}Submodules removed from commit, continuing...${no_color}"
|
|
|
|
# If there are no changes to commit after removing submodules, abort to avoid an empty commit
|
|
if output=$(git status --porcelain) && [ -z "$output" ]; then
|
|
echo -e "nothing to commit, working tree clean"
|
|
exit 1
|
|
fi
|
|
exit 0
|
|
else
|
|
echo "No submodules in commit, continuing..."
|
|
exit 0
|
|
fi
|