[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [61082] trunk/blender: Made buildinfo aware of builds from GIT

IRIE Shinsuke irieshinsuke at yahoo.co.jp
Sat Nov 16 12:35:23 CET 2013


Why is the same if(EXISTS ${SOURCE_DIR}/.git/) ... endif() nested
in buildinfo.cmake?

IRIE Shinsuke

13/11/04, Sergey Sharybin wrote:
> Revision: 61082
>            http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=61082
> Author:   nazgul
> Date:     2013-11-04 13:21:39 +0000 (Mon, 04 Nov 2013)
> Log Message:
> -----------
> Made buildinfo aware of builds from GIT
>
> - Use commit number since last annotated tag as a
>    revision number replacement. It'll eb followed
>    by 'M' symbol if there're local modification in
>    the source tree.
>
> - Commit short SHA1 is included. Helps getting
>    information about commit used to build blender
>    with much faster.
>
> - If build is not done from master branch, this also
>    will be noticed in the splash screen.
>
> This commit also replaces revision stored in the
> files with git-specific fields (change and hash).
> This is kind of breaks compatibility, meaning
> files which were saved before this change wouldn't
> display any information about which revision they
> were saved with. When we'll finally switch to git,
> we'll see proper hash and change number since
> previous release in the files, for until then
> svn version will be used as a change number and
> hash will be empty.
>
> Not a huge deal, since this field was only used
> by developers to help torubleshooting things and
> isn't needed for blender itself.
>
> Some additional tweaks are probably needed :)
>
> Modified Paths:
> --------------
>      trunk/blender/build_files/cmake/buildinfo.cmake
>      trunk/blender/build_files/scons/tools/Blender.py
>      trunk/blender/release/scripts/modules/sys_info.py
>      trunk/blender/source/blender/blenkernel/BKE_main.h
>      trunk/blender/source/blender/blenloader/intern/readfile.c
>      trunk/blender/source/blender/blenloader/intern/writefile.c
>      trunk/blender/source/blender/collada/AnimationExporter.h
>      trunk/blender/source/blender/collada/DocumentExporter.cpp
>      trunk/blender/source/blender/makesdna/DNA_fileglobal_types.h
>      trunk/blender/source/blender/python/intern/bpy_app.c
>      trunk/blender/source/blender/windowmanager/intern/wm_operators.c
>      trunk/blender/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt
>      trunk/blender/source/creator/CMakeLists.txt
>      trunk/blender/source/creator/buildinfo.c
>      trunk/blender/source/creator/creator.c
>
> Modified: trunk/blender/build_files/cmake/buildinfo.cmake
> ===================================================================
> --- trunk/blender/build_files/cmake/buildinfo.cmake	2013-11-04 12:50:33 UTC (rev 61081)
> +++ trunk/blender/build_files/cmake/buildinfo.cmake	2013-11-04 13:21:39 UTC (rev 61082)
> @@ -1,17 +1,83 @@
>   # This is called by cmake as an extermal process from
>   # ./source/creator/CMakeLists.txt to write ./source/creator/buildinfo.h
>
> -# The FindSubversion.cmake module is part of the standard distribution
> -include(FindSubversion)
> -
>   # Extract working copy information for SOURCE_DIR into MY_XXX variables
>   # with a default in case anything fails, for examble when using git-svn
> -set(MY_WC_REVISION "unknown")
> +set(MY_WC_HASH "")
> +set(MY_WC_BRANCH "")
> +set(MY_WC_CHANGE "unknown")
> +
>   # Guess if this is a SVN working copy and then look up the revision
> -if(EXISTS ${SOURCE_DIR}/.svn/)
> -	if(Subversion_FOUND)
> -		Subversion_WC_INFO(${SOURCE_DIR} MY)
> +if(EXISTS ${SOURCE_DIR}/.git/)
> +	if(EXISTS ${SOURCE_DIR}/.git/)
> +		# The FindSubversion.cmake module is part of the standard distribution
> +		include(FindGit)
> +		if(GIT_FOUND)
> +			execute_process(COMMAND git rev-parse --short HEAD
> +			                WORKING_DIRECTORY ${SOURCE_DIR}
> +			                OUTPUT_VARIABLE MY_WC_HASH
> +			                OUTPUT_STRIP_TRAILING_WHITESPACE)
> +
> +			execute_process(COMMAND git rev-parse --abbrev-ref HEAD
> +			                WORKING_DIRECTORY ${SOURCE_DIR}
> +			                OUTPUT_VARIABLE MY_WC_BRANCH
> +			                OUTPUT_STRIP_TRAILING_WHITESPACE)
> +
> +			# Get latest version tag
> +			execute_process(COMMAND git describe --match "v[0-9]*" --abbrev=0
> +			                WORKING_DIRECTORY ${SOURCE_DIR}
> +			                OUTPUT_VARIABLE _git_latest_version_tag
> +			                OUTPUT_STRIP_TRAILING_WHITESPACE)
> +
> +			if(NOT _git_latest_version_tag STREQUAL "")
> +				execute_process(COMMAND git rev-list HEAD ^${_git_latest_version_tag} --count
> +				                WORKING_DIRECTORY ${SOURCE_DIR}
> +				                OUTPUT_VARIABLE MY_WC_CHANGE
> +				                OUTPUT_STRIP_TRAILING_WHITESPACE)
> +			else()
> +				# For the time being we don't have annotated release tags,
> +				# count all the revisions in branch.
> +				execute_process(COMMAND git rev-list HEAD --count
> +				                WORKING_DIRECTORY ${SOURCE_DIR}
> +				                OUTPUT_VARIABLE MY_WC_CHANGE
> +				                OUTPUT_STRIP_TRAILING_WHITESPACE)
> +			endif()
> +
> +			# Update GIT index before getting dirty files
> +			execute_process(COMMAND git update-index -q --refresh
> +			                WORKING_DIRECTORY ${SOURCE_DIR}
> +			                OUTPUT_STRIP_TRAILING_WHITESPACE)
> +
> +			execute_process(COMMAND git diff-index --name-only HEAD --
> +			                WORKING_DIRECTORY ${SOURCE_DIR}
> +			                OUTPUT_VARIABLE _git_changed_files
> +			                OUTPUT_STRIP_TRAILING_WHITESPACE)
> +
> +			if(NOT _git_changed_files STREQUAL "")
> +				set(MY_WC_CHANGE "${MY_WC_CHANGE}M")
> +			endif()
> +
> +			unset(_git_changed_files)
> +			unset(_git_latest_version_tag)
> +		endif()
>   	endif()
> +else()
> +	# Some crazy folks like me could have hacked git-svn chekout in a way
> +	# so svnversion gives proper svn revision for themm which required having
> +	# empty .svn folder.
> +	#
> +	# For such a crazy blokes put svn check into an else branch.
> +	#
> +	#                                                              (sergey)
> +	if(EXISTS ${SOURCE_DIR}/.svn/)
> +		# The FindSubversion.cmake module is part of the standard distribution
> +		include(FindSubversion)
> +
> +		if(Subversion_FOUND)
> +			Subversion_WC_INFO(${SOURCE_DIR} MY)
> +			set(MY_WC_CHANGE "${MY_WC_REVISION}")
> +		endif()
> +	endif()
>   endif()
>
>   # BUILD_PLATFORM and BUILD_PLATFORM are taken from CMake
> @@ -27,7 +93,9 @@
>
>   # Write a file with the SVNVERSION define
>   file(WRITE buildinfo.h.txt
> -	"#define BUILD_REV \"${MY_WC_REVISION}\"\n"
> +	"#define BUILD_HASH \"${MY_WC_HASH}\"\n"
> +	"#define BUILD_CHANGE \"${MY_WC_CHANGE}\"\n"
> +	"#define BUILD_BRANCH \"${MY_WC_BRANCH}\"\n"
>   	"#define BUILD_DATE \"${BUILD_DATE}\"\n"
>   	"#define BUILD_TIME \"${BUILD_TIME}\"\n"
>   )
>
> Modified: trunk/blender/build_files/scons/tools/Blender.py
> ===================================================================
> --- trunk/blender/build_files/scons/tools/Blender.py	2013-11-04 12:50:33 UTC (rev 61081)
> +++ trunk/blender/build_files/scons/tools/Blender.py	2013-11-04 13:21:39 UTC (rev 61082)
> @@ -410,9 +410,24 @@
>       """
>       build_date = time.strftime ("%Y-%m-%d")
>       build_time = time.strftime ("%H:%M:%S")
> -    build_rev = os.popen('svnversion').read()[:-1] # remove \n
> -    if build_rev == '':
> -        build_rev = '-UNKNOWN-'
> +    if os.path.isdir(os.path.abspath('.git')):
> +        latest_version_tag = os.popen('git describe --match "v[0-9]*" --abbrev=0').read().strip()
> +        if latest_version_tag:
> +            build_change = os.popen('git rev-list HEAD ' + latest_version_tag + ' --count').read().strip()
> +        else:
> +            build_change = os.popen('git rev-list HEAD --count').read().strip()
> +
> +        build_hash = os.popen('git rev-parse --short HEAD').read().strip()
> +        build_branch = os.popen('git rev-parse --abbrev-ref HEAD').read().strip()
> +    elif os.path.isdir(os.path.abspath('.svn')):
> +        build_hash = ''
> +        build_change = os.popen('svnversion').read()[:-1] # remove \n
> +        build_branch = ''
> +    else:
> +        build_hash = ''
> +        build_change = 'unknown'
> +        build_branch = ''
> +
>       if lenv['BF_DEBUG']:
>           build_type = "Debug"
>           build_cflags = ' '.join(lenv['CFLAGS'] + lenv['CCFLAGS'] + lenv['BF_DEBUG_CCFLAGS'] + lenv['CPPFLAGS'])
> @@ -429,7 +444,9 @@
>           lenv.Append (CPPDEFINES = ['BUILD_TIME=\\"%s\\"'%(build_time),
>                                       'BUILD_DATE=\\"%s\\"'%(build_date),
>                                       'BUILD_TYPE=\\"%s\\"'%(build_type),
> -                                    'BUILD_REV=\\"%s\\"'%(build_rev),
> +                                    'BUILD_HASH=\\"%s\\"'%(build_hash),
> +                                    'BUILD_CHANGE=\\"%s\\"'%(build_change),
> +                                    'BUILD_BRANCH=\\"%s\\"'%(build_branch),
>                                       'WITH_BUILDINFO',
>                                       'BUILD_PLATFORM=\\"%s:%s\\"'%(platform.system(), platform.architecture()[0]),
>                                       'BUILD_CFLAGS=\\"%s\\"'%(build_cflags),
>
> Modified: trunk/blender/release/scripts/modules/sys_info.py
> ===================================================================
> --- trunk/blender/release/scripts/modules/sys_info.py	2013-11-04 12:50:33 UTC (rev 61081)
> +++ trunk/blender/release/scripts/modules/sys_info.py	2013-11-04 13:21:39 UTC (rev 61082)
> @@ -67,7 +67,19 @@
>       # build info
>       output.write("\nBlender:\n")
>       output.write(lilies)
> -    output.write("version %s, revision %r. %r\n" % (bpy.app.version_string, bpy.app.build_revision, bpy.app.build_type))
> +    if bpy.app.build_branch and bpy.app.build_branch != "Unknown":
> +        output.write("version %s, branch %r, chage %r, hash %r, %r\n" %
> +            (bpy.app.version_string,
> +             bpy.app.build_branch,
> +             bpy.app.build_change,
> +             bpy.app.build_hash,
> +             bpy.app.build_type))
> +    else:
> +        output.write("version %s, revision %r. %r\n" %
> +            (bpy.app.version_string,
> +             bpy.app.build_change,
> +             bpy.app.build_type))
> +
>       output.write("build date: %r, %r\n" % (bpy.app.build_date, bpy.app.build_time))
>       output.write("platform: %r\n" % (bpy.app.build_platform))
>       output.write("binary path: %r\n" % (bpy.app.binary_path))
>
> Modified: trunk/blender/source/blender/blenkernel/BKE_main.h
> ===================================================================
> --- trunk/blender/source/blender/blenkernel/BKE_main.h	2013-11-04 12:50:33 UTC (rev 61081)
> +++ trunk/blender/source/blender/blenkernel/BKE_main.h	2013-11-04 13:21:39 UTC (rev 61082)
> @@ -53,7 +53,7 @@
>   	char name[1024]; /* 1024 = FILE_MAX */
>   	short versionfile, subversionfile;  /* see BLENDER_VERSION, BLENDER_SUBVERSION */
>   	short minversionfile, minsubversionfile;
> -	int revision;		/* svn revision of binary that saved file */
> +	char build_change[16], build_hash[16];  /* change number and hash from buildinfo */
>   	short recovered;	/* indicate the main->name (file) is the recovered one */
>   	
>   	struct Library *curlib;
>
> Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
> ===================================================================
> --- trunk/blender/source/blender/blenloader/intern/readfile.c	2013-11-04 12:50:33 UTC (rev 61081)
> +++ trunk/blender/source/blender/blenloader/intern/readfile.c	2013-11-04 13:21:39 UTC (rev 61082)
> @@ -7292,7 +7292,8 @@
>   	bfd->main->subversionfile = fg->subversion;
>   	bfd->main->minversionfile = fg->minversion;
>   	bfd->main->minsubversionfile = fg->minsubversion;
> -	bfd->main->revision = fg->revision;
> +	BLI_strncpy(bfd->main->build_change, fg->build_change, sizeof(bfd->main->build_change));
> +	BLI_strncpy(bfd->main->build_hash, fg->build_hash, sizeof(bfd->main->build_hash));
>   	
>   	bfd->winpos = fg->winpos;
>   	bfd->fileflags = fg->fileflags;
> @@ -7926,8 +7927,11 @@
>   {
>   	/* WATCH IT!!!: pointers from libdata have not been converted */
>   	
> -	if (G.debug & G_DEBUG)
> -		printf("read file %s\n  Version %d sub %d svn r%d\n", fd->relabase, main->versionfile, main->subversionfile, main->revision);
> +	if (G.debug & G_DEBUG) {
> +		printf("read file %s\n  Version %d sub %d change %s hash %s\n",
> +		       fd->relabase, main->versionfile, main->subversionfile,
> +		       main->build_change, main->build_hash);
> +	}
>   	
>   	blo_do_versions_pre250(fd, lib, main);
>   	blo_do_versions_250(fd, lib, main);
>
> Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
> ===================================================================
> --- trunk/blender/source/blender/blenloader/intern/writefile.c	2013-11-04 12:50:33 UTC (rev 61081)
> +++ trunk/blender/source/blender/blenloader/intern/writefile.c	2013-11-04 13:21:39 UTC (rev 61082)
> @@ -3261,7 +3261,7 @@
>   	char subvstr[8];
>   	
>   	/* prevent mem checkers from complaining */
> -	fg.pads= fg.pad= 0;
> +	fg.pads= 0;
>   	memset(fg.filename, 0, sizeof(fg.filename));
>
>   	current_screen_compat(mainvar, &screen);
> @@ -3285,11 +3285,14 @@
>   	fg.minsubversion= BLENDER_MINSUBVERSION;
>   #ifdef WITH_BUILDINFO
>   	{
> -		extern char build_rev[];
> -		fg.revision= atoi(build_rev);
>
> @@ Diff output truncated at 10240 characters. @@
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>


More information about the Bf-committers mailing list