[Bf-blender-cvs] [28f3cc3] master: Fixes for buildinfo hash/branch detection

Sergey Sharybin noreply at git.blender.org
Thu Feb 20 16:44:21 CET 2014


Commit: 28f3cc3eb7026ef931732c332879bbbe81d9bc3b
Author: Sergey Sharybin
Date:   Thu Feb 20 21:43:30 2014 +0600
https://developer.blender.org/rB28f3cc3eb7026ef931732c332879bbbe81d9bc3b

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.

===================================================================

M	build_files/cmake/buildinfo.cmake
M	build_files/scons/tools/Blender.py

===================================================================

diff --git a/build_files/cmake/buildinfo.cmake b/build_files/cmake/buildinfo.cmake
index 9b8f935..48e03ed 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 2c2940a..9fa76c0 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:




More information about the Bf-blender-cvs mailing list