summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rwxr-xr-xutils/gen-version.sh23
1 files changed, 10 insertions, 13 deletions
diff --git a/utils/gen-version.sh b/utils/gen-version.sh
index b3003d7a..708c01d3 100755
--- a/utils/gen-version.sh
+++ b/utils/gen-version.sh
@@ -8,6 +8,9 @@ then
cd "$1" 2>/dev/null || exit 1
fi
+# Bail out if the directory isn't under git control
+git rev-parse --git-dir >/dev/null 2>&1 || exit 1
+
# Get a short description from the tree.
version=$(git describe --abbrev=8 --match "v[0-9]*" 2>/dev/null)
@@ -16,22 +19,16 @@ then
# Handle an un-tagged repository
sha=$(git describe --abbrev=8 --always 2>/dev/null)
commits=$(git log --oneline | wc -l 2>/dev/null)
- version=v0.0.$commits.$sha
+ version="v0.0.0-$commits-g$sha"
fi
-# Prevent changed timestamps causing -dirty labels
+# Append a '-dirty' suffix if the working tree is dirty. Prevent false
+# positives due to changed timestamps by running git update-index.
git update-index --refresh > /dev/null 2>&1
-dirty=$(git diff-index --name-only HEAD 2>/dev/null) || dirty=
-
-# Strip the 'g', and replace the preceeding '-' with a '+' to denote a label
-version=$(echo "$version" | sed -e 's/-g/+/g')
-
-# Fix the '-' (the patch count) to a '.' as a version increment.
-version=$(echo "$version" | sed -e 's/-/./g')
+git diff-index --quiet HEAD || version="$version-dirty"
-if [ -n "$dirty" ]
-then
- version=$version-dirty
-fi
+# Replace first '-' with a '+' to denote build metadata, strip the 'g' in from
+# of the git SHA1 and remove the initial 'v'.
+version=$(echo "$version" | sed -e 's/-/+/' | sed -e 's/-g/-/' | cut -c 2-)
echo "$version"