git-svn: simplify the (multi-)init methods of fetching
[git/dscho.git] / git-gui / CREDITS-GEN
blobda2c07629e171daf2dafa677cbbb514be815aed9
1 #!/bin/sh
3 CF=CREDITS-FILE
4 tip=
6 tree_search ()
8 head=$1
9 tree=$2
10 for p in $(git rev-list --parents --max-count=1 $head 2>/dev/null)
12 test $tree = $(git rev-parse $p^{tree} 2>/dev/null) &&
13 vn=$(git describe --abbrev=4 $p 2>/dev/null) &&
14 case "$vn" in
15 gitgui-[0-9]*) echo $p; break;;
16 esac
17 done
20 generate_credits ()
22 tip=$1 &&
23 rm -f $CF &&
24 git shortlog -n -s $tip | sed 's/: .*$//' >$CF || exit
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.)
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.
39 if test -f credits
40 then
41 rm -f $CF &&
42 cp credits $CF || exit
43 elif prefix="$(git rev-parse --show-prefix 2>/dev/null)" &&
44 test -n "$prefix" &&
45 head=$(git rev-list --max-count=1 HEAD -- . 2>/dev/null) &&
46 tree=$(git rev-parse --verify "HEAD:$prefix" 2>/dev/null) &&
47 tip=$(tree_search $head $tree) &&
48 test -n "$tip"
49 then
50 generate_credits $tip || exit
51 elif tip="$(git rev-parse --verify HEAD 2>/dev/null)" &&
52 test -n "$tip"
53 then
54 generate_credits $tip || exit
55 else
56 echo "error: Cannot locate authorship information." >&2
57 exit 1