diff --git a/plugins/git-commit-template/README.md b/plugins/git-commit-template/README.md index 766ef6ab1..d393000f3 100644 --- a/plugins/git-commit-template/README.md +++ b/plugins/git-commit-template/README.md @@ -1,8 +1,10 @@ # git-commit-template plugin -To better write git commit messages, we can use template to specify the desired description and type of message. +To better write git commit messages, we can use template to specify the +desired description and type of message. -To use it, add `git-commit-template` to the plugins array in your zshrc file: +To use it, add `git-commit-template` to the plugins array in your zshrc +file: ```zsh plugins=(... git-commit-template) @@ -16,7 +18,8 @@ plugins=(... git-commit-template) ## Usage -All you have to do is call the `gct` command and fill in the items that are not optional at each step to prepare the message format. +All you have to do is call the `gct` command and fill in the items that +are not optional at each step to prepare the message format. ![gct](https://raw.githubusercontent.com/ghasemdev/git-commit-template/master/images/1.png) diff --git a/plugins/git-commit-template/git-commit-template.plugin.zsh b/plugins/git-commit-template/git-commit-template.plugin.zsh index 3ddf033d9..9c6856f61 100644 --- a/plugins/git-commit-template/git-commit-template.plugin.zsh +++ b/plugins/git-commit-template/git-commit-template.plugin.zsh @@ -1,4 +1,4 @@ -function git_commit_template() { +git_commit_template() { # Check in this directory git exist if [ ! -d .git ]; then exit 1 @@ -12,7 +12,9 @@ function git_commit_template() { RESET="\033[0m" # Valid types - TYPES=("feat" "fix" "docs" "style" "refactor" "pref" "test" "build" "ci" "chore" "revert") + TYPES=("feat" "fix" "docs" "style" "refactor" + "pref" "test" "build" "ci" "chore" "revert") + NUMBERS=("1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11") # Type section @@ -21,24 +23,30 @@ function git_commit_template() { printf "${CYAN}1. feat${RESET} - A new feature.\n" printf "${CYAN}2. fix${RESET} - A bug fix.\n" printf "${CYAN}3. docs${RESET} - Documentation only changes.\n" - printf "${CYAN}4. style${RESET} - Changes that do notaffect the meaning of the code (white-space, formatting, missing semi-colons, etc).\n" - printf "${CYAN}5. refactor${RESET} - A Code change that neither fixes a bug nor adds a feature.\n" + printf "${CYAN}4. style${RESET} - Changes that do notaffect the meaning of \ +the code (white-space, formatting, missing semi-colons, etc).\n" + printf "${CYAN}5. refactor${RESET} - A Code change that neither fixes a bug \ +nor adds a feature.\n" printf "${CYAN}6. pref${RESET} - A code change that improves performance.\n" - printf "${CYAN}7. test${RESET} - Adding missing tests or correcting existing tests.\n" - printf "${CYAN}8. build${RESET} - Changes that effect the build system or external dependencies (example scopes: glup, broccoli, npm).\n" - printf "${CYAN}9. ci${RESET} - Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs).\n" - printf "${CYAN}10. chore${RESET} - Other changes that don't modify src or test files.\n" + printf "${CYAN}7. test${RESET} - Adding missing tests or correcting existing \ +tests.\n" + printf "${CYAN}8. build${RESET} - Changes that effect the build system or \ +external dependencies (example scopes: glup, broccoli, npm).\n" + printf "${CYAN}9. ci${RESET} - Changes to our CI configuration files and \ +scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs).\n" + printf "${CYAN}10. chore${RESET} - Other changes that don't modify src or test \ +files.\n" printf "${CYAN}11. revert${RESET} - Reverts a previous commit.\n\n" while :; do - read -e TYPE + read -e type_var # To lower case - TYPE=${TYPE,,} + type_var=${type_var,,} # When input type is valid loop break - if [[ " ${NUMBERS[*]} " =~ " ${TYPE} " ]]; then - TYPE="${TYPES[TYPE - 1]}" + if [[ " ${NUMBERS[*]} " =~ " ${type_var} " ]]; then + type_var="${TYPES[type_var - 1]}" break - elif [[ " ${TYPES[*]} " =~ " ${TYPE} " ]]; then + elif [[ " ${TYPES[*]} " =~ " ${type_var} " ]]; then break else printf "${RED}❌ Please select a valid type.${RESET}\n" @@ -47,19 +55,21 @@ function git_commit_template() { # Scppe section printf "\n${BLUE}>>> Scope of this change (optional)?${RESET}\n" - printf "The scope could be anything specifying place of the commit change e.g a file name, function name, class name, component name etc.\n\n" - read -e SCOPE + printf "The scope could be anything specifying place of the commit change e.g \ +a file name, function name, class name, component name etc.\n\n" + read -e scope # Subject section printf "\n${BLUE}>>> Short description?${RESET}\n" printf "The short description contains succinct description of the change:\n" - printf ' • use the imperative, present tense: "change" not "changed" nor "changes"\n' + printf " • use the imperative, present tense: 'change' not 'changed' nor \ +'changes'\n" printf " • don't capitalize first letter\n" printf " • no dot (.) at the end\n\n" while :; do - read -e SHORT_DESC - if [ -z "$SHORT_DESC" ]; then + read -e short_desc + if [ -z "$short_desc" ]; then printf "${RED}❌ Short description can not be empty.${RESET}\n" else break @@ -68,43 +78,46 @@ function git_commit_template() { # Description section printf "\n${BLUE}>>> Long description (optional)?${RESET}\n" - printf "The body should include the motivation for the change and contrast this with previous behavior.\n\n" - read -e LONG_DESC + printf "The body should include the motivation for the change and contrast \ +this with previous behavior.\n\n" + read -e long_desc # Breaking changes section printf "\n${BLUE}>>> Breaking changes (optional)?${RESET}\n" printf "note the reason for a breaking change within the commit.\n\n" - read -e BREAKING_CHANGES + read -e breaking_changes # Closed issues section printf "\n${BLUE}>>> Closed issues (optional)?${RESET}\n" - printf "The syntax for closing keywords depends on whether the issue is in the same repository as the pull request.\n" + printf "The syntax for closing keywords depends on whether the issue is in \ +the same repository as the pull request.\n" printf " • Issue in the same repository -> Closes #10\n" printf " • Issue in a different repository -> Fixes octo-org/octo-repo#100\n" - printf " • Multiple issues -> Resolves #10, resolves #123, resolves octo-org/octo-repo#100\n\n" - read -e CLOSED_ISSUES + printf " • Multiple issues -> Resolves #10, resolves #123, resolves \ +octo-org/octo-repo#100\n\n" + read -e closed_issues # Result section - if [ ! -z "$SCOPE" ]; then - SCOPE="(${SCOPE})" + if [ ! -z "$scope" ]; then + scope="(${scope})" fi - if [ ! -z "$BREAKING_CHANGES" ]; then - BREAKING_CHANGES="BREAKING CHANGE: ${BREAKING_CHANGES}" + if [ ! -z "$breaking_changes" ]; then + breaking_changes="BREAKING CHANGE: ${breaking_changes}" fi - printf "\n ${GREEN}${TYPE}${SCOPE}: ${SHORT_DESC} - ${LONG_DESC} - ${BREAKING_CHANGES} - ${CLOSED_ISSUES}${RESET}\n\n" + printf "\n ${GREEN}${type_var}${scope}: ${short_desc} + ${long_desc} + ${breaking_changes} + ${closed_issues}${RESET}\n\n" # Git commit - RESULT_CODE=$? - if [ "$RESULT_CODE" = 0 ]; then - git commit -m "${TYPE}${SCOPE}: ${SHORT_DESC} -${LONG_DESC} -${BREAKING_CHANGES} -${CLOSED_ISSUES}" + result_code=$? + if [ "$result_code" = 0 ]; then + git commit -m "${type_var}${scope}: ${short_desc} +${long_desc} +${breaking_changes} +${closed_issues}" else printf "\n${RED}❌ An error occurred. Please try again.${RESET}\n" fi