dotfiles/.config/git/hooks/prepare-commit-msg
punkfairie 9e86149abd
🔨 ci(git): Remove description from msg hook
It's much easier to just write the description in the editor, rather
than trying to figure out how to wrap text at 72 chars in the shell
script.
2024-03-10 15:48:49 -07:00

137 lines
3.9 KiB
Fish
Executable file

#!/usr/bin/env fish
set -l msg_file $argv[1]
set -l commit_type $(string trim $argv[2])
set -l commit_sha $(string trim $argv[3])
# Rebasing.
if test "$commit_type" = messageg
exit 0
end
if test -n "$commit_sha"
gum confirm "Create a new commit message?" || exit 0
end
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
set -l gitmojis $(curl -s https://gitmoji.dev/api/gitmojis | jello -rl '\
result = []
for entry in _.gitmojis:
item = entry.emoji + " - " + entry.description
if entry.semver is not None:
item += " \033[91;3m(" + entry.semver + ")\033[0m"
result.append(item)
result
')
set -l types \
"build: Changes that affect the build system or external dependencies" \
"ci: Changes to the CI configuration files and scripts" \
"docs: Documentation only changes" \
"feat: A new feature" \
"fix: A bug fix" \
"perf: A code change that improves performance" \
"refactor: A code change that neither fixes a bug nor adds a feature" \
"style: Changes that do not affect the meaning of the code" \
"test: Adding missing tests or correcting existing tests" \
"chore: Update dependencies; bump version numbers; etc"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# HAS to be global so the function has access to it.
set -g gitmoji "$(gum filter --height=10 $gitmojis)"
# Abort if no emoji was selected
if ! test -n "$gitmoji"
exit 1
end
set -l emoji $(string sub --length 1 $gitmoji)
function breaking
string match -rq '\(major\)' "$gitmoji"
end
# function minor
# string match -rq '\(minor\)' "$gitmoji"
# end
#
# function patch
# string match -r '\(patch\)' "$gitmoji"
# end
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
set -l type $(gum filter --height=10 $types)
set type $(string match --regex '^[a-z]+' $type)
set -l scope $(gum input --placeholder "scope")
test -n "$scope" && set scope "($scope)"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
set -l summary "$type$scope: "
breaking && set summary "$type$scope!: "
set summary $(gum input --value "$summary" --placeholder "Summary of this change")
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
set -l footer ""
breaking && set footer $(gum input --value "BREAKING CHANGE: " --placeholder "The breaking change being introduced")
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# if breaking && test "$(git_current_branch)" = "$(git_main_branch)"
# set -l msg "You are commiting a breaking change on to the main branch. Continue commit?\n(Selecting no will save your commit message to the clipboard)"
#
# gum confirm $msg || begin
# copyq copy "$emoji $summary\n$description$footer"
# exit
# end
# end
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
set -l msg "$(cat $msg_file)"
set -l new_msg "$emoji $summary\n\n"
if test ! -z "$footer"
set new_msg "$new_msg$footer\n\n"
end
set new_msg "$new_msg$msg"
echo -e "$new_msg" >"$msg_file"
# function tag
# if breaking || minor || patch
# if test "$(git_current_branch)" = "$(git_main_branch)"
# gum confirm "Bump version number and tag commit?" || return
#
# set -f last $(git describe --tags --abbrev=0 || 'v0.0.0')
# set last $(string replace v '' $last | string split .)
#
# set -f i 0
# if breaking
# set i 1
# else if minor
# set i 2
# else if patch
# set i 3
# end
#
# if test $i -gt 0
# set last[$i] $(math $last[$i] + 1)
# end
#
# set -f new "$last[1].$last[2].$last[3]"
# git tag -a "v$new" -m "Version $new"
# end
# end
# end