1#!/bin/sh 2 3CF=CREDITS-FILE 4tip= 5 6tree_search () 7{ 8head=$1 9 tree=$2 10for p in$(git rev-list --parents --max-count=1 $head 2>/dev/null) 11do 12test$tree=$(git rev-parse $p^{tree} 2>/dev/null)&& 13 vn=$(git describe --abbrev=4 $p 2>/dev/null)&& 14case"$vn"in 15 gitgui-[0-9]*)echo$p;break;; 16esac 17done 18} 19 20generate_credits () 21{ 22 tip=$1&& 23rm-f"$2"&& 24 git shortlog -n -s$tip|sed's/: .*$//'>"$2"||exit 25} 26 27# Always use the tarball credits file if found, just 28# in case we are somehow contained in a larger git 29# repository that doesn't actually track our state. 30# (At least one package manager is doing this.) 31# 32# We may be a subproject, so try looking for the merge 33# commit that supplied this directory content if we are 34# not at the toplevel. We probably will always be the 35# second parent in the commit, but we shouldn't rely on 36# that fact. 37# 38 39credits_tmp=/var/tmp/gitgui-credits-$$ 40trap'rm -f "$credits_tmp"'0 41 42orig="$credits_tmp" 43 44iftest -f credits 45then 46 orig=credits 47elif prefix="$(git rev-parse --show-prefix 2>/dev/null)"&& 48test -n"$prefix"&& 49head=$(git rev-list --max-count=1 HEAD -- . 2>/dev/null)&& 50 tree=$(git rev-parse --verify "HEAD:$prefix" 2>/dev/null)&& 51 tip=$(tree_search $head $tree)&& 52test -n"$tip" 53then 54 generate_credits $tip"$orig"||exit 55elif tip="$(git rev-parse --verify HEAD 2>/dev/null)"&& 56test -n"$tip" 57then 58 generate_credits $tip"$orig"||exit 59else 60echo"error: Cannot locate authorship information.">&2 61exit1 62fi 63 64iftest -f"$orig"&&cmp-s"$orig""$CF" 65then 66: noop 67else 68rm-f"$CF"&& 69cat"$orig">"$CF" 70fi 71