[game-data-packager] 04/21: Make GameDataPackage.type read-only, populated from demo_for/expansion_for
Simon McVittie
smcv at debian.org
Wed Jan 21 11:52:00 UTC 2015
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 e068e2f7862b1c197bf7caa0a4683cf18633284a
Author: Simon McVittie <smcv at debian.org>
Date: Wed Jan 21 09:10:15 2015 +0000
Make GameDataPackage.type read-only, populated from demo_for/expansion_for
Use demo_for and expansion_for directly in most cases.
This lets us improve the special handling of demo packages in one
corner case: previously we would not build a demo package if we were
building any full game, now we will not build a demo package if we
are building the full game directly corresponding to that demo.
---
lib/game_data_packager/__init__.py | 48 +++++++++++++++++++-------------------
1 file changed, 24 insertions(+), 24 deletions(-)
diff --git a/lib/game_data_packager/__init__.py b/lib/game_data_packager/__init__.py
index f4f3444..6a6067e 100644
--- a/lib/game_data_packager/__init__.py
+++ b/lib/game_data_packager/__init__.py
@@ -347,12 +347,6 @@ class GameDataPackage(object):
# set of names of WantedFile instances to be optionally installed
self._optional = set()
- # type of package: full, demo or expansion
- # full packages include quake-registered, quake2-full-data, quake3-data
- # demo packages include quake-shareware, quake2-demo-data
- # expansion packages include quake-armagon, quake-music, quake2-rogue
- self._type = 'full'
-
self.version = GAME_PACKAGE_VERSION
# if not None, install every file provided by the files with
@@ -382,14 +376,22 @@ class GameDataPackage(object):
@property
def type(self):
- return self._type
- @type.setter
- def type(self, value):
- assert value in ('full', 'demo', 'expansion'), value
- self._type = value
+ """type of package: full, demo or expansion
+
+ full packages include quake-registered, quake2-full-data, quake3-data
+ demo packages include quake-shareware, quake2-demo-data
+ expansion packages include quake-armagon, quake-music, quake2-rogue
+ """
+ if self.demo_for:
+ return 'demo'
+ if self.expansion_for:
+ return 'expansion'
+ return 'full'
def to_yaml(self):
return {
+ 'demo_for': self.demo_for,
+ 'expansion_for': self.expansion_for,
'install': sorted(self.install),
'install_to': self.install_to,
'install_to_docdir': self.install_to_docdir,
@@ -397,6 +399,7 @@ class GameDataPackage(object):
'optional': sorted(self.optional),
'steam': self.steam,
'symlinks': self.symlinks,
+ 'type': self.type,
}
class GameData(object):
@@ -666,11 +669,13 @@ class GameData(object):
if 'demo_for' in d:
assert package.name != d['demo_for'], "a game can't be a demo for itself"
- setattr(package, 'type', 'demo')
if 'expansion_for' in d:
assert package.name != d['expansion_for'], \
"a game can't be an expansion for itself"
- setattr(package, 'type', 'expansion')
+ if 'demo_for' in d:
+ raise AssertionError("%r can't be both a demo of %r and an " +
+ "expansion for %r" % (package.name, d.demo_for,
+ d.expansion_for))
if 'install' in d:
for filename in d['install']:
@@ -1559,7 +1564,7 @@ class GameData(object):
if package.expansion_for:
depends.add(package.expansion_for)
engine = package.debian.get('engine')
- assert engine is None or package.type != 'expansion', \
+ assert engine is None or not package.expansion_for, \
'An expansion will inherit the engine of the full game'
if engine:
recommends.add(engine)
@@ -1642,7 +1647,7 @@ class GameData(object):
# There is only a --demo option if at least one package is a demo
parser.set_defaults(demo=False)
for package in self.packages.values():
- if package.type == 'demo':
+ if package.demo_for:
parser.add_argument('--demo', action='store_true',
default=False,
help='Build demo package even if files for full '
@@ -1767,7 +1772,7 @@ class GameData(object):
# Repeat the process for the first (hopefully only)
# demo/shareware package, so we can log its errors.
for package in self.packages.values():
- if package.type == 'demo':
+ if package.demo_for:
if self.fill_gaps(package=package,
log=True) is not FillResult.IMPOSSIBLE:
logger.error('%s unexpectedly succeeded on second ' +
@@ -1796,17 +1801,12 @@ class GameData(object):
ready = set()
- have_full = False
- for package in possible:
- if package.type == 'full':
- have_full = True
-
for package in possible:
- if have_full and package.type == 'demo' and not build_demos:
+ if package.demo_for and self.packages[package.demo_for] in possible:
# no point in packaging the demo if we have the full
# version
- logger.debug('will not produce %s because we have a full ' +
- 'version', package.name)
+ logger.debug('will not produce "%s" because we have the '
+ 'full version "%s"', package.name, package.demo_for)
continue
logger.debug('will produce %s', package.name)
--
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