[game-data-packager] 01/01: multilang: better algorithm

Alexandre Detiste detiste-guest at moszumanska.debian.org
Tue Apr 14 17:56:22 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 b66e4e6aa297201576669223d572c67a5f9a20d1
Author: Alexandre Detiste <alexandre.detiste at gmail.com>
Date:   Tue Apr 14 19:55:53 2015 +0200

    multilang: better algorithm
---
 game_data_packager/__init__.py | 43 +++++++++++++++++++++---------------------
 game_data_packager/util.py     |  7 +++++++
 2 files changed, 29 insertions(+), 21 deletions(-)

diff --git a/game_data_packager/__init__.py b/game_data_packager/__init__.py
index 6639b94..5372336 100644
--- a/game_data_packager/__init__.py
+++ b/game_data_packager/__init__.py
@@ -52,6 +52,7 @@ from .util import (MEBIBYTE,
         human_size,
         is_installed,
         prefered_lang,
+        lang_score,
         which)
 from .version import GAME_PACKAGE_VERSION
 
@@ -2339,27 +2340,6 @@ class GameData(object):
         if not possible:
             raise NoPackagesPossible()
 
-        # keep only prefered language
-        if len(possible) > 1:
-            for lang in prefered_lang():
-                for package in set(possible):
-                    if package.lang == lang:
-                        continue
-                    virtual = package.debian.get('provides')
-                    if not virtual:
-                        continue
-                    for other_package in possible:
-                        if other_package.name == package.name:
-                            continue
-                        other_virtual = other_package.debian.get('provides')
-                        if other_virtual != virtual:
-                            continue
-                        logger.info('discarding %s '
-                                    'because %s is prefered language',
-                                     package.name, lang)
-                        possible.discard(package)
-                        break
-
         ready = set()
 
         for package in possible:
@@ -2395,13 +2375,34 @@ class GameData(object):
                         logger.debug('will not produce "%s" because we have '
                             'the full version "%s"', package.name, demo_for)
                         abort = True
+            if abort:
+                continue
 
             for previous in ready:
                 if previous.debian.get('conflicts') == package.name:
                     logger.error('will not produce "%s" because it '
                        'conflicts with "%s"', package.name, previous.name)
                     abort = True
+            if abort:
+                continue
 
+            # keep only prefered language for this virtual package
+            virtual = package.debian.get('provides')
+            if virtual:
+                score = lang_score(package.lang)
+                for other_p in possible:
+                    if other_p.name == package.name:
+                        continue
+                    other_virtual = other_p.debian.get('provides')
+                    if other_virtual != virtual:
+                        continue
+                    other_score = lang_score(other_p.lang)
+                    if score < other_score:
+                        logger.info('will not produce "%s" '
+                                    'because %s is prefered language',
+                                     package.name, other_p.lang)
+                        abort = True
+                        break
             if abort:
                 continue
 
diff --git a/game_data_packager/util.py b/game_data_packager/util.py
index 691a517..a493cf8 100644
--- a/game_data_packager/util.py
+++ b/game_data_packager/util.py
@@ -104,3 +104,10 @@ def prefered_lang():
     if 'en' not in lang_pref:
         lang_pref.append('en')
     return lang_pref
+
+def lang_score(lang):
+    langs = prefered_lang()
+    if lang not in langs:
+        return 0
+
+    return len(langs) - langs.index(lang)

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