This is an automated email from the git hooks/post-receive script. smcv pushed a commit to branch master in repository game-data-packager.
commit 02b4ec8db958ce153e0b0480ca4113d368eb8fe4 Author: Simon McVittie <s...@debian.org> Date: Wed Oct 12 11:32:35 2016 +0100 launcher: add support for launching a demo version --- runtime/launcher.py | 98 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 39 deletions(-) diff --git a/runtime/launcher.py b/runtime/launcher.py index 4ea75eb..a22706a 100755 --- a/runtime/launcher.py +++ b/runtime/launcher.py @@ -182,6 +182,8 @@ class Launcher: description="game-data-packager's game launcher") parser.add_argument('--id', default=name, help='identity of launched game (default: from argv[0])') + parser.add_argument('--demo', default=False, action='store_true', + help='run a demo version even if the full version is available') parser.add_argument('--engine', default=None, help='use the specified game engine, if supported') parser.add_argument('--expansion', default=None, @@ -273,35 +275,59 @@ class Launcher: self.symlink_into_dot_directory = self.data.get( 'symlink_into_dot_directory', []) - for expansion, data in self.data.get('expansions', {}).items(): - base_directories = list(map(expand, data.get('base_directories', - []))) + self.base_directories - - if self.check_required_files(base_directories, - data.get('extra_required_files', [])): - self.symlink_into_dot_directory = ( - self.symlink_into_dot_directory + - data.get('symlink_into_dot_directory', [])) - - aliases = data.get('aliases', []) - if isinstance(aliases, str): - aliases = aliases.split() - - if (self.expansion_name == expansion or - self.expansion_name in aliases): - extra_argv = data.get('extra_argv', []) - if isinstance(extra_argv, str): - extra_argv = extra_argv.split() - self.argv = self.argv + extra_argv - - extra_required_files = data.get('extra_required_files', []) - if isinstance(extra_required_files, str): - extra_required_files = extra_required_files.split() - self.required_files = (self.required_files + - extra_required_files) - - self.base_directories = base_directories - break + + for p in self.base_directories: + logger.debug('Searching: %s' % p) + + # sanity check: game engines often don't cope well with missing data + self.have_all_data = self.check_required_files(self.base_directories, + self.required_files) + + if (self.args.demo or not self.have_all_data) and 'demo' in self.data: + demo_directories = list(map(expand, + self.data['demo'].get('base_directories', + self.data['base_directories']))) + if self.check_required_files(demo_directories, + self.data['demo'].get('required_files', + self.required_files)): + self.have_all_data = True + self.base_directories = demo_directories + + if 'argv' in self.data['demo']: + self.argv = self.data['demo']['argv'] + if isinstance(self.argv, str): + self.argv = self.argv.split() + else: + # assume expansions only work with non-demo data + for expansion, data in self.data.get('expansions', {}).items(): + base_directories = list(map(expand, data.get('base_directories', + []))) + self.base_directories + + if self.check_required_files(base_directories, + data.get('extra_required_files', [])): + self.symlink_into_dot_directory = ( + self.symlink_into_dot_directory + + data.get('symlink_into_dot_directory', [])) + + aliases = data.get('aliases', []) + if isinstance(aliases, str): + aliases = aliases.split() + + if (self.expansion_name == expansion or + self.expansion_name in aliases): + extra_argv = data.get('extra_argv', []) + if isinstance(extra_argv, str): + extra_argv = extra_argv.split() + self.argv = self.argv + extra_argv + + extra_required_files = data.get('extra_required_files', []) + if isinstance(extra_required_files, str): + extra_required_files = extra_required_files.split() + self.required_files = (self.required_files + + extra_required_files) + + self.base_directories = base_directories + break logger.debug('Arguments: %r', self.argv) @@ -341,17 +367,10 @@ class Launcher: Gtk.main() sys.exit(72) # EX_OSFILE - for p in self.base_directories: - logger.debug('Searching: %s' % p) - - # sanity check: game engines often don't cope well with missing data - have_all_data = self.check_required_files(self.base_directories, - self.required_files) - if self.dot_directory is not None: os.makedirs(self.dot_directory, exist_ok=True) - if not have_all_data: + if not self.have_all_data: gui = Gui(self) gui.text_view.get_buffer().set_text( self.load_text('missing-data.txt', 'Data files missing')) @@ -559,8 +578,6 @@ class Launcher: if self.engine is not None: self.argv.insert(0, self.engine) - self.flush() - environ = os.environ.copy() library_path = self.library_path[:] @@ -570,6 +587,9 @@ class Launcher: environ['LD_LIBRARY_PATH'] = ':'.join(library_path) + logger.debug('Executing: %r', self.argv + self.args.arguments) + self.flush() + os.execve(self.argv[0], self.argv + self.args.arguments, environ) raise AssertionError('os.execve should never return') -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/game-data-packager.git _______________________________________________ Pkg-games-commits mailing list Pkg-games-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits