[game-data-packager] 01/01: move asserts for 'debian:' dict to 'make check', trim mod_template

Alexandre Detiste detiste-guest at moszumanska.debian.org
Fri Nov 6 09:42:39 UTC 2015


This is an automated email from the git hooks/post-receive script.

detiste-guest pushed a commit to branch master
in repository game-data-packager.

commit 3c5ed0186c870f1a7827fb7e4f650cbdc7549e8d
Author: Alexandre Detiste <alexandre.detiste at gmail.com>
Date:   Fri Nov 6 10:39:09 2015 +0100

    move asserts for 'debian:' dict to 'make check', trim mod_template
    
    this way errors are catched early, not when the package is
    almost built
---
 data/compet-n.yaml             |  2 +-
 data/doom.yaml                 |  2 +-
 data/doom2.yaml                |  2 +-
 data/final-doom.yaml           |  4 +--
 data/quake2.yaml               |  4 +--
 data/rott.yaml                 |  2 ++
 game_data_packager/__init__.py | 15 +++++++++
 game_data_packager/build.py    | 70 +++++++++++++-----------------------------
 8 files changed, 45 insertions(+), 56 deletions(-)

diff --git a/data/compet-n.yaml b/data/compet-n.yaml
index d945b3b..8f2a135 100644
--- a/data/compet-n.yaml
+++ b/data/compet-n.yaml
@@ -20,7 +20,7 @@ packages:
     # mostly, for 5 of 6 PWADS
     expansion_for_ext: doom2-wad
     debian:
-      recommends: doom2-wad | freedoom, doom-wad | freedoom
+      recommends: ["doom2-wad | freedoom", "doom-wad | freedoom"]
     main_wads:
       av.wad:
          name: Alien Vendetta (2nd Ed.)
diff --git a/data/doom.yaml b/data/doom.yaml
index ec5942a..504a45b 100644
--- a/data/doom.yaml
+++ b/data/doom.yaml
@@ -24,7 +24,7 @@ help_text: |
 packages:
   doom-wad:
     debian:
-      conflicts: freedoom (<< 0.6.4-4), freedm (<< 0.6.4-4)
+      conflicts: [freedoom (<< 0.6.4-4), freedm (<< 0.6.4-4)]
     steam:
       id: 2280
       path: "common/Ultimate Doom"
diff --git a/data/doom2.yaml b/data/doom2.yaml
index 3fa6e38..e5cba44 100644
--- a/data/doom2.yaml
+++ b/data/doom2.yaml
@@ -21,7 +21,7 @@ packages:
     langs: [en,fr]
     debian:
       provides: doom-wad
-      conflicts: freedoom (<< 0.6.4-4), freedm (<< 0.6.4-4)
+      conflicts: ["freedoom (<< 0.6.4-4)", "freedm (<< 0.6.4-4)"]
     steam:
       id: 2300
       path: "common/Doom 2"
diff --git a/data/final-doom.yaml b/data/final-doom.yaml
index a42e67e..1cdd0fe 100644
--- a/data/final-doom.yaml
+++ b/data/final-doom.yaml
@@ -27,7 +27,7 @@ packages:
     aliases: [tnt, t]
     debian:
       provides: doom-wad
-      conflicts: freedoom (<< 0.6.4-4), freedm (<< 0.6.4-4)
+      conflicts: ["freedoom (<< 0.6.4-4)", "freedm (<< 0.6.4-4)"]
     install:
     - tnt.wad
     - tnt31.wad
@@ -42,7 +42,7 @@ packages:
     aliases: [plutonia, p]
     debian:
       provides: doom-wad
-      conflicts: freedoom (<< 0.6.4-4), freedm (<< 0.6.4-4)
+      conflicts: ["freedoom (<< 0.6.4-4)", "freedm (<< 0.6.4-4)"]
     install:
     - plutonia.wad
     optional:
diff --git a/data/quake2.yaml b/data/quake2.yaml
index f2066c2..dec7a76 100644
--- a/data/quake2.yaml
+++ b/data/quake2.yaml
@@ -112,7 +112,7 @@ packages:
       id: 2330
       path: "common/Quake 2/xatrix"
     debian:
-      build-depends: gcc, make, libc6-dev
+      build-depends: [gcc, make, libc6-dev]
       provides: quake2-xatrix
       conflicts: quake2-xatrix
       replaces: quake2-xatrix
@@ -165,7 +165,7 @@ packages:
     gog:
       url: quake_ii_quad_damage
     debian:
-      build-depends: gcc, make, libc6-dev
+      build-depends: [gcc, make, libc6-dev]
       provides: quake2-rogue
       conflicts: quake2-rogue
       replaces: quake2-rogue
diff --git a/data/rott.yaml b/data/rott.yaml
index 8acbbc6..db108fb 100644
--- a/data/rott.yaml
+++ b/data/rott.yaml
@@ -26,6 +26,8 @@ packages:
     # it includes the HUNT Begin levels not present in the commercial game
     description: |
       Use the 'rott-shareware' command to play this game.
+    debian:
+      suggests: rott-registered-data
     install:
     - DEMO1_3.DMO
     - DEMO2_3.DMO
diff --git a/game_data_packager/__init__.py b/game_data_packager/__init__.py
index b9448fa..d6c00eb 100644
--- a/game_data_packager/__init__.py
+++ b/game_data_packager/__init__.py
@@ -801,8 +801,23 @@ class GameData(object):
         assert type(package.langs) is list
         assert type(package.mutually_exclusive) is bool
 
+        if 'debian' in d:
+            assert type(package.debian) is dict
+            for k, v in package.debian.items():
+                assert k in ('breaks', 'conflicts', 'depends', 'provides',
+                             'recommends', 'replaces', 'suggests',
+                             'build-depends'), (package.name, package.debian)
+                assert type(v) in (str, list), (package.name, package.debian)
+                if type(v) == str:
+                    assert ',' not in v, (package.name, package.debian)
+                    package.debian[k] = list([v])
+                assert package.name not in v, \
+                   "A package shouldn't extraneously %s itself" % k
+
         if 'provides' in d or package.mutually_exclusive:
             assert type(package.provides) is str
+            assert package.name != package.provides, \
+               "A package shouldn't extraneously provide itself"
 
         if 'install_to' in d:
             if package.install_to.startswith('$assets/'):
diff --git a/game_data_packager/build.py b/game_data_packager/build.py
index 07f6955..9e33798 100644
--- a/game_data_packager/build.py
+++ b/game_data_packager/build.py
@@ -1652,72 +1652,44 @@ class PackagingTask(object):
         else:
             control['Architecture'] = self.get_architecture(package.architecture)
 
-        def read_control_set(package, field):
-            result = set()
-            value = package.debian.get(field.lower())
-            if isinstance(value, str):
-                result.add(value)
-            elif isinstance(value, list):
-                for x in value:
-                    result.add(x)
-            elif value is not None:
-                raise AssertionError('%s: debian.%s should be str or list' %
-                        (package.name, field.lower()))
-            return result
-
-        depends = read_control_set(package, 'Depends')
-        recommends = read_control_set(package, 'Recommends')
-        suggests = read_control_set(package, 'Suggests')
-        provides = read_control_set(package, 'Provides')
-        replaces = read_control_set(package, 'Replaces')
-        conflicts = read_control_set(package, 'Conflicts')
-        breaks = read_control_set(package, 'Breaks')
+        dep = dict()
+        for field in ('breaks', 'conflicts', 'depends', 'provides',
+                      'recommends', 'replaces', 'suggests'):
+            dep[field] = set(package.debian.get(field,[]))
 
         if package.provides:
-            provides.add(package.provides)
+            dep['provides'].add(package.provides)
             if package.mutually_exclusive:
-                conflicts.add(package.provides)
-                replaces.add(package.provides)
+                dep['conflicts'].add(package.provides)
+                dep['replaces'].add(package.provides)
 
         engine = package.engine or self.game.engine
-        if '>=' in engine:
-            breaks.add(engine.replace('>=', '<<'))
+        if engine and '>=' in engine:
+            dep['breaks'].add(engine.replace('>=', '<<'))
             engine = engine.split()[0]
 
         if package.expansion_for:
             # check if default heuristic has been overriden in yaml
-            for p in depends:
+            for p in dep['depends']:
                 if package.expansion_for == p.split()[0]:
                     break
             else:
-                depends.add(package.expansion_for)
+                dep['depends'].add(package.expansion_for)
+
         if package.engine:
-            recommends.add(engine)
+            dep['recommends'].add(engine)
         elif not package.expansion_for and self.game.engine:
-            recommends.add(engine)
+            dep['recommends'].add(engine)
         for other_package in self.game.packages.values():
             if other_package.expansion_for == package.name:
-                suggests.add(other_package.name)
-        assert package.name not in provides, \
-               "A package shouldn't extraneously provide itself"
+                dep['suggests'].add(other_package.name)
 
         # Shortcut: if A Replaces B, A automatically Conflicts B
-        conflicts |= replaces
-
-        if depends:
-            control['Depends'] = ', '.join(sorted(depends))
-        if recommends:
-            control['Recommends'] = ', '.join(sorted(recommends))
-        if suggests:
-            control['Suggests'] = ', '.join(sorted(suggests))
-        if provides:
-            control['Provides'] = ', '.join(sorted(provides))
-        if replaces:
-            control['Replaces'] = ', '.join(sorted(replaces))
-        if conflicts:
-            control['Conflicts'] = ', '.join(sorted(conflicts))
-        if breaks:
-            control['Breaks'] = ', '.join(sorted(breaks))
+        dep['conflicts'] |= dep['replaces']
+
+        for k, v in dep.items():
+            if v:
+                control[k.title()] = ', '.join(sorted(v))
 
         if 'Description' not in control:
             short_desc, long_desc = self.generate_description(package)
@@ -2192,7 +2164,7 @@ class PackagingTask(object):
 
         for package in set(possible):
             if 'build-depends' in package.debian:
-                for tool in package.debian['build-depends'].split(','):
+                for tool in package.debian['build-depends']:
                     tool = tool.strip()
                     if not which(tool) and not PACKAGE_CACHE.is_installed(tool):
                         logger.error('package "%s" is needed to build "%s"' %

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