[PATCH] erofs-utils: generate version number from git commit
Gao Xiang
xiang at kernel.org
Sun Aug 15 05:03:01 AEST 2021
In order to make the version string more precise.
Signed-off-by: Gao Xiang <xiang at kernel.org>
---
configure.ac | 2 +-
scripts/get-version-number | 33 +++++++++++++++++++++++++++++++++
2 files changed, 34 insertions(+), 1 deletion(-)
create mode 100755 scripts/get-version-number
diff --git a/configure.ac b/configure.ac
index 7217cf531265..38c371c4910f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@
AC_PREREQ([2.69])
-m4_define([erofs_utils_version], m4_esyscmd([sed -n '1p' VERSION | tr -d '\n']))
+m4_define([erofs_utils_version], m4_esyscmd_s([scripts/get-version-number]))
m4_define([erofs_utils_date], m4_esyscmd([sed -n '2p' VERSION | tr -d '\n']))
AC_INIT([erofs-utils], [erofs_utils_version], [linux-erofs at lists.ozlabs.org])
diff --git a/scripts/get-version-number b/scripts/get-version-number
new file mode 100755
index 000000000000..26f0b5acb753
--- /dev/null
+++ b/scripts/get-version-number
@@ -0,0 +1,33 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0
+
+scm_version()
+{
+ # Check for git and a git repo.
+ if test -z "$(git rev-parse --show-cdup 2>/dev/null)" &&
+ head="$(git rev-parse --verify HEAD 2>/dev/null)"; then
+ # If we are at a tagged commit, we ignore it.
+ if [ -z "$(git describe --exact-match 2>/dev/null)" ]; then
+ # Add -g and 8 hex chars.
+ printf '%s%s' -g "$(echo $head | cut -c1-8)"
+ fi
+ # Check for uncommitted changes.
+ # This script must avoid any write attempt to the source tree,
+ # which might be read-only.
+ # You cannot use 'git describe --dirty' because it tries to
+ # create .git/index.lock .
+ # First, with git-status, but --no-optional-locks is only
+ # supported in git >= 2.14, so fall back to git-diff-index if
+ # it fails. Note that git-diff-index does not refresh the
+ # index, so it may give misleading results. See
+ # git-update-index(1), git-diff-index(1), and git-status(1).
+ if {
+ git --no-optional-locks status -uno --porcelain 2>/dev/null ||
+ git diff-index --name-only HEAD
+ } | read dummy; then
+ printf '%s' -dirty
+ fi
+ fi
+}
+
+echo $(sed -n '1p' VERSION | tr -d '\n')$(scm_version)
--
2.20.1
More information about the Linux-erofs
mailing list