From 28f3cc3eb7026ef931732c332879bbbe81d9bc3b Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 20 Feb 2014 21:43:30 +0600 Subject: 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. --- build_files/cmake/buildinfo.cmake | 60 ++++++++++++++++++++++++++++++-------- build_files/scons/tools/Blender.py | 11 ++++++- 2 files changed, 58 insertions(+), 13 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} diff --git a/build_files/scons/tools/Blender.py b/build_files/scons/tools/Blender.py index 2c2940a51fb..9fa76c0bf1a 100644 --- a/build_files/scons/tools/Blender.py +++ b/build_files/scons/tools/Blender.py @@ -426,9 +426,18 @@ def buildinfo(lenv, build_type): build_hash = build_hash.strip() build_branch = os.popen('git rev-parse --abbrev-ref HEAD').read().strip() + if build_branch == 'HEAD': + master_check = os.popen('git branch --list master --contains ' + build_hash).read().strip() + if master_check == 'master': + build_branch = 'master' + if build_hash == '': build_hash = os.popen('git rev-parse --short HEAD').read().strip() no_upstream = True + else: + older_commits = os.popen('git log --oneline HEAD..@{u}').read().strip() + if older_commits: + build_hash = os.popen('git rev-parse --short HEAD').read().strip() # ## Check for local modifications has_local_changes = False @@ -440,7 +449,7 @@ def buildinfo(lenv, build_type): if changed_files: has_local_changes = True elif no_upstream == False: - unpushed_log = os.popen('git log @{u}..').read().strip() + unpushed_log = os.popen('git log --oneline @{u}..').read().strip() has_local_changes = unpushed_log != '' if has_local_changes: -- cgit v1.2.3