Home | History | Annotate | Line # | Download | only in dist
      1 #!/bin/sh
      2 
      3 # This script outputs additional MPFR version information for a
      4 # Git working tree (Git branch or "(none)", total commit count,
      5 # commit id, and whether the current HEAD is modified). It is
      6 # called in tests/Makefile.am for "make check", but may be used
      7 # by other tools that need such information (other tests may be
      8 # needed; see tests/Makefile.am as an example of use).
      9 # Note that this does not replace version information found in
     10 # the VERSION file, which may still need to be output in addition
     11 # to the output of this script.
     12 
     13 set -e
     14 
     15 if [ "x`git rev-parse --is-inside-work-tree 2> /dev/null`" != xtrue ]; then
     16   echo "$0: This script should be executed from a Git working tree." >&2
     17   exit 1
     18 fi
     19 
     20 # Normally passed by tests/Makefile.am with "GREP=$(GREP) SED=$(SED)".
     21 GREP=${GREP:-grep}
     22 SED=${SED:-sed}
     23 
     24 # Note: for the branch detection, in the case of a detached HEAD state,
     25 # the commit may appear in multiple branches, i.e. which diverge after
     26 # the commit; thus we exclude branches created after this commit, based
     27 # on <branch>-root tags (such a tag should be added by the user when
     28 # creating a branch, so that "git diff <branch>-root" shows commits done
     29 # in the branch since its creation, etc.). If $gitb contains multiple
     30 # branches, this means that something is probably wrong with the tags
     31 # or the branches (merged branches should be deleted).
     32 
     33 git tag --contains | $SED -n 's/-root$//p' > excluded-branches
     34 gitb=`git branch --format='%(refname:short)' --contains | \
     35         $SED 's,(HEAD detached at origin/\(.*\)),\1,' | \
     36         $GREP -v '^(' | $GREP -v -F -f excluded-branches -x || true`
     37 rm excluded-branches
     38 gitc=`git rev-list --count HEAD`
     39 gith=`git rev-parse --short HEAD`
     40 gitm=`git update-index -q --refresh; git diff-index --name-only HEAD`
     41 echo "${gitb:-(none)}-$gitc-$gith${gitm:+ (modified)}"
     42 
     43 # References:
     44 #   https://stackoverflow.com/q/3882838/3782797
     45 #   https://stackoverflow.com/a/3899339/3782797
     46 #     for the "git diff-index --name-only HEAD" solution, but this
     47 #     is not sufficient, because autogen.sh modifies the "INSTALL"
     48 #     and "doc/texinfo.tex" files (due to "autoreconf -f -i"), and
     49 #     restores them. On needs:
     50 #   https://stackoverflow.com/q/3882838/3782797#comment121636904_3899339
     51 #     suggesting "git update-index -q --refresh" first.
     52