Don't replace daily build with release build of the same version
And simplify filename parsing for new conventions.
This commit is contained in:
108
master_unpack.py
108
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)
|
||||
|
Reference in New Issue
Block a user