Don't replace daily build with release build of the same version

And simplify filename parsing for new conventions.
This commit is contained in:
2020-02-04 13:20:07 +01:00
parent e7a7944965
commit a910a05caa

View File

@@ -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)