summaryrefslogtreecommitdiffstats
path: root/gitlint/files
diff options
context:
space:
mode:
Diffstat (limited to 'gitlint/files')
-rw-r--r--gitlint/files/commit-msg81
-rw-r--r--gitlint/files/gitlint106
2 files changed, 187 insertions, 0 deletions
diff --git a/gitlint/files/commit-msg b/gitlint/files/commit-msg
new file mode 100644
index 0000000..e468290
--- /dev/null
+++ b/gitlint/files/commit-msg
@@ -0,0 +1,81 @@
+#!/bin/sh
+### gitlint commit-msg hook start ###
+
+# Determine whether we have a tty available by trying to access it.
+# This allows us to deal with UI based gitclient's like Atlassian SourceTree.
+# NOTE: "exec < /dev/tty" sets stdin to the keyboard
+stdin_available=1
+(exec < /dev/tty) 2> /dev/null || stdin_available=0
+
+if [ $stdin_available -eq 1 ]; then
+ # Set bash color codes in case we have a tty
+ RED="\033[31m"
+ YELLOW="\033[33m"
+ GREEN="\033[32m"
+ END_COLOR="\033[0m"
+
+ # Now that we know we have a functional tty, set stdin to it so we can ask the user questions :-)
+ exec < /dev/tty
+else
+ # Unset bash colors if we don't have a tty
+ RED=""
+ YELLOW=""
+ GREEN=""
+ END_COLOR=""
+fi
+
+run_gitlint(){
+ echo "gitlint: checking commit message..."
+ python -m gitlint.cli --staged --msg-filename "$1"
+ gitlint_exit_code=$?
+}
+
+# Prompts a given yes/no question.
+# Returns 0 if user answers yes, 1 if no
+# Reprompts if different answer
+ask_yes_no_edit(){
+ ask_yes_no_edit_result="no"
+ # If we don't have a stdin available, then just return "No".
+ if [ $stdin_available -eq 0 ]; then
+ ask_yes_no_edit_result="no"
+ return;
+ fi
+ # Otherwise, ask the question until the user answers yes or no
+ question="$1"
+ while true; do
+ read -p "$question" yn
+ case $yn in
+ [Yy]* ) ask_yes_no_edit_result="yes"; return;;
+ [Nn]* ) ask_yes_no_edit_result="no"; return;;
+ [Ee]* ) ask_yes_no_edit_result="edit"; return;;
+ esac
+ done
+}
+
+run_gitlint "$1"
+
+while [ $gitlint_exit_code -gt 0 ]; do
+ echo "-----------------------------------------------"
+ echo "gitlint: ${RED}Your commit message contains the above violations.${END_COLOR}"
+ ask_yes_no_edit "Continue with commit anyways (this keeps the current commit message)? [y(es)/n(no)/e(dit)] "
+ if [ $ask_yes_no_edit_result = "yes" ]; then
+ exit 0
+ elif [ $ask_yes_no_edit_result = "edit" ]; then
+ EDITOR=${EDITOR:-vim}
+ $EDITOR "$1"
+ run_gitlint "$1"
+ else
+ echo "Commit aborted."
+ echo "Your commit message: "
+ echo "-----------------------------------------------"
+ cat "$1"
+ echo "-----------------------------------------------"
+
+ exit $gitlint_exit_code
+ fi
+done
+
+echo "gitlint: ${GREEN}OK${END_COLOR} (no violations in commit message)"
+exit 0
+
+### gitlint commit-msg hook end ###
diff --git a/gitlint/files/gitlint b/gitlint/files/gitlint
new file mode 100644
index 0000000..15a6626
--- /dev/null
+++ b/gitlint/files/gitlint
@@ -0,0 +1,106 @@
+# Edit this file as you like.
+#
+# All these sections are optional. Each section with the exception of [general] represents
+# one rule and each key in it is an option for that specific rule.
+#
+# Rules and sections can be referenced by their full name or by id. For example
+# section "[body-max-line-length]" could be written as "[B1]". Full section names are
+# used in here for clarity.
+#
+# [general]
+# Ignore certain rules, this example uses both full name and id
+# ignore=title-trailing-punctuation, T3
+
+# verbosity should be a value between 1 and 3, the commandline -v flags take precedence over this
+# verbosity = 2
+
+# By default gitlint will ignore merge, revert, fixup and squash commits.
+# ignore-merge-commits=true
+# ignore-revert-commits=true
+# ignore-fixup-commits=true
+# ignore-squash-commits=true
+
+# Ignore any data send to gitlint via stdin
+# ignore-stdin=true
+
+# Fetch additional meta-data from the local repository when manually passing a
+# commit message to gitlint via stdin or --commit-msg. Disabled by default.
+# staged=true
+
+# Enable debug mode (prints more output). Disabled by default.
+# debug=true
+
+# Enable community contributed rules
+# See http://jorisroovers.github.io/gitlint/contrib_rules for details
+# contrib=contrib-title-conventional-commits,CC1
+
+# Set the extra-path where gitlint will search for user defined rules
+# See http://jorisroovers.github.io/gitlint/user_defined_rules for details
+# extra-path=examples/
+
+# This is an example of how to configure the "title-max-length" rule and
+# set the line-length it enforces to 80
+# [title-max-length]
+# line-length=50
+
+# [title-must-not-contain-word]
+# Comma-separated list of words that should not occur in the title. Matching is case
+# insensitive. It's fine if the keyword occurs as part of a larger word (so "WIPING"
+# will not cause a violation, but "WIP: my title" will.
+# words=wip
+
+# [title-match-regex]
+# python like regex (https://docs.python.org/2/library/re.html) that the
+# commit-msg title must be matched to.
+# Note that the regex can contradict with other rules if not used correctly
+# (e.g. title-must-not-contain-word).
+# regex=^US[0-9]*
+
+# [body-max-line-length]
+# line-length=72
+
+# [body-min-length]
+# min-length=5
+
+# [body-is-missing]
+# Whether to ignore this rule on merge commits (which typically only have a title)
+# default = True
+# ignore-merge-commits=false
+
+# [body-changed-file-mention]
+# List of files that need to be explicitly mentioned in the body when they are changed
+# This is useful for when developers often erroneously edit certain files or git submodules.
+# By specifying this rule, developers can only change the file when they explicitly reference
+# it in the commit message.
+# files=gitlint/rules.py,README.md
+
+# [author-valid-email]
+# python like regex (https://docs.python.org/2/library/re.html) that the
+# commit author email address should be matched to
+# For example, use the following regex if you only want to allow email addresses from foo.com
+# regex=[^@]+@foo.com
+
+# [ignore-by-title]
+# Ignore certain rules for commits of which the title matches a regex
+# E.g. Match commit titles that start with "Release"
+# regex=^Release(.*)
+
+# Ignore certain rules, you can reference them by their id or by their full name
+# Use 'all' to ignore all rules
+# ignore=T1,body-min-length
+
+# [ignore-by-body]
+# Ignore certain rules for commits of which the body has a line that matches a regex
+# E.g. Match bodies that have a line that that contain "release"
+# regex=(.*)release(.*)
+#
+# Ignore certain rules, you can reference them by their id or by their full name
+# Use 'all' to ignore all rules
+# ignore=T1,body-min-length
+
+# This is a contrib rule - a community contributed rule. These are disabled by default.
+# You need to explicitly enable them one-by-one by adding them to the "contrib" option
+# under [general] section above.
+# [contrib-title-conventional-commits]
+# Specify allowed commit types. For details see: https://www.conventionalcommits.org/
+# types = bugfix,user-story,epic \ No newline at end of file