1
0
Fork 0
dosbox-staging/scripts/git-rlog.sh
Patryk Obara 3be0409d25 Update copyright line in several scripts
Use the exact formatting suggested in COPYING file.

This change is basically a pretext to trigger a new clean build in
order to check if Coverity is capable of accepting new builds for
analysis finally.
2020-01-03 17:15:25 +01:00

63 lines
2 KiB
Bash
Executable file

#!/bin/bash
# Copyright (C) 2019-2020 Patryk Obara <patryk.obara@gmail.com>
# SPDX-License-Identifier: GPL-2.0-or-later
# git-rlog.sh - Show git log decorated with SVN revisions
#
# Usage: git-rlog.sh [<options>] [<revision range>] [[--] <path>…]
#
# Example: $ git-rlog.sh origin/svn/trunk
#
# Accepts the same options as git-log (see: git-log(1) for details).
# Revision range are documented in man page: gitrevisions(7).
#
# You can either use this script directly or add it to your git aliases in
# ~/.gitconfig or .git/config:
#
# [alias]
# rlog = !$(git rev-parse --show-toplevel)/scripts/git-rlog.sh
#
# With alias configured, you will be able to invoke it as other git commands:
#
# $ git rlog
#
# You can read more about aliases in the manual: git-config(1)
max () {
local -r x=$1
local -r y=$2
((x > y)) && echo "$x" || echo "$y"
}
# This is a simple invocation of git-log with a very specific message
# formatting used. Formatting of log messages is explained in detail
# in the manual page: git-log(1), section "PRETTY FORMATS".
#
git_log () {
read -r _ term_cols < <(stty size)
local -r cols_available_for_msg_subject=$((term_cols - 54))
local -r s=$(max 25 $cols_available_for_msg_subject)
local -r fmt="%h %cd %<(20,trunc)%cn [[%(trailers)%-]] %<($s,trunc)%s"
git log --date="format:%Y-%m-%d %H:%M" --format="$fmt" "$@"
}
# This terrible sed expression rips out SVN revision out of SVN path
# and ignores trailers other than "Imported-from". This expression depends
# on trailer being surrounded with "[[" and "]]" markers.
#
sed_trailer () {
sed 's/\[\[\(Imported-from: .*@\([0-9]\+\)\|.*\)\]\]/[\2]/'
# ~~~~ ~~ ~~~~~~~ ~~~~
# ↑ ↑ ↑ ↑
# "[[" path revision "]]"
}
# main function; piece it together and pass to the pager, keeping behaviour
# of the default Git pager (sans all user overrides possible).
#
main () {
git_log "$@" | sed_trailer | LESS=FRX less -S
}
main "$@"