Make vcs-tag do something useful for non-developer mode as well

When building packages of arbitrary commits of systemd-stable,
distributors might want to include a git sha of the exact commit
they're on. Let's extend vcs-tag a little to make this possible.

If we're on a commit matching a tag, don't generate a git sha at all.
If we're not on a commit matching a tag, generate a vcs tag as usually.
However, if we're not in developer mode, don't append a '^' if the tree
is dirty to accomodate package builds applying various patches to the
tree which shouldn't be considered as "dirty" edits.

(cherry picked from commit 944faf6598)
This commit is contained in:
Daan De Meyer 2024-07-19 13:05:11 +02:00
parent 5b9ad0bbb8
commit 1922d49fd6
2 changed files with 18 additions and 4 deletions

View File

@ -1995,14 +1995,11 @@ endif
conf.set_quoted('VERSION_TAG', version_tag)
vcs_tag = get_option('vcs-tag')
command = ['sh', '-c',
vcs_tag and fs.exists(project_source_root / '.git') ?
'echo "-g$(git -C . describe --abbrev=7 --match="" --always --dirty=^)"' : ':']
version_h = vcs_tag(
input : 'src/version/version.h.in',
output : 'version.h',
fallback : '',
command : command,
command : [vcs_tag ? 'tools/vcs-tag.sh' : 'true', get_option('mode')],
)
shared_lib_tag = get_option('shared-lib-tag')

17
tools/vcs-tag.sh Executable file
View File

@ -0,0 +1,17 @@
#!/bin/bash
# SPDX-License-Identifier: LGPL-2.1-or-later
set -e
MODE="$1"
if ! [[ -d .git ]] || git describe --tags --exact-match &>/dev/null; then
exit 0
fi
if [[ "$MODE" == "developer" ]]; then
DIRTY="--dirty=^"
else
DIRTY=""
fi
echo "-g$(git describe --abbrev=7 --match="" --always $DIRTY)"