get_version.sh (raw)
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
#!/bin/sh SCRIPT_DIR=$(dirname "$0") DIRTY="" VERSION="" OLD_DIR=$(pwd) cd ${SCRIPT_DIR} if [ -d .git ] && git status 1>/dev/null 2>/dev/null then git update-index -q --ignore-submodules --refresh # Disallow unstaged changes in the working tree if ! git diff-files --quiet --ignore-submodules -- then if [ "$1" = "--strict" ] then echo >&2 "Error: there are unstaged changes." git diff-files --name-status -r --ignore-submodules -- >&2 exit 1 else DIRTY="-dirty" fi fi # Disallow uncommitted changes in the index if ! git diff-index --cached --quiet HEAD --ignore-submodules -- then if [ "$1" = "--strict" ] then echo >&2 "Error: there are uncommitted changes." git diff-index --cached --name-status -r --ignore-submodules HEAD -- >&2 exit 1 else DIRTY="-dirty" fi fi if git describe 1>/dev/null 2>/dev/null then VERSION=$(git describe 2>/dev/null)$DIRTY elif git log -n 1 1>/dev/null 2>/dev/null then VERSION=$(head -n 1 "ChangeLog" | cut -d ' ' -f 2) if [ "$VERSION" = "master" ] then PREVIOUS=$(grep '^2' "ChangeLog" | head -n 2 | tail -n 1 | cut -d ' ' -f 2) HASH=$(git log -n 1 --pretty=format:%cI.%ct.%h | tr -d ':' | tr -d '-' | tr '.' '-' | sed 's/T[0-9\+]*//g' 2>/dev/null) VERSION=$PREVIOUS-next-$HASH fi fi fi if [ -z "$VERSION" ] then VERSION=$(head -n 1 "ChangeLog" | cut -d ' ' -f 2) if [ "$VERSION" = "master" ] then VERSION=$VERSION-$(head -n 1 "ChangeLog" | cut -d ' ' -f 1) fi fi cd "${OLD_DIR}" VERSION=$(echo "$VERSION" | sed 's/^v//') echo '#define VERSION_STRING "'$VERSION'"' > version.h echo $VERSION |