0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2024-12-30 22:34:01 -05:00

Improved pre-commit hook to automatically remove submodules (#21222)

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.
This commit is contained in:
Chris Raible 2024-10-12 11:40:31 +01:00 committed by GitHub
parent b7409ff3d2
commit 401ec7d14d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -25,20 +25,23 @@ MOD_SUBMODULES=$(git diff --cached --name-only --ignore-submodules=none | grep -
echo -e "Checking submodules ${grey}(pre-commit hook)${no_color} "
# If no modified submodules, exit with status code 0, else prompt the
# user and exit accordingly
# If no modified submodules, exit with status code 0, else remove them and continue
if [[ -n "$MOD_SUBMODULES" ]]; then
echo "Submodules to be committed:"
echo " (use \"git reset HEAD <file>...\" to unstage)"
echo
echo -e "${grey}Removing submodules from commit...${no_color}"
for SUB in $MOD_SUBMODULES
do
echo -e "\t${green}modified:\t$SUB${no_color}"
git reset --quiet HEAD "$SUB"
echo -e "\t${grey}removed:\t$SUB${no_color}"
done
echo
echo -e "${red}Aborting commit due to submodule update. Please unstage the submodule(s) and commit again.${no_color}"
exit 1
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