[game-data-packager] 04/08: Move GameDataPackage to data, rename to Package

Simon McVittie smcv at debian.org
Thu Nov 3 00:03:54 UTC 2016


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 5266e6efd1d386744a02c9af4f20485cf3144819
Author: Simon McVittie <smcv at debian.org>
Date:   Wed Nov 2 20:28:55 2016 +0000

    Move GameDataPackage to data, rename to Package
    
    This object is now stateless (it represents exactly a package loaded
    from YAML/JSON) so it fits in the data module.
---
 game_data_packager/__init__.py           | 260 +------------------------------
 game_data_packager/build.py              |   2 +-
 game_data_packager/data.py               | 256 ++++++++++++++++++++++++++++++
 game_data_packager/packaging/__init__.py |   2 +-
 4 files changed, 261 insertions(+), 259 deletions(-)

diff --git a/game_data_packager/__init__.py b/game_data_packager/__init__.py
index 347ca6d..db835b2 100644
--- a/game_data_packager/__init__.py
+++ b/game_data_packager/__init__.py
@@ -31,7 +31,7 @@ import zipfile
 import yaml
 
 from .build import (PackagingTask)
-from .data import (FileGroup, PackageRelation, WantedFile)
+from .data import (FileGroup, Package, PackageRelation, WantedFile)
 from .paths import (DATADIR, USE_VFS)
 from .util import ascii_safe
 from .version import (GAME_PACKAGE_VERSION)
@@ -45,260 +45,6 @@ else:
 
 MD5SUM_DIVIDER = re.compile(r' [ *]?')
 
-class GameDataPackage(object):
-    def __init__(self, name):
-        # The name of the binary package
-        self.name = name
-
-        # Other names for this binary package
-        self._aliases = set()
-
-        # Names of relative packages
-        self.demo_for = set()
-        self._better_versions = set()
-        self.expansion_for = None
-        # use this for games with demo_for/better_version/provides
-        self.mutually_exclusive = False
-        # expansion for a package outside of this yaml file;
-        # may be another GDP package or a package not made by GDP
-        self.expansion_for_ext = None
-
-        self.relations = dict(
-            breaks=[],
-            build_depends=[],
-            conflicts=[],
-            depends=[],
-            provides=[],
-            recommends=[],
-            replaces=[],
-            suggests=[],
-        )
-
-        # The optional marketing name of this version
-        self.longname = None
-
-        # This word is used to build package description
-        # 'data' / 'music' / 'documentation' / 'PWAD' / 'IWAD' / 'binaries'
-        self.data_type = 'data'
-
-        # if not None, override the description completely
-        self.long_description = None
-
-        # extra blurb of text added to .deb long description
-        self.description = None
-
-        # first line of .deb description, or None to construct one from
-        # longname
-        self.short_description = None
-
-        # This optional value will overide the game global copyright
-        self.copyright = None
-
-        # A blurb of text that is used to build debian/copyright
-        self.copyright_notice = None
-
-        # Languages, list of ISO-639 codes
-        self.langs = ['en']
-
-        # Where we install files.
-        # For instance, if this is 'usr/share/games/quake3' and we have
-        # a WantedFile with install_as='baseq3/pak1.pk3' then we would
-        # put 'usr/share/games/quake3/baseq3/pak1.pk3' in the .deb.
-        # The default is 'usr/share/games/' plus the binary package's name.
-        if name.endswith('-data'):
-            self.default_install_to = '$assets/' + name[:len(name) - 5]
-        else:
-            self.default_install_to = '$assets/' + name
-
-        self.install_to = self.default_install_to
-
-        # If true, this package is allowed to be empty
-        self.empty = False
-
-        # symlink => real file (the opposite way round that debhelper does it,
-        # because the links must be unique but the real files are not
-        # necessarily)
-        self.symlinks = {}
-
-        # online stores metadata
-        self.steam = {}
-        self.gog = {}
-        self.dotemu = {}
-        self.origin = {}
-        self.url_misc = None
-
-        # overide the game engine when needed
-        self.engine = None
-
-        # expansion's dedicated Wiki page, appended to GameData.wikibase
-        self.wiki = None
-
-        # format- and distribution-specific overrides
-        self.specifics = {}
-
-        # set of names of WantedFile instances to be installed
-        self._install = set()
-
-        # set of names of WantedFile instances to be optionally installed
-        self._optional = set()
-
-        # set of WantedFile instances for install, with groups expanded
-        # only available after load_file_data()
-        self.install_files = None
-        # set of WantedFile instances for optional, with groups expanded
-        self.optional_files = None
-
-        self.version = GAME_PACKAGE_VERSION
-
-        # CD audio stuff from YAML
-        self.rip_cd = {}
-
-        # possible override for disks: tag at top level
-        # e.g.: Feeble Files had 2-CD releases too
-        self.disks = None
-
-        # Debian architecture(s)
-        self.architecture = 'all'
-
-        # Component (archive area): main, contrib, non-free, local
-        # We use "local" to mean "not distributable"; the others correspond
-        # to components in the Debian archive
-        self.component = 'local'
-        self.section = 'games'
-
-        # show output of external tools?
-        self.verbose = False
-
-        # archives actually used to built a package
-        self.used_sources = set()
-
-    @property
-    def aliases(self):
-        return self._aliases
-    @aliases.setter
-    def aliases(self, value):
-        self._aliases = set(value)
-
-    @property
-    def install(self):
-        return self._install
-    @install.setter
-    def install(self, value):
-        self._install = set(value)
-
-    @property
-    def only_file(self):
-        if len(self._install) == 1:
-            return list(self._install)[0]
-        else:
-            return None
-
-    @property
-    def optional(self):
-        return self._optional
-    @optional.setter
-    def optional(self, value):
-        self._optional = set(value)
-
-    @property
-    def better_versions(self):
-        return self._better_versions
-    @better_versions.setter
-    def better_versions(self, value):
-        self._better_versions = set(value)
-
-    @property
-    def type(self):
-        """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 or self.expansion_for_ext:
-            return 'expansion'
-        return 'full'
-
-    @property
-    def lang(self):
-        return self.langs[0]
-
-    @lang.setter
-    def lang(self, value):
-        assert type(value) is str
-        self.langs = [value]
-
-    def to_data(self, expand=True):
-        ret = {
-            'architecture': self.architecture,
-            'component': self.component,
-            'install_to': self.install_to,
-            'name': self.name,
-            'section': self.section,
-            'type': self.type,
-            'version': self.version,
-        }
-
-        for k in (
-                'aliases',
-                'better_versions',
-                'demo_for',
-                'dotemu',
-                'gog',
-                'origin',
-                'rip_cd',
-                'specifics',
-                'steam',
-                'symlinks',
-                ):
-            v = getattr(self, k)
-            if v:
-                if isinstance(v, set):
-                    ret[k] = sorted(v)
-                else:
-                    ret[k] = v
-
-        for relation, related in self.relations.items():
-            # The .to_data() of a PackageRelation doesn't have a defined
-            # sorting order, so do a Schwartzian transform to get a
-            # stable order
-            tmp = sorted([(str(x), x.to_data()) for x in related])
-            tmp = [x[1] for x in tmp]
-            ret[relation] = tmp
-
-        if expand and self.install_files is not None:
-            if self.install_files:
-                ret['install'] = sorted(f.name for f in self.install_files)
-            if self.optional_files:
-                ret['optional'] = sorted(f.name for f in self.optional_files)
-        else:
-            if self.install:
-                ret['install'] = sorted(self.install)
-            if self.optional:
-                ret['optional'] = sorted(self.optional)
-
-        for k in (
-                'copyright',
-                'copyright_notice',
-                'description',
-                'disks',
-                'engine',
-                'expansion_for',
-                'expansion_for_ext',
-                'longname',
-                'long_description',
-                'short_description',
-                'url_misc',
-                'wiki',
-                ):
-            v = getattr(self, k)
-            if v is not None:
-                ret[k] = v
-
-        return ret
-
 class GameData(object):
     def __init__(self, shortname, data):
         # The name of the game for command-line purposes, e.g. quake3
@@ -342,7 +88,7 @@ class GameData(object):
         # http://en.wikipedia.org/wiki/List_of_video_game_genres
         self.genre = None
 
-        # binary package name => GameDataPackage
+        # binary package name => Package
         self.packages = {}
 
         # Subset of packages.values() with nonempty rip_cd
@@ -1224,7 +970,7 @@ class GameData(object):
         return PackagingTask(self, **kwargs)
 
     def construct_package(self, binary):
-        return GameDataPackage(binary)
+        return Package(binary)
 
     def gog_download_name(self, package):
         if package.gog == False:
diff --git a/game_data_packager/build.py b/game_data_packager/build.py
index 5250ad4..bb86ab0 100644
--- a/game_data_packager/build.py
+++ b/game_data_packager/build.py
@@ -213,7 +213,7 @@ class PackagingTask(object):
         # Failed downloads
         self.download_failed = set()
 
-        # Map from GameDataPackage name to whether we can do it
+        # Map from Package name to whether we can do it
         self.package_status = defaultdict(lambda: FillResult.UNDETERMINED)
 
         # Set of executables we wanted but don't have
diff --git a/game_data_packager/data.py b/game_data_packager/data.py
index 73703d2..48497dc 100644
--- a/game_data_packager/data.py
+++ b/game_data_packager/data.py
@@ -19,6 +19,8 @@
 import hashlib
 import io
 
+from .version import (GAME_PACKAGE_VERSION)
+
 class ProgressCallback:
     """API for a progress report."""
 
@@ -398,3 +400,257 @@ class FileGroup:
                 ret[attr] = value
 
         return ret
+
+class Package(object):
+    def __init__(self, name):
+        # The name of the binary package
+        self.name = name
+
+        # Other names for this binary package
+        self._aliases = set()
+
+        # Names of relative packages
+        self.demo_for = set()
+        self._better_versions = set()
+        self.expansion_for = None
+        # use this for games with demo_for/better_version/provides
+        self.mutually_exclusive = False
+        # expansion for a package outside of this yaml file;
+        # may be another GDP package or a package not made by GDP
+        self.expansion_for_ext = None
+
+        self.relations = dict(
+            breaks=[],
+            build_depends=[],
+            conflicts=[],
+            depends=[],
+            provides=[],
+            recommends=[],
+            replaces=[],
+            suggests=[],
+        )
+
+        # The optional marketing name of this version
+        self.longname = None
+
+        # This word is used to build package description
+        # 'data' / 'music' / 'documentation' / 'PWAD' / 'IWAD' / 'binaries'
+        self.data_type = 'data'
+
+        # if not None, override the description completely
+        self.long_description = None
+
+        # extra blurb of text added to .deb long description
+        self.description = None
+
+        # first line of .deb description, or None to construct one from
+        # longname
+        self.short_description = None
+
+        # This optional value will overide the game global copyright
+        self.copyright = None
+
+        # A blurb of text that is used to build debian/copyright
+        self.copyright_notice = None
+
+        # Languages, list of ISO-639 codes
+        self.langs = ['en']
+
+        # Where we install files.
+        # For instance, if this is 'usr/share/games/quake3' and we have
+        # a WantedFile with install_as='baseq3/pak1.pk3' then we would
+        # put 'usr/share/games/quake3/baseq3/pak1.pk3' in the .deb.
+        # The default is 'usr/share/games/' plus the binary package's name.
+        if name.endswith('-data'):
+            self.default_install_to = '$assets/' + name[:len(name) - 5]
+        else:
+            self.default_install_to = '$assets/' + name
+
+        self.install_to = self.default_install_to
+
+        # If true, this package is allowed to be empty
+        self.empty = False
+
+        # symlink => real file (the opposite way round that debhelper does it,
+        # because the links must be unique but the real files are not
+        # necessarily)
+        self.symlinks = {}
+
+        # online stores metadata
+        self.steam = {}
+        self.gog = {}
+        self.dotemu = {}
+        self.origin = {}
+        self.url_misc = None
+
+        # overide the game engine when needed
+        self.engine = None
+
+        # expansion's dedicated Wiki page, appended to GameData.wikibase
+        self.wiki = None
+
+        # format- and distribution-specific overrides
+        self.specifics = {}
+
+        # set of names of WantedFile instances to be installed
+        self._install = set()
+
+        # set of names of WantedFile instances to be optionally installed
+        self._optional = set()
+
+        # set of WantedFile instances for install, with groups expanded
+        # only available after load_file_data()
+        self.install_files = None
+        # set of WantedFile instances for optional, with groups expanded
+        self.optional_files = None
+
+        self.version = GAME_PACKAGE_VERSION
+
+        # CD audio stuff from YAML
+        self.rip_cd = {}
+
+        # possible override for disks: tag at top level
+        # e.g.: Feeble Files had 2-CD releases too
+        self.disks = None
+
+        # Debian architecture(s)
+        self.architecture = 'all'
+
+        # Component (archive area): main, contrib, non-free, local
+        # We use "local" to mean "not distributable"; the others correspond
+        # to components in the Debian archive
+        self.component = 'local'
+        self.section = 'games'
+
+        # show output of external tools?
+        self.verbose = False
+
+        # archives actually used to built a package
+        self.used_sources = set()
+
+    @property
+    def aliases(self):
+        return self._aliases
+    @aliases.setter
+    def aliases(self, value):
+        self._aliases = set(value)
+
+    @property
+    def install(self):
+        return self._install
+    @install.setter
+    def install(self, value):
+        self._install = set(value)
+
+    @property
+    def only_file(self):
+        if len(self._install) == 1:
+            return list(self._install)[0]
+        else:
+            return None
+
+    @property
+    def optional(self):
+        return self._optional
+    @optional.setter
+    def optional(self, value):
+        self._optional = set(value)
+
+    @property
+    def better_versions(self):
+        return self._better_versions
+    @better_versions.setter
+    def better_versions(self, value):
+        self._better_versions = set(value)
+
+    @property
+    def type(self):
+        """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 or self.expansion_for_ext:
+            return 'expansion'
+        return 'full'
+
+    @property
+    def lang(self):
+        return self.langs[0]
+
+    @lang.setter
+    def lang(self, value):
+        assert type(value) is str
+        self.langs = [value]
+
+    def to_data(self, expand=True):
+        ret = {
+            'architecture': self.architecture,
+            'component': self.component,
+            'install_to': self.install_to,
+            'name': self.name,
+            'section': self.section,
+            'type': self.type,
+            'version': self.version,
+        }
+
+        for k in (
+                'aliases',
+                'better_versions',
+                'demo_for',
+                'dotemu',
+                'gog',
+                'origin',
+                'rip_cd',
+                'specifics',
+                'steam',
+                'symlinks',
+                ):
+            v = getattr(self, k)
+            if v:
+                if isinstance(v, set):
+                    ret[k] = sorted(v)
+                else:
+                    ret[k] = v
+
+        for relation, related in self.relations.items():
+            # The .to_data() of a PackageRelation doesn't have a defined
+            # sorting order, so do a Schwartzian transform to get a
+            # stable order
+            tmp = sorted([(str(x), x.to_data()) for x in related])
+            tmp = [x[1] for x in tmp]
+            ret[relation] = tmp
+
+        if expand and self.install_files is not None:
+            if self.install_files:
+                ret['install'] = sorted(f.name for f in self.install_files)
+            if self.optional_files:
+                ret['optional'] = sorted(f.name for f in self.optional_files)
+        else:
+            if self.install:
+                ret['install'] = sorted(self.install)
+            if self.optional:
+                ret['optional'] = sorted(self.optional)
+
+        for k in (
+                'copyright',
+                'copyright_notice',
+                'description',
+                'disks',
+                'engine',
+                'expansion_for',
+                'expansion_for_ext',
+                'longname',
+                'long_description',
+                'short_description',
+                'url_misc',
+                'wiki',
+                ):
+            v = getattr(self, k)
+            if v is not None:
+                ret[k] = v
+
+        return ret
diff --git a/game_data_packager/packaging/__init__.py b/game_data_packager/packaging/__init__.py
index 6f5fa15..87fa202 100644
--- a/game_data_packager/packaging/__init__.py
+++ b/game_data_packager/packaging/__init__.py
@@ -314,7 +314,7 @@ class PackagingSystem(metaclass=ABCMeta):
         a subdirectory named DESTDIR which has been populated with the files
         to be packaged (so it contains DESTDIR/usr, etc.)
 
-        game and package are a GameData and a GameDataPackage respectively.
+        game and package are a GameData and a Package respectively.
 
         md5sums is either None, or a map like
         { 'usr/share/games/quake3-data/baseq3/pak0.pk3': '1197ca...' }

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