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
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')
-rw-r--r--build_files/cmake/buildinfo.cmake60
-rw-r--r--build_files/scons/tools/Blender.py11
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: