usage() {
echo "Usage: git cz [-a] [-h]"
echo ""
echo "Options:"
echo " -a Automatically stage all modified and deleted files before committing."
echo " -h Show this help message and exit."
exit 1
}
AUTO_STAGE=false
while getopts "ah" flag; do
case "${flag}" in
a) AUTO_STAGE=true ;;
h) usage ;;
*) usage ;;
esac
done
check_exit_status() {
if [ $? -ne 0 ]; then
echo "Aborted."
exit 1
fi
}
TYPE=$(gum choose "build" "ci" "chore" "docs" "feat" "fix" "perf" "refactor" "revert" "style" "test")
check_exit_status
SCOPE=$(gum input --placeholder "scope")
check_exit_status
test -n "$SCOPE" && SCOPE="($SCOPE)"
SUMMARY=$(gum input --value "$TYPE$SCOPE: " --placeholder "Summary of this change")
check_exit_status
DESCRIPTION=$(gum write --placeholder "Details of this change")
check_exit_status
display_text=$(printf "%s\n\n%s\n\nCommit changes?" "$SUMMARY" "$DESCRIPTION")
if gum confirm "$display_text"; then
if [ "$AUTO_STAGE" = true ]; then
git commit -am "$SUMMARY" -m "$DESCRIPTION"
else
git commit -m "$SUMMARY" -m "$DESCRIPTION"
fi
fi