git-gui / CREDITS-GENon commit sha1_file.c: don't ignore an error condition in sha1_loose_object_info() (9ba6303)
   1#!/bin/sh
   2
   3CF=CREDITS-FILE
   4tip=
   5
   6tree_search ()
   7{
   8        head=$1
   9        tree=$2
  10        for p in $(git rev-list --parents --max-count=1 $head 2>/dev/null)
  11        do
  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
  18}
  19
  20generate_credits ()
  21{
  22        tip=$1 &&
  23        rm -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
  44if test -f credits
  45then
  46        orig=credits
  47elif prefix="$(git rev-parse --show-prefix 2>/dev/null)" &&
  48   test -n "$prefix" &&
  49   head=$(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) &&
  52   test -n "$tip"
  53then
  54        generate_credits $tip "$orig" || exit
  55elif tip="$(git rev-parse --verify HEAD 2>/dev/null)" &&
  56   test -n "$tip"
  57then
  58        generate_credits $tip "$orig" || exit
  59else
  60        echo "error: Cannot locate authorship information." >&2
  61        exit 1
  62fi
  63
  64if test -f "$orig" && cmp -s "$orig" "$CF"
  65then
  66        : noop
  67else
  68        rm -f "$CF" &&
  69        cat "$orig" >"$CF"
  70fi
  71