Gentoo Archives: gentoo-portage-dev

From: Zac Medico <zmedico@g.o>
To: gentoo-portage-dev@l.g.o
Cc: Zac Medico <zmedico@g.o>
Subject: [gentoo-portage-dev] [PATCH v3] parse_metadata_use: apply English language preference (bug 599060)
Date: Sun, 06 Nov 2016 22:20:40
Message-Id: 1478470692-5941-1-git-send-email-zmedico@gentoo.org
In Reply to: [gentoo-portage-dev] [PATCH] parse_metadata_use: prefer first language found (bug 599060) by Zac Medico
1 Descriptions may exist for multiple languages, so prefer English
2 language descriptions for use.local.desc content.
3
4 X-Gentoo-Bug: 599060
5 X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=599060
6 ---
7 pym/portage/xml/metadata.py | 28 +++++++++++++++++++++++++++-
8 1 file changed, 27 insertions(+), 1 deletion(-)
9
10 [PATCH v3] sort languages by preference
11
12 diff --git a/pym/portage/xml/metadata.py b/pym/portage/xml/metadata.py
13 index 4940bfb..39aa738 100644
14 --- a/pym/portage/xml/metadata.py
15 +++ b/pym/portage/xml/metadata.py
16 @@ -61,7 +61,7 @@ except (ImportError, SystemError, RuntimeError, Exception):
17 import re
18 import xml.etree.ElementTree
19 from portage import _encodings, _unicode_encode
20 -from portage.util import unique_everseen
21 +from portage.util import cmp_sort_key, unique_everseen
22
23 if sys.hexversion >= 0x3000000:
24 # pylint: disable=W0622
25 @@ -430,6 +430,19 @@ class MetaDataXML(object):
26 maint_str = " ".join(maintainers)
27 return maint_str
28
29 +# lang with higher value is preferred
30 +_lang_pref = {
31 + "" : 0,
32 + "en": 1,
33 +}
34 +
35 +
36 +def _cmp_lang(a, b):
37 + a_score = _lang_pref.get(a.get("lang", ""), -1)
38 + b_score = _lang_pref.get(b.get("lang", ""), -1)
39 +
40 + return a_score - b_score
41 +
42
43 def parse_metadata_use(xml_tree):
44 """
45 @@ -443,6 +456,9 @@ def parse_metadata_use(xml_tree):
46 if not usetags:
47 return uselist
48
49 + # Sort by language preference in descending order.
50 + usetags.sort(key=cmp_sort_key(_cmp_lang), reverse=True)
51 +
52 # It's possible to have multiple 'use' elements.
53 for usetag in usetags:
54 flags = usetag.findall("flag")
55 @@ -455,6 +471,16 @@ def parse_metadata_use(xml_tree):
56 if pkg_flag is not None:
57 flag_restrict = flag.get("restrict")
58
59 + # Descriptions may exist for multiple languages, so
60 + # ignore all except the first description found for a
61 + # particular value of restrict (see bug 599060).
62 + try:
63 + uselist[pkg_flag][flag_restrict]
64 + except KeyError:
65 + pass
66 + else:
67 + continue
68 +
69 # emulate the Element.itertext() method from python-2.7
70 inner_text = []
71 stack = []
72 --
73 2.7.4

Replies