Fix issues with make_update.py when run from release branch

The issue was rooting to the fact that the script was iterating into
every directory inside of blender.git/../lib/ and attempted to switch
them to the desired path. This doesn't work in an environment where
both master and release branch are built (or any environment where
non-needed SVN directories are not automatically removed).

This change makes it so script explicitly generates a list of
directories which are required for the build. For example, the script
now stores an exact folder with ABI such as win64_vc14.

Only those explicitly listed directories will be updated.

This allows to:

- Solve compilation failure of 2.81 branch after checkout for
  win64_vc15 libraries has been created.

- Fail compilation if actually expected tag is missing (for example,
  when trying to build release branch prior to libraries tag).

Now, there was a confusing logic about possible .svn folder in
lib_dirpath (effectively, blender.git/../lib/.svn) which is not
something what is supposed to happen with the setup of buildbot we are
using for quite some time now. This logic has been removed now.

This change includes old-style string format(), mainly because it is
not know that the buidlbot scripts are run using python3 on CentOS
builder.

Differential Revision: https://developer.blender.org/D6230
This commit is contained in:
2019-11-12 11:16:01 +01:00
parent 65bc5041c3
commit 8e9e58895b

View File

@@ -41,6 +41,11 @@ def svn_update(args, release_version):
lib_dirpath = os.path.join(get_blender_git_root(), '..', 'lib')
svn_url = make_utils.svn_libraries_base_url(release_version)
# List of directory names which corresponds to used SVN checkouts.
# Is used to ensure the checkout points to a valid branch/tag.
# Should consists only of directory name, such as "win64_vc14", for example.
used_lib_dir_names = []
# Checkout precompiled libraries
if sys.platform == 'darwin':
lib_platform = "darwin"
@@ -58,6 +63,8 @@ def svn_update(args, release_version):
if lib_platform:
lib_platform_dirpath = os.path.join(lib_dirpath, lib_platform)
used_lib_dir_names.append(lib_platform)
if not os.path.exists(lib_platform_dirpath):
print_stage("Checking out Precompiled Libraries")
@@ -72,6 +79,8 @@ def svn_update(args, release_version):
lib_tests = "tests"
lib_tests_dirpath = os.path.join(lib_dirpath, lib_tests)
used_lib_dir_names.append(lib_tests)
if not os.path.exists(lib_tests_dirpath):
print_stage("Checking out Tests")
@@ -86,20 +95,13 @@ def svn_update(args, release_version):
print_stage("Updating Precompiled Libraries and Tests")
if os.path.isdir(lib_dirpath):
for dirname in os.listdir(lib_dirpath):
for dirname in used_lib_dir_names:
print_stage("Updating {}" . format(dirname))
dirpath = os.path.join(lib_dirpath, dirname)
if dirname == ".svn":
# Cleanup must be run from svn root directory if it exists.
if not make_utils.command_missing(args.svn_command):
call(svn_non_interactive + ["cleanup", lib_dirpath])
continue
svn_dirpath = os.path.join(dirpath, ".svn")
svn_root_dirpath = os.path.join(lib_dirpath, ".svn")
if os.path.isdir(dirpath) and \
(os.path.exists(svn_dirpath) or os.path.exists(svn_root_dirpath)):
if os.path.isdir(dirpath) and os.path.exists(svn_dirpath):
if make_utils.command_missing(args.svn_command):
sys.stderr.write("svn not found, can't update libraries\n")
sys.exit(1)