Skip to content

Commit 00a83a5

Browse files
dpark01patvarilly
authored andcommitted
Make CheckGit.cmake robust to shallow clones and missing git history
CheckGitVersion() unconditionally accessed two elements from git log output, causing a CMake LIST index error when fewer than 2 commits were available (e.g., shallow clones with --depth 1, source tarballs, or fresh repos). Add RESULT_VARIABLE checks to detect git command failures, and verify list length before accessing elements. Fall back to "unknown" when git info is unavailable, which correctly marks the build as non-release.
1 parent 55fbec7 commit 00a83a5

1 file changed

Lines changed: 22 additions & 4 deletions

File tree

CheckGit.cmake

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,11 @@ function(CheckGitVersion)
3939
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
4040
OUTPUT_VARIABLE GIT_STATUS_UNCOMMITTED_CHANGES
4141
OUTPUT_STRIP_TRAILING_WHITESPACE
42+
RESULT_VARIABLE GIT_STATUS_RESULT
4243
)
43-
if ("${GIT_STATUS_UNCOMMITTED_CHANGES}" STREQUAL "")
44+
if (GIT_STATUS_RESULT)
45+
set(GIT_UNCOMMITED_CHANGES false)
46+
elseif ("${GIT_STATUS_UNCOMMITTED_CHANGES}" STREQUAL "")
4447
set(GIT_UNCOMMITED_CHANGES false)
4548
else ()
4649
set(GIT_UNCOMMITED_CHANGES true)
@@ -52,10 +55,25 @@ function(CheckGitVersion)
5255
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
5356
OUTPUT_VARIABLE TWO_GIT_HASHES_STR
5457
OUTPUT_STRIP_TRAILING_WHITESPACE
58+
RESULT_VARIABLE GIT_LOG_RESULT
5559
)
56-
string(REPLACE "\n" ";" TWO_GIT_HASHES_LIST "${TWO_GIT_HASHES_STR}")
57-
LIST(GET TWO_GIT_HASHES_LIST 0 GIT_HASH)
58-
LIST(GET TWO_GIT_HASHES_LIST 1 PREV_GIT_HASH)
60+
if (GIT_LOG_RESULT)
61+
set(GIT_HASH "unknown")
62+
set(PREV_GIT_HASH "unknown")
63+
else ()
64+
string(REPLACE "\n" ";" TWO_GIT_HASHES_LIST "${TWO_GIT_HASHES_STR}")
65+
list(LENGTH TWO_GIT_HASHES_LIST TWO_GIT_HASHES_LEN)
66+
if (TWO_GIT_HASHES_LEN GREATER_EQUAL 1)
67+
list(GET TWO_GIT_HASHES_LIST 0 GIT_HASH)
68+
else ()
69+
set(GIT_HASH "unknown")
70+
endif ()
71+
if (TWO_GIT_HASHES_LEN GREATER_EQUAL 2)
72+
list(GET TWO_GIT_HASHES_LIST 1 PREV_GIT_HASH)
73+
else ()
74+
set(PREV_GIT_HASH "unknown")
75+
endif ()
76+
endif ()
5977

6078
CheckGitRead(GIT_HASH_CACHE PREV_GIT_HASH_CACHE GIT_UNCOMMITED_CHANGES_CACHE)
6179
if (NOT EXISTS ${post_configure_dir})

0 commit comments

Comments
 (0)