Skip to content

Commit d412a6a

Browse files
authored
fix: git describe fallback with no tag (#34)
Signed-off-by: Cristian Le <cristian.le@mpsd.mpg.de>
1 parent eac47a4 commit d412a6a

File tree

2 files changed

+64
-23
lines changed

2 files changed

+64
-23
lines changed

cmake/DynamicVersion.cmake

+18-2
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,15 @@ function(get_dynamic_version)
524524
WORKING_DIRECTORY ${ARGS_PROJECT_SOURCE}
525525
OUTPUT_VARIABLE describe-name
526526
OUTPUT_STRIP_TRAILING_WHITESPACE
527-
COMMAND_ERROR_IS_FATAL ANY)
527+
RESULT_VARIABLE git_describe_result
528+
)
529+
if (NOT git_status_result EQUAL 0)
530+
message(${error_message_type}
531+
"Git describe failed:\n"
532+
" Source: ${ARGS_PROJECT_SOURCE}"
533+
)
534+
return()
535+
endif ()
528536
# Match any part containing digits and periods (strips out rc and so on)
529537
if (NOT describe-name MATCHES "^(v?([0-9\\.]+)(-?[a-zA-z0-9]*)?(-([0-9]+)-g([a-f0-9]+))?)$")
530538
message(${error_message_type}
@@ -554,7 +562,15 @@ function(get_dynamic_version)
554562
WORKING_DIRECTORY ${ARGS_PROJECT_SOURCE}
555563
OUTPUT_VARIABLE commit
556564
OUTPUT_STRIP_TRAILING_WHITESPACE
557-
COMMAND_ERROR_IS_FATAL ANY)
565+
RESULT_VARIABLE git_rev_parser_result
566+
)
567+
if (NOT git_rev_parser_result EQUAL 0)
568+
message(${error_message_type}
569+
"Could not get current git commit:\n"
570+
" Source: ${ARGS_PROJECT_SOURCE}"
571+
)
572+
return()
573+
endif ()
558574
message(DEBUG "Found version git repo")
559575
endif ()
560576

test/DynamicVersion/test_fallback.sh

+46-21
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ rlJournalStart
88
rlRun "rsync -r ./ $tmp" 0 "Copy test files"
99
rlRun "pushd $tmp"
1010
rlRun "build_dir=./build" 0 "Set build_dir"
11-
rlRun "configure_args=\"-B \${build_dir} -G Ninja --log-context\"" 0 "Set configure_args"
12-
rlRun "build_args=\"--build \${build_dir} -v\"" 0 "Set build_args"
13-
[[ -n "$CMakeExtraUtils_ROOT" ]] && rlRun "configure_args=\"\${configure_args} -DCMakeExtraUtils_ROOT=\${CMakeExtraUtils_ROOT}\"" 0 "Add CMakeExtraUtils_ROOT"
11+
rlRun "configure_args=\"-B \${build_dir} -G Ninja --log-context\"" 0 "Set configure_args"
12+
rlRun "build_args=\"--build \${build_dir} -v\"" 0 "Set build_args"
13+
[[ -n "$CMakeExtraUtils_ROOT" ]] && rlRun "configure_args=\"\${configure_args} -DCMakeExtraUtils_ROOT=\${CMakeExtraUtils_ROOT}\"" 0 "Add CMakeExtraUtils_ROOT"
1414
rlRun "set -o pipefail"
1515
rlPhaseEnd
1616

@@ -20,8 +20,8 @@ rlJournalStart
2020
rlPhaseEnd
2121

2222
rlPhaseStartTest "With fallback version"
23-
[[ -d ${build_dir} ]] && rlRun "rm -rf ${build_dir}" 0 "Clean the build directory"
24-
rlRun "fallback_version='0.1.2'" 0 "Set fallback_version"
23+
[[ -d ${build_dir} ]] && rlRun "rm -rf ${build_dir}" 0 "Clean the build directory"
24+
rlRun "fallback_version='0.1.2'" 0 "Set fallback_version"
2525
rlRun -s "cmake ${configure_args} -DFALLBACK_VERSION=${fallback_version}" 0 "CMake configure"
2626
rlAssertGrep "^\[TestProject\] version: ${fallback_version}\$" $rlRun_LOG
2727
rlAssertGrep "^\[TestProject\] version-full: ${fallback_version}\$" $rlRun_LOG
@@ -33,18 +33,18 @@ rlJournalStart
3333
rlRun -s "${build_dir}/version" 0 "Run ./version"
3434
rlAssertGrep "^version: ${fallback_version}\$" $rlRun_LOG
3535
rlAssertGrep "^version-full: ${fallback_version}\$" $rlRun_LOG
36-
rlRun -s "${build_dir}/commit" 0 "Run ./commit"
37-
rlAssertGrep "^version: ${fallback_version}\$" $rlRun_LOG
38-
rlAssertGrep "^version-full: ${fallback_version}\$" $rlRun_LOG
39-
rlAssertGrep "^commit: commit-NOTFOUND\$" $rlRun_LOG
40-
rlAssertGrep "^short-hash: short-hash-NOTFOUND\$" $rlRun_LOG
41-
rlAssertGrep "^describe: describe-NOTFOUND\$" $rlRun_LOG
42-
rlAssertGrep "^distance: distance-NOTFOUND\$" $rlRun_LOG
36+
rlRun -s "${build_dir}/commit" 0 "Run ./commit"
37+
rlAssertGrep "^version: ${fallback_version}\$" $rlRun_LOG
38+
rlAssertGrep "^version-full: ${fallback_version}\$" $rlRun_LOG
39+
rlAssertGrep "^commit: commit-NOTFOUND\$" $rlRun_LOG
40+
rlAssertGrep "^short-hash: short-hash-NOTFOUND\$" $rlRun_LOG
41+
rlAssertGrep "^describe: describe-NOTFOUND\$" $rlRun_LOG
42+
rlAssertGrep "^distance: distance-NOTFOUND\$" $rlRun_LOG
4343
rlPhaseEnd
4444

4545
rlPhaseStartTest "With fallback version + commit"
46-
[[ -d ${build_dir} ]] && rlRun "rm -rf ${build_dir}" 0 "Clean the build directory"
47-
rlRun "fallback_commit='dummy'" 0 "Set fallback_commit"
46+
[[ -d ${build_dir} ]] && rlRun "rm -rf ${build_dir}" 0 "Clean the build directory"
47+
rlRun "fallback_commit='dummy'" 0 "Set fallback_commit"
4848
rlRun -s "cmake ${configure_args} -DFALLBACK_VERSION=${fallback_version} -DFALLBACK_HASH=${fallback_commit}" 0 "CMake configure"
4949
rlAssertGrep "^\[TestProject\] version: ${fallback_version}\$" $rlRun_LOG
5050
rlAssertGrep "^\[TestProject\] version-full: ${fallback_version}\$" $rlRun_LOG
@@ -56,13 +56,38 @@ rlJournalStart
5656
rlRun -s "${build_dir}/version" 0 "Run ./version"
5757
rlAssertGrep "^version: ${fallback_version}\$" $rlRun_LOG
5858
rlAssertGrep "^version-full: ${fallback_version}\$" $rlRun_LOG
59-
rlRun -s "${build_dir}/commit" 0 "Run ./commit"
60-
rlAssertGrep "^version: ${fallback_version}\$" $rlRun_LOG
61-
rlAssertGrep "^version-full: ${fallback_version}\$" $rlRun_LOG
62-
rlAssertGrep "^commit: ${fallback_commit}\$" $rlRun_LOG
63-
rlAssertGrep "^short-hash: short-hash-NOTFOUND\$" $rlRun_LOG
64-
rlAssertGrep "^describe: describe-NOTFOUND\$" $rlRun_LOG
65-
rlAssertGrep "^distance: distance-NOTFOUND\$" $rlRun_LOG
59+
rlRun -s "${build_dir}/commit" 0 "Run ./commit"
60+
rlAssertGrep "^version: ${fallback_version}\$" $rlRun_LOG
61+
rlAssertGrep "^version-full: ${fallback_version}\$" $rlRun_LOG
62+
rlAssertGrep "^commit: ${fallback_commit}\$" $rlRun_LOG
63+
rlAssertGrep "^short-hash: short-hash-NOTFOUND\$" $rlRun_LOG
64+
rlAssertGrep "^describe: describe-NOTFOUND\$" $rlRun_LOG
65+
rlAssertGrep "^distance: distance-NOTFOUND\$" $rlRun_LOG
66+
rlPhaseEnd
67+
68+
rlPhaseStartTest "With fallback version + git repo, no tag"
69+
[[ -d ${build_dir} ]] && rlRun "rm -rf ${build_dir}" 0 "Clean the build directory"
70+
rlRun "git init"
71+
rlRun "git add CMakeLists.txt .git_archival.txt src pyproject.toml" 0 "Git add basic files"
72+
rlRun "git commit -m 'Initial commit'" 0 "Git commit (initial)"
73+
rlRun -s "cmake ${configure_args} -DFALLBACK_VERSION=${fallback_version}" 0 "CMake configure"
74+
rlAssertGrep "^\[TestProject\] version: ${fallback_version}\$" $rlRun_LOG
75+
rlAssertGrep "^\[TestProject\] version-full: ${fallback_version}\$" $rlRun_LOG
76+
rlAssertGrep "^\[TestProject\] commit: commit-NOTFOUND\$" $rlRun_LOG
77+
rlAssertGrep "^\[TestProject\] short-hash: short-hash-NOTFOUND\$" $rlRun_LOG
78+
rlAssertGrep "^\[TestProject\] describe: describe-NOTFOUND\$" $rlRun_LOG
79+
rlAssertGrep "^\[TestProject\] distance: distance-NOTFOUND\$" $rlRun_LOG
80+
rlRun -s "cmake ${build_args}" 0 "CMake build"
81+
rlRun -s "${build_dir}/version" 0 "Run ./version"
82+
rlAssertGrep "^version: ${fallback_version}\$" $rlRun_LOG
83+
rlAssertGrep "^version-full: ${fallback_version}\$" $rlRun_LOG
84+
rlRun -s "${build_dir}/commit" 0 "Run ./commit"
85+
rlAssertGrep "^version: ${fallback_version}\$" $rlRun_LOG
86+
rlAssertGrep "^version-full: ${fallback_version}\$" $rlRun_LOG
87+
rlAssertGrep "^commit: commit-NOTFOUND\$" $rlRun_LOG
88+
rlAssertGrep "^short-hash: short-hash-NOTFOUND\$" $rlRun_LOG
89+
rlAssertGrep "^describe: describe-NOTFOUND\$" $rlRun_LOG
90+
rlAssertGrep "^distance: distance-NOTFOUND\$" $rlRun_LOG
6691
rlPhaseEnd
6792

6893
rlPhaseStartCleanup

0 commit comments

Comments
 (0)