123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- # ##### BEGIN GPL LICENSE BLOCK #####
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License
- # as published by the Free Software Foundation; either version 2
- # of the License, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software Foundation,
- # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- #
- # ##### END GPL LICENSE BLOCK #####
- # Runs on Buildbot master, to unpack incoming unload.zip into latest
- # builds directory and remove older builds.
- # <pep8 compliant>
- import os
- import shutil
- import sys
- import zipfile
- # extension stripping
- def strip_extension(filename):
- extensions = '.zip', '.tar', '.bz2', '.gz', '.tgz', '.tbz', '.exe'
- for ext in extensions:
- if filename.endswith(ext):
- filename = filename[:-len(ext)]
- return filename
- # extract platform from package name
- def get_platform(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 = strip_extension(filename)
- filename = strip_extension(filename)
- tokens = filename.split("-")
- platforms = ('osx', 'mac', 'bsd',
- 'win', 'linux', 'source',
- 'irix', 'solaris')
- 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_branch(filename):
- if filename.startswith("blender-2.8"):
- return "blender2.8"
- tokens = filename.split("-")
- branch = ""
- for token in tokens:
- if token == "blender":
- return branch
- if branch == "":
- branch = token
- else:
- branch = branch + "-" + token
- return ""
- # get filename
- if len(sys.argv) < 2:
- sys.stderr.write("Not enough arguments, expecting file to unpack\n")
- sys.exit(1)
- filename = sys.argv[1]
- # open zip file
- if not os.path.exists(filename):
- sys.stderr.write("File %r not found.\n" % filename)
- sys.exit(1)
- try:
- z = zipfile.ZipFile(filename, "r")
- except Exception as ex:
- sys.stderr.write('Failed to open zip file: %s\n' % str(ex))
- sys.exit(1)
- if len(z.namelist()) != 1:
- sys.stderr.write("Expected one file in %r." % filename)
- sys.exit(1)
- package = z.namelist()[0]
- packagename = os.path.basename(package)
- # detect platform and branch
- platform = get_platform(packagename)
- branch = get_branch(packagename)
- if platform == '':
- sys.stderr.write('Failed to detect platform ' +
- 'from package: %r\n' % packagename)
- sys.exit(1)
- # extract
- if not branch or branch == 'master':
- directory = 'public_html/download'
- elif branch == 'experimental-build':
- directory = 'public_html/download/experimental'
- else:
- directory = 'public_html/download'
- try:
- filename = os.path.join(directory, packagename)
- zf = z.open(package)
- f = file(filename, "wb")
- shutil.copyfileobj(zf, f)
- os.chmod(filename, 0644)
- zf.close()
- z.close()
- except Exception as ex:
- sys.stderr.write('Failed to unzip package: %s\n' % str(ex))
- sys.exit(1)
- # remove other files from the same platform and branch
- try:
- for f in os.listdir(directory):
- if get_platform(f) == platform and get_branch(f) == branch:
- if f != packagename:
- os.remove(os.path.join(directory, f))
- except Exception as ex:
- sys.stderr.write('Failed to remove old packages: %s\n' % str(ex))
- sys.exit(1)
|