[game-data-packager] 40/51: make_template: Use GameData for remaining package fields except plugin

Simon McVittie smcv at debian.org
Fri Dec 29 01:23:37 UTC 2017


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 672f46a4eff7b91259ea19aea83ee4c291ca8cc7
Author: Simon McVittie <smcv at debian.org>
Date:   Thu Dec 28 20:16:23 2017 +0000

    make_template: Use GameData for remaining package fields except plugin
    
    Signed-off-by: Simon McVittie <smcv at debian.org>
---
 game_data_packager/make_template.py | 119 ++++++++++++++++--------------------
 1 file changed, 53 insertions(+), 66 deletions(-)

diff --git a/game_data_packager/make_template.py b/game_data_packager/make_template.py
index f805afa..eded31b 100644
--- a/game_data_packager/make_template.py
+++ b/game_data_packager/make_template.py
@@ -35,7 +35,7 @@ except ImportError:
     from distutils.version import LooseVersion as Version
     ON_DEBIAN = False
 
-from .data import (FileGroup, HashedFile, WantedFile)
+from .data import (FileGroup, HashedFile, PackageRelation, WantedFile)
 from .game import (GameData)
 from .gog import GOG
 from .steam import parse_acf
@@ -142,11 +142,7 @@ class Template:
     def __init__(self, game, strip_paths=()):
         self.game = game
         self.plugin = None
-        self.gog = dict()
-
-        self.data = dict()
         self.strip_paths = strip_paths
-
         self.has_dosbox = False
 
     def new_group(self, stem):
@@ -414,25 +410,34 @@ class Template:
             steam_dict['id'] = int(steam_id)
             steam_dict['path'] = destdir[steam+11:]
 
+        virtual = None
+        package = None
         game = game.replace(' ','').replace(':','').replace('_','-').lower()
+
         if lang:
-            pkg = game + '-' + lang + '-data'
+            stem = package_name = game + '-' + lang + '-data'
             virtual = game + '-data'
         else:
-            pkg = game + '-data'
-        self.package = self.data.setdefault('packages', {}).setdefault(pkg, {})
+            stem = package_name = game + '-data'
+
+        i = 0
+
+        while package_name in self.game.packages:
+            i += 1
+            package_name = '%s-unique%d' % (stem, i)
+
+        package = self.game.construct_package(package_name, {})
+        self.game.packages[package_name] = package
+
         if lang:
             if lang != 'en':
-                self.package['lang'] = lang
-            self.package['provides'] = virtual
+                package.langs = [lang]
 
-        self.package['install'] = [main_group.name]
-        self.package['optional'] = [opt_group.name]
-        self.package['doc'] = [doc_group.name]
-        self.package['license'] = [license_group.name]
+        if virtual:
+            package.relations['provides'].append(PackageRelation(virtual))
 
         if steam > 0:
-            self.package['steam'] = steam_dict
+            package.steam = steam_dict
 
         for dirpath, dirnames, filenames in os.walk(destdir):
             if self.is_scummvm(dirpath) or is_runtime(dirpath):
@@ -450,7 +455,7 @@ class Template:
                 if os.path.isdir(path):
                     continue
                 elif os.path.islink(path):
-                    self.package.setdefault('symlinks', {})[path] = os.path.realpath(path)
+                    package.symlinks[path] = os.path.realpath(path)
                 elif os.path.isfile(path):
                     self.add_file(path, out_name=out_name, lang=lang,
                             group=main_group,
@@ -464,21 +469,14 @@ class Template:
                 logger.warning('DOSBOX files detected, make sure not to include those in your package')
 
         if self.plugin != 'scummvm_common':
-            self.package['install_to'] = '$assets/' + game
+            package.install_to = '$assets/' + game
 
-        self.package['install'].sort()
-        if self.package['optional']:
-            self.package['optional'].sort()
-        else:
-            del self.package['optional']
-        if self.package['doc']:
-            self.package['doc'].sort()
-        else:
-            del self.package['doc']
-        if self.package['license']:
-            self.package['license'].sort()
-        else:
-            del self.package['license']
+        if main_group.group_members:
+            package.install.add(main_group.name)
+
+        for g in (opt_group, doc_group, license_group):
+            if g.group_members:
+                package.optional.add(g.name)
 
     def add_one_gog_sh(self,archive):
         self.add_archive(archive, unpack=True)
@@ -489,10 +487,10 @@ class Template:
                     for line in metadata.read().decode().splitlines():
                         line = line.strip()
                         if line.startswith('id = '):
-                            self.gog['path'] = '"%s"' % line.split('"')[1]
+                            self.game.gog['path'] = '"%s"' % line.split('"')[1]
 
     def add_one_innoextract(self,exe,lower):
-        game = self.gog['game'] = GOG.get_id_from_archive(exe)
+        game = self.game.gog['game'] = GOG.get_id_from_archive(exe)
         if not game:
             game = os.path.basename(exe)
             game = game[len('setup_'):len(game)-len('.exe')]
@@ -576,7 +574,7 @@ class Template:
                         version = control['version']
                         if 'Homepage' in control:
                             if 'gog.com/' in control['Homepage']:
-                                self.gog['url'] = control['Homepage'].split('/')[-1]
+                                self.game.gog['url'] = control['Homepage'].split('/')[-1]
 
                         control.dump(fd=sys.stdout, text_mode=True)
                         print('')
@@ -598,16 +596,18 @@ class Template:
             if g.group_members:
                 result.provides.add(g.name)
 
-        self.data = dict(packages={ control['package']: {} })
-        self.package = self.data['packages'][control['package']]
+        package_name = control['package']
+        i = 0
+
+        while package_name in self.game.packages:
+            i += 1
+            package_name = '%s-unique%d' % (control['package'], i)
 
-        self.package['install'] = [main_group.name]
-        self.package['optional'] = [ignorable_group.name, abs_group.name]
-        self.package['doc'] = [doc_group.name]
-        self.package['license'] = [license_group.name]
+        package = self.game.construct_package(package_name, {})
+        self.game.packages[package_name] = package
 
         if version:
-            self.package['version'] = version
+            package.version = version
 
         install_to = None
 
@@ -644,7 +644,7 @@ class Template:
                         there = name[len('opt/GOG Games/'):]
                         there = there.split('/', 1)[0]
                         install_to = ('opt/GOG Games/' + there)
-                        self.gog['path'] = '"%s"' % there
+                        self.game.gog['path'] = '"%s"' % there
 
                 target = entry.get_symbolic_link_target()
 
@@ -675,7 +675,7 @@ class Template:
                         name = name[len(install_to) + 1:]
                         if lower:
                             name = name.lower()
-                        if self.gog and name.startswith('data/'):
+                        if self.game.gog and name.startswith('data/'):
                             name = name[len('data/'):]
                     else:
                         group = abs_group
@@ -690,42 +690,29 @@ class Template:
                 elif entry.is_directory:
                     pass
                 elif target is not None:
-                    self.package.setdefault('symlinks', {})[name] = os.path.join(
+                    package.symlinks[name] = os.path.join(
                         os.path.dirname(name), target)
                 else:
                     logger.warning('unhandled data.tar entry type: %s: %s',
                         name, entry.type_indicator)
 
         if self.plugin != 'scummvm_common' and install_to is not None:
-            self.package['install_to'] = os.path.join('/',
-                    install_to).replace('/usr/share/games/', '$assets/')
-        self.package['install'].sort()
-        if self.package['optional']:
-            self.package['optional'].sort()
-        else:
-            del self.package['optional']
-        if self.package['license']:
-            self.package['license'].sort()
-        else:
-            del self.package['license']
+            package.install_to = os.path.join('/',
+                install_to).replace('/usr/share/games/', '$assets/')
+
+        if main_group.group_members:
+            package.install.add(main_group.name)
+
+        for g in (abs_group, doc_group, ignorable_group, license_group):
+            if g.group_members:
+                package.optional.add(g.name)
 
     def print_yaml(self):
         print('---')
 
         if self.plugin:
             print('plugin: %s' % self.plugin)
-
-        if self.gog:
-            print('gog:')
-            for k in ('url', 'game', 'path'):
-                if k in self.gog:
-                    print('  %s: %s' % (k, self.gog[k]))
-
-        if self.data:
-            yaml.safe_dump(self.data, stream=sys.stdout,
-                    default_flow_style=False)
-
-        print('')
+            print('')
 
         data = self.game.to_data(expand=False, include_ignorable=True)
 

-- 
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