mirror of
https://github.com/neovim/neovim.git
synced 2024-12-23 20:55:18 -07:00
53 lines
1.3 KiB
Bash
Executable File
53 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Prints a nicely-formatted commit history.
|
|
# - Commits are grouped below their merge-commit.
|
|
# - Issue numbers are moved next to the commit-id.
|
|
#
|
|
# Parameters:
|
|
# $1 "since" commit
|
|
# $2 "inverse match" regex pattern
|
|
|
|
set -e
|
|
set -u
|
|
set -o pipefail
|
|
|
|
__SINCE=$1
|
|
__INVMATCH=$2
|
|
|
|
is_merge_commit() {
|
|
git rev-parse "$1" >/dev/null 2>&1 \
|
|
|| { echo "ERROR: invalid commit: $1"; exit 1; }
|
|
git log "$1"^2 >/dev/null 2>&1 && return 0 || return 1
|
|
}
|
|
|
|
# Removes parens from issue/ticket/PR numbers.
|
|
#
|
|
# Example:
|
|
# in: 3340e08becbf foo (#9423)
|
|
# out: 3340e08becbf foo #9423
|
|
_deparen() {
|
|
sed 's/(\(\#[0-9]\{3,\}\))/\1/g'
|
|
}
|
|
|
|
# Cleans up issue/ticket/PR numbers in the commit descriptions.
|
|
#
|
|
# Example:
|
|
# in: 3340e08becbf foo (#9423)
|
|
# out: 3340e08becbf #9423 foo
|
|
_format_ticketnums() {
|
|
nvim -Es +'g/\v(#[0-9]{3,})/norm! ngEldE0ep' +'%p' | _deparen
|
|
}
|
|
|
|
for commit in $(git log --format='%H' --first-parent "$__SINCE"..HEAD); do
|
|
if is_merge_commit "${commit}" ; then
|
|
if [ -z "$__INVMATCH" ] || ! git log --oneline "${commit}^1..${commit}^2" \
|
|
| >/dev/null 2>&1 grep -E "$__INVMATCH" ; then
|
|
git log -1 --oneline "${commit}"
|
|
git log --format=' %h %s' "${commit}^1..${commit}^2"
|
|
fi
|
|
else
|
|
git log -1 --oneline "${commit}"
|
|
fi
|
|
done | _format_ticketnums
|