summaryrefslogtreecommitdiff
path: root/contrib/git-descr.sh
blob: 28db83abc08c0ba893e2a94d5afa3552fbeafb9e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/sh

# Script to describe a GCC revision based on git hash

short=no
long=no
c=HEAD

for arg in "$@"
do
    case "$arg" in
      --short) short=yes long=no
	;;
      --long|--full) long=yes short=no
	;;
      *) c=$arg
    esac
done

if test x$short = xyes; then
    r=$(git describe --all --match 'basepoints/gcc-[0-9]*' $c | sed -n 's,^tags/,,;s,^basepoints/gcc-\([0-9][0-9]*\)-\([0-9][0-9]*\)-g[0-9a-f]*$,r\1-\2,p;s,^basepoints/gcc-\([0-9][0-9]*\)$,r\1-0,p');
elif test x$long = xyes; then
    r=$(git describe --all --abbrev=40 --match 'basepoints/gcc-[0-9]*' $c | sed -n 's,^tags/,,;s,^basepoints/gcc-,r,p')
else
    r=$(git describe --all --abbrev=14 --match 'basepoints/gcc-[0-9]*' $c | sed -n 's,^tags/,,;s,^basepoints/gcc-,r,p')
    expr ${r:-no} : 'r[0-9]\+$' >/dev/null && r=${r}-0-g$(git rev-parse $c);
fi;
if test -n $r; then
    o=$(git config --get gcc-config.upstream);
    rr=$(echo $r | sed -n 's,^r\([0-9]\+\)-[0-9]\+\(-g[0-9a-f]\+\)\?$,\1,p');
    if git rev-parse --verify --quiet ${o:-origin}/releases/gcc-$rr >/dev/null; then
	m=releases/gcc-$rr;
    else
	m=master;
    fi;
    git merge-base --is-ancestor $c ${o:-origin}/$m && echo ${r};
fi;