[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