You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.6 KiB
71 lines
1.6 KiB
#!/bin/sh |
|
|
|
CF=CREDITS-FILE |
|
tip= |
|
|
|
tree_search () |
|
{ |
|
head=$1 |
|
tree=$2 |
|
for p in $(git rev-list --parents --max-count=1 $head 2>/dev/null) |
|
do |
|
test $tree = $(git rev-parse $p^{tree} 2>/dev/null) && |
|
vn=$(git describe --abbrev=4 $p 2>/dev/null) && |
|
case "$vn" in |
|
gitgui-[0-9]*) echo $p; break;; |
|
esac |
|
done |
|
} |
|
|
|
generate_credits () |
|
{ |
|
tip=$1 && |
|
rm -f "$2" && |
|
git shortlog -n -s $tip | sed 's/: .*$//' >"$2" || exit |
|
} |
|
|
|
# Always use the tarball credits file if found, just |
|
# in case we are somehow contained in a larger git |
|
# repository that doesn't actually track our state. |
|
# (At least one package manager is doing this.) |
|
# |
|
# We may be a subproject, so try looking for the merge |
|
# commit that supplied this directory content if we are |
|
# not at the toplevel. We probably will always be the |
|
# second parent in the commit, but we shouldn't rely on |
|
# that fact. |
|
# |
|
|
|
credits_tmp=/var/tmp/gitgui-credits-$$ |
|
trap 'rm -f "$credits_tmp"' 0 |
|
|
|
orig="$credits_tmp" |
|
|
|
if test -f credits |
|
then |
|
orig=credits |
|
elif prefix="$(git rev-parse --show-prefix 2>/dev/null)" && |
|
test -n "$prefix" && |
|
head=$(git rev-list --max-count=1 HEAD -- . 2>/dev/null) && |
|
tree=$(git rev-parse --verify "HEAD:$prefix" 2>/dev/null) && |
|
tip=$(tree_search $head $tree) && |
|
test -n "$tip" |
|
then |
|
generate_credits $tip "$orig" || exit |
|
elif tip="$(git rev-parse --verify HEAD 2>/dev/null)" && |
|
test -n "$tip" |
|
then |
|
generate_credits $tip "$orig" || exit |
|
else |
|
echo "error: Cannot locate authorship information." >&2 |
|
exit 1 |
|
fi |
|
|
|
if test -f "$orig" && cmp -s "$orig" "$CF" |
|
then |
|
: noop |
|
else |
|
rm -f "$CF" && |
|
cat "$orig" >"$CF" |
|
fi |
|
|
|
|