[game-data-packager] 11/11: Defer creation of WantedFile objects until file data gets loaded

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 b4be5d6b742e22252802d1aa2e76350d2fe84754
Author: Simon McVittie <smcv at debian.org>
Date:   Tue Nov 3 22:59:39 2015 +0000

    Defer creation of WantedFile objects until file data gets loaded
---
 game_data_packager/__init__.py | 85 +++++++++++++++++++++++++++---------------
 1 file changed, 55 insertions(+), 30 deletions(-)

diff --git a/game_data_packager/__init__.py b/game_data_packager/__init__.py
index ba52588..78b6bc2 100644
--- a/game_data_packager/__init__.py
+++ b/game_data_packager/__init__.py
@@ -55,16 +55,17 @@ class WantedFile(HashedFile):
     def __init__(self, name):
         super(WantedFile, self).__init__(name)
         self.alternatives = []
+        self.doc = False
         self.group_members = None
-        self.distinctive_name = True
+        self._distinctive_name = None
         self.distinctive_size = False
         self.download = None
         self.executable = False
         self.filename = name.split('?')[0]
         self.install_as = self.filename
-        self.install_to = None
+        self._install_to = None
         self.license = False
-        self._look_for = []
+        self._look_for = None
         self._provides = set()
         self.provides_files = None
         self._size = None
@@ -73,27 +74,36 @@ class WantedFile(HashedFile):
 
     def apply_group_attributes(self, attributes):
         for k, v in attributes.items():
-            if k == 'doc':
-                if v:
-                    self.install_to = '$docdir'
-                continue
-
-            if k == 'license' and v:
-                self.install_to = '$docdir'
-                self.distinctive_name = False
-                self.license = v
-                continue
-
             assert hasattr(self, k)
             setattr(self, k, v)
 
     @property
+    def distinctive_name(self):
+        if self._distinctive_name is not None:
+            return self._distinctive_name
+        return not self.license
+    @distinctive_name.setter
+    def distinctive_name(self, value):
+        self._distinctive_name = value
+
+    @property
+    def install_to(self):
+        if self._install_to is not None:
+            return self._install_to
+        if self.doc or self.license:
+            return '$docdir'
+        return None
+    @install_to.setter
+    def install_to(self, value):
+        self._install_to = value
+
+    @property
     def look_for(self):
         if self.alternatives:
             return set([])
-        if not self._look_for:
-            self._look_for = set([self.filename.lower(), self.install_as.lower()])
-        return self._look_for
+        if self._look_for is not None:
+            return self._look_for
+        return set([self.filename.lower(), self.install_as.lower()])
     @look_for.setter
     def look_for(self, value):
         self._look_for = set(x.lower() for x in value)
@@ -117,7 +127,6 @@ class WantedFile(HashedFile):
 
     def to_yaml(self, expand=True):
         ret = {
-            'distinctive_name': self.distinctive_name,
             'name': self.name,
         }
 
@@ -126,7 +135,6 @@ class WantedFile(HashedFile):
                 'distinctive_size',
                 'executable',
                 'license',
-                'look_for',
                 'skip_hash_matching',
                 ):
             v = getattr(self, k)
@@ -147,7 +155,6 @@ class WantedFile(HashedFile):
                 'download',
                 'group_members',
                 'install_as',
-                'install_to',
                 'size',
                 'unsuitable',
                 'unpack',
@@ -159,6 +166,23 @@ class WantedFile(HashedFile):
                 else:
                     ret[k] = v
 
+        for k in (
+                'distinctive_name',
+                'install_to',
+                'look_for',
+                ):
+            if expand:
+                # use derived value
+                v = getattr(self, k)
+            else:
+                v = getattr(self, '_' + k)
+
+            if v is not None:
+                if isinstance(v, set):
+                    ret[k] = sorted(v)
+                else:
+                    ret[k] = v
+
         return ret
 
 class GameDataPackage(object):
@@ -808,29 +832,21 @@ class GameData(object):
 
         if 'install' in d:
             for filename in d['install']:
-                f = self._ensure_file(filename)
                 package.install.add(filename)
 
         if 'optional' in d:
             assert isinstance(d['optional'], list), package.name
             for filename in d['optional']:
-                f = self._ensure_file(filename)
                 package.optional.add(filename)
 
         if 'doc' in d:
             assert isinstance(d['doc'], list), package.name
             for filename in d['doc']:
-                f = self._ensure_file(filename)
-                f.install_to = '$docdir'
                 package.optional.add(filename)
 
         if 'license' in d:
             assert isinstance(d['license'], list), package.name
             for filename in d['license']:
-                f = self._ensure_file(filename)
-                f.license = True
-                f.install_to = '$docdir'
-                f.distinctive_name = False
                 package.optional.add(filename)
 
         if 'install_files_from_cksums' in d:
@@ -1045,6 +1061,16 @@ class GameData(object):
         self.loaded_file_data = True
 
         for package in self.packages.values():
+            d = self.data['packages'][package.name]
+
+            for filename in d.get('doc', ()):
+                f = self._ensure_file(filename)
+                f.doc = True
+
+            for filename in d.get('license', ()):
+                f = self._ensure_file(filename)
+                f.license = True
+
             package.install_files = set(self._iter_expand_groups(package.install))
             package.optional_files = set(self._iter_expand_groups(package.optional))
 
@@ -1166,8 +1192,7 @@ class GameData(object):
         those groups, recursively.
         """
         for filename in grouped:
-            wanted = self.files.get(filename)
-            assert wanted is not None, filename
+            wanted = self._ensure_file(filename)
             if wanted.group_members is not None:
                 for x in self._iter_expand_groups(wanted.group_members):
                     yield x

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