aboutsummaryrefslogtreecommitdiffstats
path: root/.githooks
diff options
context:
space:
mode:
Diffstat (limited to '.githooks')
-rwxr-xr-x.githooks/prepare-commit-msg45
1 files changed, 45 insertions, 0 deletions
diff --git a/.githooks/prepare-commit-msg b/.githooks/prepare-commit-msg
new file mode 100755
index 0000000000..44ae86d26a
--- /dev/null
+++ b/.githooks/prepare-commit-msg
@@ -0,0 +1,45 @@
+#!/bin/sh
+#
+# This hook adds prefix "<repo>/<pkgname>: " to the commit message when
+# committing changes of a single package.
+#
+MSG_FILE="$1"
+SOURCE="$2"
+
+longest_common_prefix() {
+ awk -F/ '
+ (NR == 1) { split($0, prefix); prefix_len = NF }
+ (NR > 1) {
+ for (i = 1; i <= prefix_len; i++) {
+ if (prefix[i] != $i) {
+ prefix_len = i - 1; break
+ }
+ }
+ }
+ (prefix_len == 0) { exit }
+ END {
+ res = prefix[1]
+ for (i = 2; i <= prefix_len; i++) {
+ res = res FS prefix[i]
+ }
+ print(res)
+ }'
+}
+
+prepend_msg() {
+ local prefix="$1"
+
+ printf '%s\n%s\n' "$prefix" "$(cat "$MSG_FILE")" > "$MSG_FILE"
+}
+
+
+# Do nothing if message has been given using -m, template, merge etc.
+[ -z "$SOURCE" ] || exit 0
+
+lcp=$(git diff-index --name-only --cached HEAD | longest_common_prefix)
+
+case "$lcp" in
+ [^.]*/*) prepend_msg "$(echo "$lcp" | cut -d/ -f1-2): ";;
+esac
+
+exit 0