[game-data-packager] 07/11: Add support for empty groups

Simon McVittie smcv at debian.org
Tue Nov 3 23:14:49 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 f421d0af926b84d1bc2b1ad95b87903c0ede11f0
Author: Simon McVittie <smcv at debian.org>
Date:   Tue Nov 3 08:57:25 2015 +0000

    Add support for empty groups
    
    This will be useful when make_template makes better use of groups.
---
 game_data_packager/__init__.py | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/game_data_packager/__init__.py b/game_data_packager/__init__.py
index b1210a3..c5144f7 100644
--- a/game_data_packager/__init__.py
+++ b/game_data_packager/__init__.py
@@ -55,7 +55,7 @@ class WantedFile(HashedFile):
     def __init__(self, name):
         super(WantedFile, self).__init__(name)
         self.alternatives = []
-        self.group_members = set()
+        self.group_members = None
         self.distinctive_name = True
         self.distinctive_size = False
         self.download = None
@@ -124,7 +124,6 @@ class WantedFile(HashedFile):
                 'alternatives',
                 'distinctive_size',
                 'executable',
-                'group_members',
                 'license',
                 'look_for',
                 'provides',
@@ -139,6 +138,7 @@ class WantedFile(HashedFile):
 
         for k in (
                 'download',
+                'group_members',
                 'install_as',
                 'install_to',
                 'size',
@@ -147,7 +147,10 @@ class WantedFile(HashedFile):
                 ):
             v = getattr(self, k)
             if v is not None:
-                ret[k] = v
+                if isinstance(v, set):
+                    ret[k] = sorted(v)
+                else:
+                    ret[k] = v
 
         return ret
 
@@ -536,6 +539,8 @@ class GameData(object):
                     raise AssertionError('group %r should be dict, str or list' % group_name)
 
                 group = self._ensure_file(group_name)
+                if group.group_members is None:
+                    group.group_members = set()
                 group.apply_group_attributes(attrs)
 
                 if isinstance(members, str):
@@ -552,10 +557,6 @@ class GameData(object):
                 else:
                     raise AssertionError('group %r members should be str or list' % group_name)
 
-                # an empty group is no use, and would break the assumption
-                # that we can use f.group_members to detect groups
-                assert group.group_members
-
         if 'size_and_md5' in self.data:
             for line in self.data['size_and_md5'].splitlines():
                 self._add_hash(line, 'size_and_md5')
@@ -677,7 +678,7 @@ class GameData(object):
             return ret
 
         for filename, f in self.files.items():
-            if f.group_members:
+            if f.group_members is not None:
                 groups[filename] = f.to_yaml()
             else:
                 files[filename] = f.to_yaml()
@@ -948,6 +949,8 @@ class GameData(object):
             if stripped.startswith('['):
                 assert stripped.endswith(']'), repr(stripped)
                 current_group = self._ensure_file(stripped[1:-1])
+                if current_group.group_members is None:
+                    current_group.group_members = set()
                 attributes = {}
             elif stripped.startswith('{'):
                 attributes = {}
@@ -1034,7 +1037,7 @@ class GameData(object):
             for provided in f.provides:
                 self.providers.setdefault(provided, set()).add(filename)
 
-            if f.alternatives or f.group_members:
+            if f.alternatives or f.group_members is not None:
                 continue
 
             if f.distinctive_size and f.size is not None:
@@ -1115,7 +1118,7 @@ class GameData(object):
                     # an alternative can't be a placeholder for alternatives
                     assert not alt.alternatives, alt_name
                     # an alternative can't be a placeholder for a group
-                    assert not alt.group_members, alt_name
+                    assert alt.group_members is None, alt_name
 
                 # if this is a placeholder for a bunch of alternatives, then
                 # it doesn't make sense for it to have a defined checksum
@@ -1127,8 +1130,8 @@ class GameData(object):
 
                 # a placeholder for alternatives can't also be a placeholder
                 # for a group
-                assert not wanted.group_members, wanted.name
-            elif wanted.group_members:
+                assert wanted.group_members is None, wanted.name
+            elif wanted.group_members is not None:
                 for member_name in wanted.group_members:
                     assert member_name in self.files
 
@@ -1137,7 +1140,6 @@ class GameData(object):
                 assert wanted.sha256 is None, wanted.name
                 assert wanted.size is None, wanted.name
                 assert not wanted.unpack, wanted.unpack
-            # FIXME: find out file size and add to yaml
             else:
                 assert (wanted.size is not None or filename in
                         self.data.get('unknown_sizes', ())
@@ -1150,7 +1152,7 @@ class GameData(object):
         for filename in grouped:
             wanted = self.files.get(filename)
             assert wanted is not None, filename
-            if wanted.group_members:
+            if wanted.group_members is not None:
                 for x in self._iter_expand_groups(wanted.group_members):
                     yield x
             else:

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