[game-data-packager] 08/18: Add the ability for games to have aliases

Simon McVittie smcv at debian.org
Thu Jan 22 12:40:41 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 ba7a5750b2312444e3fd429cbb8769b666aa8f16
Author: Simon McVittie <smcv at debian.org>
Date:   Thu Jan 22 11:09:22 2015 +0000

    Add the ability for games to have aliases
---
 data/final-doom.yaml               |  3 +++
 data/ja.yaml                       |  1 +
 data/quake.yaml                    |  5 +++++
 data/quake2.yaml                   |  6 ++++++
 data/spear-of-destiny.yaml         |  1 +
 lib/game_data_packager/__init__.py | 34 ++++++++++++++++++++++++++++++++--
 6 files changed, 48 insertions(+), 2 deletions(-)

diff --git a/data/final-doom.yaml b/data/final-doom.yaml
index 0f66c9f..e5de59b 100644
--- a/data/final-doom.yaml
+++ b/data/final-doom.yaml
@@ -5,6 +5,7 @@
 # http://doomwiki.org/wiki/PLUTONIA.WAD
 shortname: final-doom
 longname: Final Doom
+aliases: [tnt, plutonia]
 
 plugin: doom_common
 
@@ -16,6 +17,7 @@ packages:
     # these are IWADs so technically they behave like full games:
     # you don't need Doom or Doom II to play them
     longname: "Final Doom: TNT: Evilution"
+    aliases: [tnt, t]
     debian:
       engine: "chocolate-doom | doom-engine"
       provides: doom-wad
@@ -26,6 +28,7 @@ packages:
 
   plutonia-wad:
     longname: "Final Doom: The Plutonia Experiment"
+    aliases: [plutonia, p]
     debian:
       engine: "chocolate-doom | doom-engine"
       provides: doom-wad
diff --git a/data/ja.yaml b/data/ja.yaml
index 6819f6e..03375f9 100644
--- a/data/ja.yaml
+++ b/data/ja.yaml
@@ -45,6 +45,7 @@ packages:
       3247293709 9282026 base/assets3.pk3
 
   jedi-academy-bonus-data:
+    aliases: [bonus]
     longname: "Bonus maps for Jedi Academy"
     expansion_for: jedi-academy-data
     install_files_from_cksums: |
diff --git a/data/quake.yaml b/data/quake.yaml
index f983265..0a684ec 100644
--- a/data/quake.yaml
+++ b/data/quake.yaml
@@ -53,6 +53,7 @@ packages:
     install_to: usr/share/games/quake
 
   quake-armagon:
+    aliases: [armagon, hipnotic, mp1, 1]
     expansion_for: quake-registered
     longname: "Quake Mission Pack 1: Scourge of Armagon"
     steam:
@@ -67,6 +68,7 @@ packages:
     install_to: usr/share/games/quake
 
   quake-dissolution:
+    aliases: [dissolution, eternity, rogue, mp2, 2]
     expansion_for: quake-registered
     longname: "Quake Mission Pack 2: Dissolution of Eternity"
     steam:
@@ -83,6 +85,7 @@ packages:
     install_to: usr/share/games/quake
 
   quake-music:
+    aliases: [music]
     expansion_for: quake-registered
     install_to: usr/share/games/quake
     rip_cd:
@@ -91,6 +94,7 @@ packages:
       first_track: 2
 
   quake-armagon-music:
+    aliases: [mp1-music]
     expansion_for: quake-armagon
     install_to: usr/share/games/quake
     rip_cd:
@@ -99,6 +103,7 @@ packages:
       first_track: 2
 
   quake-dissolution-music:
+    aliases: [mp2-music]
     expansion_for: quake-dissolution
     install_to: usr/share/games/quake
     rip_cd:
diff --git a/data/quake2.yaml b/data/quake2.yaml
index 3304719..13f69eb 100644
--- a/data/quake2.yaml
+++ b/data/quake2.yaml
@@ -1,6 +1,7 @@
 %YAML 1.2
 ---
 longname: Quake II
+aliases: [q2rogue, q2xatrix]
 
 help_text: |
   For quake2-full-data, you must provide baseq2/pak0.pak and the baseq2/video
@@ -323,6 +324,7 @@ packages:
     - release.txt_3.14_demo
 
   quake2-music:
+    aliases: [music]
     expansion_for: quake2-full-data
     # http://musicbrainz.org/release/06727a29-435d-423e-90a8-1a4fed5edb54
     install_to: usr/share/games/quake2
@@ -332,6 +334,7 @@ packages:
       first_track: 2
 
   quake2-reckoning-data:
+    aliases: [xatrix, q2xatrix, reckoning, mp1, 1]
     symlinks:
       usr/share/games/quake2/quake2-reckoning: usr/games/quake2
     longname: "Quake II Mission Pack 1: The Reckoning"
@@ -371,6 +374,7 @@ packages:
     - xatrix/docs/release.txt
 
   quake2-reckoning-music:
+    aliases: [mp1music]
     expansion_for: quake2-reckoning-data
     # http://musicbrainz.org/release/a1eb0af4-6348-4aa6-a586-4f41a33c5dea
     install_to: usr/share/games/quake2
@@ -382,6 +386,7 @@ packages:
   quake2-groundzero-data:
     symlinks:
       usr/share/games/quake2/quake2-groundzero: usr/games/quake2
+    aliases: [rogue, q2rogue, groundzero, mp2, 2]
     longname: "Quake II Mission Pack 2: Ground Zero"
     steam:
       id: 2340
@@ -417,6 +422,7 @@ packages:
 
   quake2-groundzero-music:
     expansion_for: quake2-groundzero-data
+    aliases: [mp2music]
     # http://musicbrainz.org/release/7590e38c-f203-425a-b726-37a55b6d2937
     install_to: usr/share/games/quake2
     rip_cd:
diff --git a/data/spear-of-destiny.yaml b/data/spear-of-destiny.yaml
index c542fe7..51223cf 100644
--- a/data/spear-of-destiny.yaml
+++ b/data/spear-of-destiny.yaml
@@ -1,6 +1,7 @@
 %YAML 1.2
 ---
 shortname: spear-of-destiny
+aliases: [spear]
 longname: "Spear of Destiny (Wolfenstein 3D prequel)"
 
 steam:
diff --git a/lib/game_data_packager/__init__.py b/lib/game_data_packager/__init__.py
index d2d318f..014d10e 100644
--- a/lib/game_data_packager/__init__.py
+++ b/lib/game_data_packager/__init__.py
@@ -314,6 +314,9 @@ class GameDataPackage(object):
         # 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.expansion_for = None
@@ -362,6 +365,13 @@ class GameDataPackage(object):
         self.architecture = 'all'
 
     @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
@@ -420,6 +430,9 @@ class GameData(object):
         # The name of the game for command-line purposes, e.g. quake3
         self.shortname = shortname
 
+        # Other command-line names for this game
+        self.aliases = set()
+
         # The formal name of the game, e.g. Quake III Arena
         self.longname = shortname.title()
 
@@ -453,6 +466,9 @@ class GameData(object):
         if 'longname' in self.yaml:
             self.longname = self.yaml['longname']
 
+        if 'aliases' in self.yaml:
+            self.aliases = set(self.yaml['aliases'])
+
         if 'try_repack_from' in self.yaml:
             paths = self.yaml['try_repack_from']
             if isinstance(paths, list):
@@ -693,7 +709,7 @@ class GameData(object):
     def _populate_package(self, package, d):
         for k in ('expansion_for', 'longname', 'symlinks', 'install_to',
                 'install_to_docdir', 'install_contents_of', 'steam', 'debian',
-                'rip_cd', 'architecture'):
+                'rip_cd', 'architecture', 'aliases'):
             if k in d:
                 setattr(package, k, d[k])
 
@@ -1732,8 +1748,15 @@ class GameData(object):
         return os.path.join(DATADIR, package.name + '.control.in')
 
     def add_parser(self, parsers, base_parser, **kwargs):
+        aliases = self.aliases
+
+        for package in self.packages.values():
+            aliases.add(package.name)
+            # do not add all the package's aliases: they can be things
+            # that collide with other games, like mp1
+
         parser = parsers.add_parser(self.shortname,
-                help=self.longname, aliases=self.packages.keys(),
+                help=self.longname, aliases=aliases,
                 description=self.help_text,
                 formatter_class=argparse.RawDescriptionHelpFormatter,
                 parents=(base_parser,),
@@ -1799,6 +1822,11 @@ class GameData(object):
 
         self.save_downloads = args.save_downloads
 
+        for package in self.packages.values():
+            if args.shortname in package.aliases:
+                args.shortname = package.name
+                break
+
         if args.shortname in self.packages:
             if args.packages and args.packages != [args.shortname]:
                 not_the_one = [p for p in args.packages if p != args.shortname]
@@ -2306,6 +2334,8 @@ def run_command_line():
         for game in games.values():
             if parsed.shortname in game.packages:
                 break
+            if parsed.shortname in game.aliases:
+                break
         else:
             raise AssertionError('could not find %s' % parsed.shortname)
 

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