[game-data-packager] 01/01: look_for_engines(): check if engine is installed/available/up-to-date

Alexandre Detiste detiste-guest at moszumanska.debian.org
Mon Jul 13 07:38:29 UTC 2015


This is an automated email from the git hooks/post-receive script.

detiste-guest pushed a commit to branch master
in repository game-data-packager.

commit c004a852a2ab87d7cd31d1c54ff76608ef50fa95
Author: Alexandre Detiste <alexandre.detiste at gmail.com>
Date:   Mon Jul 13 09:36:13 2015 +0200

    look_for_engines(): check if engine is installed/available/up-to-date
    
    works for most cases, but e.g. not "Inherit the Earth"
    EN vs DE versions. (but ScummVM 1.8.0 is around the corner)
---
 game_data_packager/__init__.py | 60 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/game_data_packager/__init__.py b/game_data_packager/__init__.py
index 919c89a..aa17d69 100644
--- a/game_data_packager/__init__.py
+++ b/game_data_packager/__init__.py
@@ -2351,6 +2351,57 @@ class GameData(object):
         self.argument_parser = parser
         return parser
 
+    def look_for_engines(self, packages, force=False):
+        engines = set(p.engine or self.engine for p in packages)
+        if len(engines) != 1:
+            # XXX: handle complex cases too (e.g. Inherit the Earth DE vs EN)
+            return
+        engine = list(engines)[0]
+        if '(' in engine:
+            engine, ver = engine.split(maxsplit=1)
+            ver = ver.strip('(>=) ')
+        else:
+            ver = None
+
+        # check engine
+        is_installed = PACKAGE_CACHE.is_installed(engine)
+        if not is_installed and not PACKAGE_CACHE.is_available(engine):
+            if force:
+                logger.warning('Engine "%s" is not available, '
+                               'proceeding anyway' % engine)
+            else:
+                logger.error('Engine "%s" is not (yet) available, '
+                             'aborting' % engine)
+                raise SystemExit(1)
+        if ver is None:
+            return
+
+        # check version
+        if is_installed:
+            current_ver = subprocess.check_output(['dpkg-query',
+                   '--show', '--showformat', '${Version}', engine],
+                    universal_newlines=True)
+        else:
+            current_ver = subprocess.check_output(['apt-cache',
+                   'madison', engine],
+                    universal_newlines=True)
+            current_ver = current_ver.splitlines()[0]
+            current_ver = current_ver.split('|')[1].strip()
+
+        up_to_date = subprocess.call(['dpkg', '--compare-versions',
+                    current_ver, '>=', ver]) == 0
+        if up_to_date:
+            return
+        elif force:
+            logger.warning('Engine "%s" is not up-to-date '
+                           '(version %s is needed), '
+                           'proceeding anyway' % (engine, ver))
+        else:
+            logger.error('Engine "%s" is not up-to-date, '
+                         '(version %s is needed), '
+                         'aborting' % (engine, ver))
+            raise SystemExit(1)
+
     def look_for_files(self, paths=(), search=True, packages=None):
         paths = list(paths)
 
@@ -2431,6 +2482,8 @@ class GameData(object):
             # a demo if we have its corresponding full game
             packages = set(self.packages.values())
 
+        self.look_for_engines(packages, force=args.force)
+
         self.look_for_files(paths=args.paths, search=args.search,
                 packages=packages)
 
@@ -3004,6 +3057,12 @@ def run_command_line():
             dest='verbose', help='hide output from external '
              'tools (default)')
 
+    group = base_parser.add_mutually_exclusive_group()
+    group.add_argument('--force', action='store_true',
+            help='force creation of packages')
+    group.add_argument('--no-force', action='store_false',
+            dest='force', help="don't create a package " +
+            "when engine is not available (default)")
 
     class DumbParser(argparse.ArgumentParser):
         def error(self, message):
@@ -3038,6 +3097,7 @@ def run_command_line():
             destination=None,
             download=True,
             verbose=False,
+            force=False,
             install=False,
             packages=[],
             save_downloads=None,

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/game-data-packager.git



More information about the Pkg-games-commits mailing list