blob: 503b5a11be9245bd1792d79072033276de3ee8e7 (
plain) (
tree)
|
|
#!/bin/sh
set -e
debug() {
if [ "$GIT_TRAILER_DEBUG" = 1 ]; then
"$@" >&2
fi
}
trailer_order="
Closes:
Fixes:
Implements:
References:
Link:
Changelog-added:
Changelog-fixed:
Changelog-changed:
Changelog-deprecated:
Cc:
Suggested-by:
Requested-by:
Reported-by:
Co-authored-by:
Signed-off-by:
Tested-by:
Reviewed-by:
Acked-by:
"
file=${1?file}
tmp=$(mktemp)
trap "rm -f $tmp" EXIT
# Read unfolded trailers and normalize case.
git interpret-trailers --parse --trim-empty "$file" |
while read -r key value; do
# Force title case on trailer key.
first_letter=$(echo "$key" | sed 's/^\(.\).*/\1/' | tr '[:lower:]' '[:upper:]')
other_letters=$(echo "$key" | sed 's/^.\(.*\)/\1/' | tr '[:upper:]' '[:lower:]')
key="$first_letter$other_letters"
# Find sort order of this key.
order=$(echo "$trailer_order" | grep -Fxn "$key" | sed -nE 's/^([0-9]+):.*/\1/p')
if [ -z "$order" ]; then
echo "warning: unknown trailer '$key'" >&2
# Unknown trailers are always first.
order="0"
fi
echo "$order $key $value"
done |
# Sort trailers according to their numeric order, trim the numeric order.
LC_ALL=C sort -n | sed -E 's/^[0-9]+ //' > "$tmp"
debug echo ==== sanitized trailers ====
debug cat "$tmp"
# Unfortunately, reordering trailers is not possible at the moment. Delete all
# trailers first. The only way to do it is to force replace existing trailers
# with empty values and trim empty trailers one by one.
while read -r key value; do
git interpret-trailers --in-place --if-exists=replace \
--trailer="$key " "$file"
git interpret-trailers --in-place --trim-empty "$file"
done < "$tmp"
set --
while read -r trailer; do
case "$trailer" in
Changelog-*)
# Wrap changelog entries indenting with a space.
trailer=$(echo "$trailer" | fmt -w 72 | sed '2,$s/^/ /')
;;
esac
set -- "$@" --trailer="$trailer"
done < "$tmp"
# Remove duplicate "key: value" trailers (e.g. duplicate signed-off-by).
git interpret-trailers --in-place --if-exists=addIfDifferent "$@" "$file"
|