diff --git a/README.md b/README.md index ff86127..ef3cfdf 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ This git hook requires `ruby` to be installed _(already pre-installed by defaul To install simply run the following command. This requires `curl` to be installed. ```bash -sh <(curl -s https://raw.githubusercontent.com/janniks/prepare-commit-msg/master/scripts/install.sh) +sh <(curl -s https://raw.githubusercontent.com/yrave/prepare-commit-msg/master/scripts/install.sh) ``` > If you choose the option to install globally, you will have to reinitialize all your git repositories. The following helpful command reinitializes all repositories found in sub-directories of the current directory. diff --git a/scripts/install.sh b/scripts/install.sh index bdd373b..871f8ac 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -1,12 +1,17 @@ -#!/bin/sh +#!/bin/bash +should_use_file_from_github_url=true # defaults PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER="^\s*\[[\-\w]*\d\]" +PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER_ONE="^\s*\[[\-\w]*\d\]" +PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER_TWO="^\s*[\-\w]*\d:" PLACEHOLDER_REGEX_BRANCH_ISSUE_NUMBER="[.]*\/([\-\w]*?\-\d+)" PLACEHOLDER_REGEX_GIT_COMMIT_MESSAGES="(Merge\sbranch\s\'|\#\sRebase\s|This\sreverts\scommit\s)" PLACEHOLDER_LOGGING_VERBOSE="true" - -GITHUB_SCRIPT_URL="https://raw.githubusercontent.com/janniks/prepare-commit-msg/master/scripts/prepare-commit-msg" +PLACEHOLDER_NEW_COMMIT_MESSAGE="[#{issue_number.upcase}] #{original_commit_message.gsub(/(\s[[:punct:]])+$/, '')}" +PLACEHOLDER_NEW_COMMIT_MESSAGE_ONE="[#{issue_number.upcase}] #{original_commit_message.gsub(/(\s[[:punct:]])+$/, '')}" +PLACEHOLDER_NEW_COMMIT_MESSAGE_TWO="#{issue_number.upcase}: #{original_commit_message.gsub(/(\s[[:punct:]])+$/, '')}" +GITHUB_SCRIPT_URL="https://raw.githubusercontent.com/yrave/prepare-commit-msg/master/scripts/prepare-commit-msg" PATH_GIT_GLOBAL="${HOME}/.git-template/" PATH_GIT_LOCAL="./.git/" @@ -75,16 +80,50 @@ if [ "$answer" != "${answer#[Yy]}" ]; then PLACEHOLDER_LOGGING_VERBOSE=false fi - printf -- "Set a custom regex for parsing issue numbers from commit messages:\n" - printf -- " - To use default value, leave empty and press return\n\n" - printf -- "Default: ${BLUE}${PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER}${RESET}\n${BLUE}>${RESET} " + printf -- "Set a custom message style where ISSUE_NUMBER is the issue number and COMMIT_MESSAGE is the commit message.\n" + printf -- " - To use default value, leave empty and press return\n" + printf -- "Default: ${BLUE}${PLACEHOLDER_NEW_COMMIT_MESSAGE}${RESET}\n\n" + printf -- " - To use ${GREEN}[ISSUE_NUMBER] COMMIT_MESSAGE${RESET}, enter 1\n" + printf -- "1: ${BLUE}${PLACEHOLDER_NEW_COMMIT_MESSAGE_ONE}${RESET}\n\n" + printf -- " - To use ${GREEN}ISSUE_NUMBER: COMMIT_MESSAGE${RESET}, enter 2\n" + printf -- "2: ${BLUE}${PLACEHOLDER_NEW_COMMIT_MESSAGE_TWO}${RESET}\n\n${BLUE}>${RESET} " read answer if [ ! -z "$answer" ]; then - PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER=answer + if [ "$answer" == "1" ]; then + PLACEHOLDER_NEW_COMMIT_MESSAGE=$PLACEHOLDER_NEW_COMMIT_MESSAGE_ONE + elif [ "$answer" == "2" ]; then + PLACEHOLDER_NEW_COMMIT_MESSAGE=$PLACEHOLDER_NEW_COMMIT_MESSAGE_TWO + else + PLACEHOLDER_NEW_COMMIT_MESSAGE=answer + fi fi - clear_n_lines 5 + clear_n_lines 12 + printf -- " - ${BLUE}Commit message style: ${PLACEHOLDER_NEW_COMMIT_MESSAGE} ${RESET}\n\n" + + printf -- "Set a custom regex for parsing issue numbers from commit messages:\n\n" + printf -- " - To use default value, leave empty and press return\n" + printf -- "Default: ${BLUE}${PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER}${RESET}\n\n" + printf -- " - To use ${GREEN}[ISSUE_NUMBER] COMMIT_MESSAGE${RESET}, enter 1\n" + printf -- "1: ${BLUE}${PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER_ONE}${RESET}\n\n" + printf -- " - To use ${GREEN}ISSUE_NUMBER: COMMIT_MESSAGE${RESET}, enter 2\n" + printf -- "2: ${BLUE}${PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER_TWO}${RESET}\n\n${BLUE}>${RESET} " + read answer + + if [ ! -z "$answer" ]; then + if [ "$answer" == "1" ]; then + PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER=$PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER_ONE + elif [ "$answer" == "2" ]; then + PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER=$PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER_TWO + else + PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER=answer + fi + fi + + clear_n_lines 13 + printf -- " - ${BLUE}Regex for commit message: ${PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER} ${RESET}\n\n" + printf -- "Set a custom regex for parsing issue numbers from branch names:\n" printf -- " - To use default value, leave empty and press return\n\n" printf -- "Default: ${BLUE}${PLACEHOLDER_REGEX_BRANCH_ISSUE_NUMBER}${RESET}\n${BLUE}>${RESET} " @@ -125,7 +164,7 @@ if [ "$OPTION_GLOBAL_TEMPLATE" = true ]; then printf -- " - A global \'${BLUE}${HOOK_NAME}${RESET}\' git hook already exists. ${RED}Aborting...${RESET}\n\n" exit fi - + HOOK_FILE="${PATH_GIT_GLOBAL}${HOOK_DIR}${HOOK_NAME}" printf -- " - Setting global git-template...\n" @@ -140,8 +179,14 @@ else HOOK_FILE="${PATH_GIT_LOCAL}${HOOK_DIR}${HOOK_NAME}" fi -printf -- " - Downloading git hook...\n" -curl -s "$GITHUB_SCRIPT_URL" > "$HOOK_FILE" +if [ "$should_use_file_from_github_url" = true ] ; then + printf -- " - Downloading git hook...\n" + curl -s "$GITHUB_SCRIPT_URL" > "$HOOK_FILE" +else + printf -- " - Creating git hook file from local file\n" + BASEDIR=$(dirname $0) + cat "${BASEDIR}/prepare-commit-msg" > "$HOOK_FILE" +fi printf -- " - Replacing placeholders...\n" PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER=$(printf -- "$PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER" | sed 's/\\/\\\\/g') @@ -153,11 +198,22 @@ PLACEHOLDER_REGEX_BRANCH_ISSUE_NUMBER=$(printf -- "$PLACEHOLDER_REGEX_BRANCH_ISS PLACEHOLDER_REGEX_GIT_COMMIT_MESSAGES=$(printf -- "$PLACEHOLDER_REGEX_GIT_COMMIT_MESSAGES" | sed 's/\\/\\\\/g') printf -v PLACEHOLDER_REGEX_GIT_COMMIT_MESSAGES "%q" "$PLACEHOLDER_REGEX_GIT_COMMIT_MESSAGES" PLACEHOLDER_REGEX_GIT_COMMIT_MESSAGES=$(printf -- "$PLACEHOLDER_REGEX_GIT_COMMIT_MESSAGES" | sed 's/\//\\\//g') +PLACEHOLDER_NEW_COMMIT_MESSAGE=$(printf -- "$PLACEHOLDER_NEW_COMMIT_MESSAGE" | sed 's/\//\\\//g') + +replace_placeholder_with_value () { + if [ $(uname -s) == "Linux" ]; then + sed -i "s/${1}/${2}/g" "$HOOK_FILE" + return + fi + + sed -i '' "s/${1}/${2}/g" "$HOOK_FILE" +} -sed -i '' "s/PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER/\/${PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER}\//g" "$HOOK_FILE" -sed -i '' "s/PLACEHOLDER_REGEX_BRANCH_ISSUE_NUMBER/\/${PLACEHOLDER_REGEX_BRANCH_ISSUE_NUMBER}\//g" "$HOOK_FILE" -sed -i '' "s/PLACEHOLDER_REGEX_GIT_COMMIT_MESSAGES/\/${PLACEHOLDER_REGEX_GIT_COMMIT_MESSAGES}\//g" "$HOOK_FILE" -sed -i '' "s/PLACEHOLDER_LOGGING_VERBOSE/${PLACEHOLDER_LOGGING_VERBOSE}/g" "$HOOK_FILE" +replace_placeholder_with_value PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER "\/${PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER}\/" +replace_placeholder_with_value PLACEHOLDER_REGEX_BRANCH_ISSUE_NUMBER "\/${PLACEHOLDER_REGEX_BRANCH_ISSUE_NUMBER}\/" +replace_placeholder_with_value PLACEHOLDER_REGEX_GIT_COMMIT_MESSAGES "\/${PLACEHOLDER_REGEX_GIT_COMMIT_MESSAGES}\/" +replace_placeholder_with_value PLACEHOLDER_LOGGING_VERBOSE "${PLACEHOLDER_LOGGING_VERBOSE}" +replace_placeholder_with_value PLACEHOLDER_NEW_COMMIT_MESSAGE "${PLACEHOLDER_NEW_COMMIT_MESSAGE}" printf -- " - Requesting permission to execute git hook...\n" chmod a+x "$HOOK_FILE" diff --git a/scripts/prepare-commit-msg b/scripts/prepare-commit-msg index eda4470..a092413 100644 --- a/scripts/prepare-commit-msg +++ b/scripts/prepare-commit-msg @@ -11,7 +11,6 @@ $verbose_prefix = "git hook: " regex_commit_issue_number = PLACEHOLDER_REGEX_COMMIT_ISSUE_NUMBER regex_branch_issue_number = PLACEHOLDER_REGEX_BRANCH_ISSUE_NUMBER regex_git_commit_messages = PLACEHOLDER_REGEX_GIT_COMMIT_MESSAGES - # colorize strings in console output class String def error; "\e[31m#{self}\e[0m" end @@ -62,7 +61,7 @@ if !issue_number end # combine to new message -new_commit_message = "[#{issue_number.upcase}] #{original_commit_message.gsub(/(\s[[:punct:]])+$/, '')}" +new_commit_message = "PLACEHOLDER_NEW_COMMIT_MESSAGE" # write new commit message to file File.open(commit_file, 'w') do |f|