aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-02-03 11:14:59 +0100
committerShauren <shauren.trinity@gmail.com>2023-02-03 11:14:59 +0100
commit03837b252579bdacdb8a128e52a12a748855e2fe (patch)
tree3774127913d394bef932fdb3b1dfc5217aca1a76
parent05581806cdb35b2cde4760f8c73da1c04ee8cf3b (diff)
Build: Make genrev more resilient to invalid source code checkouts
-rw-r--r--cmake/genrev.cmake89
1 files changed, 46 insertions, 43 deletions
diff --git a/cmake/genrev.cmake b/cmake/genrev.cmake
index 1d334e393e9..1dd313be3b3 100644
--- a/cmake/genrev.cmake
+++ b/cmake/genrev.cmake
@@ -24,13 +24,6 @@ if(WITHOUT_GIT)
string(TIMESTAMP rev_date_fallback "%Y-%m-%d %H:%M:%S" UTC)
else()
if(GIT_EXECUTABLE)
- # Retrieve repository dirty status
- execute_process(
- COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD --
- WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
- RESULT_VARIABLE is_dirty
- )
-
# Create a revision-string that we can use
execute_process(
COMMAND "${GIT_EXECUTABLE}" rev-parse --short=12 HEAD
@@ -40,58 +33,68 @@ else()
ERROR_QUIET
)
- # Append dirty marker to commit hash
- if(is_dirty)
- set(rev_hash "${rev_hash}+")
- endif()
-
- # And grab the commits timestamp
- execute_process(
- COMMAND "${GIT_EXECUTABLE}" show -s --format=%ci
- WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
- OUTPUT_VARIABLE rev_date
- OUTPUT_STRIP_TRAILING_WHITESPACE
- ERROR_QUIET
- )
+ if(rev_hash)
+ # Retrieve repository dirty status
+ execute_process(
+ COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD --
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ RESULT_VARIABLE is_dirty
+ ERROR_QUIET
+ )
- # Also retrieve branch name
- execute_process(
- COMMAND "${GIT_EXECUTABLE}" symbolic-ref -q --short HEAD
- WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
- OUTPUT_VARIABLE rev_branch
- OUTPUT_STRIP_TRAILING_WHITESPACE
- ERROR_QUIET
- )
+ # Append dirty marker to commit hash
+ if(is_dirty)
+ set(rev_hash "${rev_hash}+")
+ endif()
- # when ran on CI, repository is put in detached HEAD state, attempt to scan for known local branches
- if(NOT rev_branch)
+ # And grab the commits timestamp
execute_process(
- COMMAND "${GIT_EXECUTABLE}" for-each-ref --points-at=HEAD refs/heads "--format=%(refname:short)"
+ COMMAND "${GIT_EXECUTABLE}" show -s --format=%ci
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
- OUTPUT_VARIABLE rev_branch
+ OUTPUT_VARIABLE rev_date
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
- endif()
- # if local branch scan didn't find anything, try remote branches
- if(NOT rev_branch)
+ # Also retrieve branch name
execute_process(
- COMMAND "${GIT_EXECUTABLE}" for-each-ref --points-at=HEAD refs/remotes "--format=%(refname:short)"
+ COMMAND "${GIT_EXECUTABLE}" symbolic-ref -q --short HEAD
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE rev_branch
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
- endif()
- # give up finding a name for branch, use commit hash
- if(NOT rev_branch)
- set(rev_branch ${rev_hash})
- endif()
+ # when ran on CI, repository is put in detached HEAD state, attempt to scan for known local branches
+ if(NOT rev_branch)
+ execute_process(
+ COMMAND "${GIT_EXECUTABLE}" for-each-ref --points-at=HEAD refs/heads "--format=%(refname:short)"
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ OUTPUT_VARIABLE rev_branch
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET
+ )
+ endif()
+
+ # if local branch scan didn't find anything, try remote branches
+ if(NOT rev_branch)
+ execute_process(
+ COMMAND "${GIT_EXECUTABLE}" for-each-ref --points-at=HEAD refs/remotes "--format=%(refname:short)"
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ OUTPUT_VARIABLE rev_branch
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET
+ )
+ endif()
- # normalize branch to single line (for-each-ref can output multiple lines if there are multiple branches on the same commit)
- string(REGEX MATCH "^[^ \t\r\n]+" rev_branch ${rev_branch})
+ # give up finding a name for branch, use commit hash
+ if(NOT rev_branch)
+ set(rev_branch ${rev_hash})
+ endif()
+
+ # normalize branch to single line (for-each-ref can output multiple lines if there are multiple branches on the same commit)
+ string(REGEX MATCH "^[^ \t\r\n]+" rev_branch ${rev_branch})
+ endif()
endif()
# Last minute check - ensure that we have a proper revision