Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2014-02-20 19:43:30 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2014-02-20 19:43:30 +0400
commit28f3cc3eb7026ef931732c332879bbbe81d9bc3b (patch)
tree703fbe04cad9a1f263ea91d61cb730c80c935ebf /build_files/cmake
parent4789793f0903fe0ce9daa30c013a4fccf4971e89 (diff)
Fixes for buildinfo hash/branch detection
Branch name and hash didn't work properly when having disconnected HEAD or when having current HEAD below upstream.
Diffstat (limited to 'build_files/cmake')
-rw-r--r--build_files/cmake/buildinfo.cmake60
1 files changed, 48 insertions, 12 deletions
diff --git a/build_files/cmake/buildinfo.cmake b/build_files/cmake/buildinfo.cmake
index 9b8f93584b8..48e03ed869b 100644
--- a/build_files/cmake/buildinfo.cmake
+++ b/build_files/cmake/buildinfo.cmake
@@ -14,25 +14,61 @@ if(EXISTS ${SOURCE_DIR}/.git)
if(GIT_FOUND)
message(STATUS "-- Found Git: ${GIT_EXECUTABLE}")
- execute_process(COMMAND git rev-parse --short @{u}
+ execute_process(COMMAND git rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY ${SOURCE_DIR}
- OUTPUT_VARIABLE MY_WC_HASH
- OUTPUT_STRIP_TRAILING_WHITESPACE
- ERROR_QUIET)
+ OUTPUT_VARIABLE MY_WC_BRANCH
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
- if (MY_WC_HASH STREQUAL "")
- # Local branch, not set to upstream.
- # Well, let's use HEAD for now
+ if(MY_WC_BRANCH STREQUAL "HEAD")
+ # Detached HEAD, check whether commit hash is reachable
+ # in the master branch
execute_process(COMMAND git rev-parse --short HEAD
WORKING_DIRECTORY ${SOURCE_DIR}
OUTPUT_VARIABLE MY_WC_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE)
- endif()
- execute_process(COMMAND git rev-parse --abbrev-ref HEAD
- WORKING_DIRECTORY ${SOURCE_DIR}
- OUTPUT_VARIABLE MY_WC_BRANCH
- OUTPUT_STRIP_TRAILING_WHITESPACE)
+ execute_process(COMMAND git branch --list master --contains ${MY_WC_HASH}
+ WORKING_DIRECTORY ${SOURCE_DIR}
+ OUTPUT_VARIABLE _git_contains_check
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ STRING(REGEX REPLACE "^[ \t]+" "" _git_contains_check "${_git_contains_check}")
+ if(_git_contains_check STREQUAL "master")
+ set(MY_WC_BRANCH "master")
+ endif()
+
+ unset(_git_contains_check)
+ else()
+ execute_process(COMMAND git log HEAD..@{u}
+ WORKING_DIRECTORY ${SOURCE_DIR}
+ OUTPUT_VARIABLE _git_below_check
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(NOT _git_below_check STREQUAL "")
+ # If there're commits between HEAD and upstream this means
+ # that we're reset-ed to older revision. Use it's hash then.
+ execute_process(COMMAND git rev-parse --short HEAD
+ WORKING_DIRECTORY ${SOURCE_DIR}
+ OUTPUT_VARIABLE MY_WC_HASH
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ else()
+ execute_process(COMMAND git rev-parse --short @{u}
+ WORKING_DIRECTORY ${SOURCE_DIR}
+ OUTPUT_VARIABLE MY_WC_HASH
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET)
+
+ if(MY_WC_HASH STREQUAL "")
+ # Local branch, not set to upstream.
+ # Well, let's use HEAD for now
+ execute_process(COMMAND git rev-parse --short HEAD
+ WORKING_DIRECTORY ${SOURCE_DIR}
+ OUTPUT_VARIABLE MY_WC_HASH
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ endif()
+ endif()
+
+ unset(_git_below_check)
+ endif()
execute_process(COMMAND git log -1 --format=%ct
WORKING_DIRECTORY ${SOURCE_DIR}