From f3e87a0d01324776edc1f7d4a80c43e8c5adb603 Mon Sep 17 00:00:00 2001 From: Mitchell Stokes Date: Sun, 15 Jul 2018 11:34:36 -0700 Subject: [PATCH] deploy-ng: Create zip installers without first creating a temporary directory --- direct/src/showutil/dist.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/direct/src/showutil/dist.py b/direct/src/showutil/dist.py index 9fcbce94be..55ec22504d 100644 --- a/direct/src/showutil/dist.py +++ b/direct/src/showutil/dist.py @@ -1073,6 +1073,26 @@ class bdist_apps(setuptools.Command): for key, value in _parse_dict(self.installers).items() } + def _get_archive_basedir(self): + return self.distribution.get_name() + + def create_zip(self, basename, build_dir): + import zipfile + + base_dir = self._get_archive_basedir() + + with zipfile.ZipFile(basename+'.zip', 'w', compression=zipfile.ZIP_DEFLATED) as zf: + zf.write(build_dir, base_dir) + + for dirpath, dirnames, filenames in os.walk(build_dir): + for name in sorted(dirnames): + path = os.path.normpath(os.path.join(dirpath, name)) + zf.write(path, path.replace(build_dir, base_dir, 1)) + for name in filenames: + path = os.path.normpath(os.path.join(dirpath, name)) + if os.path.isfile(path): + zf.write(path, path.replace(build_dir, base_dir, 1)) + def run(self): build_cmd = self.get_finalized_command('build_apps') if not build_cmd.platforms: @@ -1092,7 +1112,9 @@ class bdist_apps(setuptools.Command): for installer in installers: self.announce('\nBuilding {} for platform: {}'.format(installer, platform), distutils.log.INFO) - if installer in ('zip', 'gztar', 'bztar', 'xztar'): + if installer == 'zip': + self.create_zip(basename, build_dir) + elif installer in ('gztar', 'bztar', 'xztar'): base_dir = self.distribution.get_name() temp_dir = os.path.join(build_base, base_dir) if (os.path.exists(temp_dir)):