From a910a05caadad3da12288b402b41052396e22826 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 4 Feb 2020 13:20:07 +0100 Subject: [PATCH] Don't replace daily build with release build of the same version And simplify filename parsing for new conventions. --- master_unpack.py | 108 ++++++++++++++++++++++------------------------- 1 file changed, 51 insertions(+), 57 deletions(-) diff --git a/master_unpack.py b/master_unpack.py index 271f714..4d1d271 100644 --- a/master_unpack.py +++ b/master_unpack.py @@ -35,75 +35,65 @@ class Package: def __init__(self, zipname): self.zipname = zipname self.filename = os.path.basename(zipname) - self.platform = self._get_platform(self.filename) - self.branch = self._get_branch(self.filename) - self.version = self._get_version(self.filename) + self.version = "" + self.branch = "" + self.platform = "" + self.parsed = False + self.parse_filename() # extension stripping def _strip_extension(self, filename): - extensions = '.zip', '.tar', '.bz2', '.xz', '.gz', '.tgz', '.tbz', '.exe' - - for ext in extensions: - if filename.endswith(ext): - filename = filename[:-len(ext)] + filename, _ = os.path.splitext(filename) + if filename.endswith('.tar'): + filename, _ = os.path.splitext(filename) return filename # extract platform from package name - def _get_platform(self, filename): - # name is blender-version-platform.extension. we want to get the - # platform out, but there may be some variations, so we fiddle a - # bit to handle current and hopefully future names - filename = self._strip_extension(filename) - filename = self._strip_extension(filename) - + def parse_filename(self): + # Name is one one of: + # blender-version-platform: official release + # blender-version-hash-platform: daily build + # branch-blender-version-hash-platform: branch build + filename = self._strip_extension(self.filename) tokens = filename.split("-") + + if len(tokens) < 3: + return + if "blender" not in tokens: + return + + blender_index = tokens.index("blender") + if not (blender_index + 2 < len(tokens)): + return + + # Detect branch. + branch = "-".join(tokens[:blender_index]) + + # Detect version. + if branch == "": + version = tokens[blender_index + 1] + if len(tokens) == 3: + version += " release" + else: + version = "" + + # Detect platform. + platform = tokens[-1] platforms = ('osx', 'mac', 'bsd', 'win', 'linux', 'source', 'irix', 'solaris', 'mingw') - platform_tokens = [] - found = False - - for i, token in enumerate(tokens): - if not found: - for platform in platforms: - if platform in token.lower(): - found = True - break - - if found: - platform_tokens += [token] - - return '-'.join(platform_tokens) - - - def _get_version(self, filename): - tokens = filename.split("-") - - use_next_token = False - for token in tokens: - if use_next_token: - return token - elif token == "blender": - use_next_token = True - - return "" - - def _get_branch(self, filename): - tokens = filename.split("-") - branch = "" - - for token in tokens: - if token == "blender": - return branch - - if branch == "": - branch = token - else: - branch = branch + "-" + token - - return "" + platform_found = False + for name in platforms: + if platform.lower().startswith(name): + platform_found = True + if not platform_found: + return + self.version = version + self.platform = platform + self.branch = branch + self.parsed = True def get_download_dir(branch): if not branch or branch == 'master': @@ -132,6 +122,10 @@ def open_zipfile(filename): def get_zipfile_packages(zipfile): # List packages in zip file packages = [Package(zipname) for zipname in zipfile.namelist()] + for package in packages: + if not package.parsed: + sys.stderr.write("Failed to parse package filename: %s\n" % str(package.filename)) + sys.exit(1) if len(packages) == 0: sys.stderr.write('Empty zip file\n') sys.exit(1)