File: gen-version

package info (click to toggle)
weakforced 3.0.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,040 kB
  • sloc: cpp: 20,397; python: 2,002; sh: 700; makefile: 432
file content (82 lines) | stat: -rwxr-xr-x 2,234 bytes parent folder | download
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/bash
VERSION="unknown"

DIRTY=""
git status | grep -q clean || DIRTY='.dirty'

# Special environment variable to signal that we are building a release, as this
# has consequences for the version number.
if [ "${IS_RELEASE}" = "YES" ]; then
  TAG="$(git describe --tags --exact-match 2> /dev/null)"
  if [ -n "${TAG}" ]; then
    # We're on a tag
    echo "${TAG}${DIRTY}" > .version
    printf "${TAG}${DIRTY}"
    exit 0
  fi
  echo 'This is not a tag, either tag this commit or do not set $IS_RELEASE' >&2
  exit 1
fi

#
# Generate the version number based on the branch
#
if [ ! -z "$(git rev-parse --abbrev-ref HEAD 2> /dev/null)" ]; then
  # Possible `git describe --tags` outputs:
  # 2.4.1 (when on a tag)
  # 2.4.1-alpha1 (when on a tag)
  # 2.4.2-1-gdad05a9 (not on a tag)
  # 2.4.2-alpha1-1-gdad05a9 (not on a tag)

  OIFS=$IFS
  IFS='-' GIT_VERSION=( $(git describe --tags 2> /dev/null) )
  IFS=$OIFS
  LAST_TAG="${GIT_VERSION[0]}"
  COMMITS_SINCE_TAG=''
  GIT_HASH=''

  if [ ${#GIT_VERSION[@]} -eq 1 ]; then
    # We're on a tag, but IS_RELEASE was unset
    COMMITS_SINCE_TAG=0
  fi

  if [ ${#GIT_VERSION[@]} -eq 2 ]; then
    # On a tag for a pre-release, e.g. 1.2.3-beta2
    LAST_TAG="${LAST_TAG}-${GIT_VERSION[1]}"
    COMMITS_SINCE_TAG=0
  fi

  if [ ${#GIT_VERSION[@]} -eq 3 ]; then
    # Not on a tag
    # 1.2.3-100-g123456
    COMMITS_SINCE_TAG="${GIT_VERSION[1]}"
    GIT_HASH="${GIT_VERSION[2]}"
  fi

  if [ ${#GIT_VERSION[@]} -eq 4 ]; then
    # Not on a tag, but a pre-release was made before
    # 1.2.3-rc1-100-g123456
    LAST_TAG="${LAST_TAG}-${GIT_VERSION[1]}"
    COMMITS_SINCE_TAG="${GIT_VERSION[2]}"
    GIT_HASH="${GIT_VERSION[3]}"
  fi

  if [ -z "${GIT_HASH}" ]; then
    GIT_HASH="g$(git show --no-patch --format=format:%h HEAD 2>/dev/null)"
    if [ -z "$GIT_HASH" ]; then
      GIT_HASH="g$(git show --format=format:%h HEAD | head -n1)"
    fi
  fi

  if [ -z "${LAST_TAG}" ]; then
    LAST_TAG=0.0.0
    COMMITS_SINCE_TAG="$(git log --oneline | wc -l)"
  fi

  BRANCH=".$(git rev-parse --abbrev-ref HEAD | perl -p -e 's/[^[:alnum:]]//g;')"
  [ "${BRANCH}" = ".master" ] && BRANCH=''

  VERSION="${LAST_TAG}.${COMMITS_SINCE_TAG}${BRANCH}.${GIT_HASH}${DIRTY}"
fi

printf ${VERSION##v}