[oe-commits] [openembedded-core] 01/03: package_manager: Fix multilib package arch ordering issues

git at git.openembedded.org git at git.openembedded.org
Tue Jun 21 12:00:44 UTC 2016


rpurdie pushed a commit to branch master
in repository openembedded-core.

commit 61a33582dfc964d612d20d34734a787d873e312c
Author: Richard Purdie <richard.purdie at linuxfoundation.org>
AuthorDate: Tue Jun 21 12:57:25 2016 +0100

    package_manager: Fix multilib package arch ordering issues
    
    Order is not preserved in dict() and this code depends on the order of
    these lists of package architectures used when multilibs are enabled.
    This caused 'random' breakage where sometimes the correct order was present
    and sometimes it wasn't.
    
    Use collections.OrderedDict() to avoid this problem.
    
    Kudos to Bill Randle and Alejandro Hernandez who did most of the work debugging
    this, I simply took the problem they identified and wrote a patch to fix it.
    
    This unblocks the M1 build but this code needs auditing as there are clearly
    other ordering issues (e.g. the set() usage).
    
    [YOCTO #9717]
    
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 meta/lib/oe/package_manager.py | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
index 4aaff8c..bc22c5f 100644
--- a/meta/lib/oe/package_manager.py
+++ b/meta/lib/oe/package_manager.py
@@ -5,6 +5,7 @@ import subprocess
 import shutil
 import multiprocessing
 import re
+import collections
 import bb
 import tempfile
 import oe.utils
@@ -101,13 +102,8 @@ class Indexer(object, metaclass=ABCMeta):
 
 class RpmIndexer(Indexer):
     def get_ml_prefix_and_os_list(self, arch_var=None, os_var=None):
-        package_archs = {
-            'default': [],
-        }
-
-        target_os = {
-            'default': "",
-        }
+        package_archs = collections.OrderedDict()
+        target_os = collections.OrderedDict()
 
         if arch_var is not None and os_var is not None:
             package_archs['default'] = self.d.getVar(arch_var, True).split()
@@ -138,7 +134,7 @@ class RpmIndexer(Indexer):
                         target_os[eext[1]] = localdata.getVar("TARGET_OS",
                                                               True).strip()
 
-        ml_prefix_list = dict()
+        ml_prefix_list = collections.OrderedDict()
         for mlib in package_archs:
             if mlib == 'default':
                 ml_prefix_list[mlib] = package_archs[mlib]

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list