From: Juro Bystricky Date: Mon, 10 Apr 2017 20:59:36 +0000 (-0700) Subject: classutils.py: deterministic sorting X-Git-Tag: yocto-2.3~151 X-Git-Url: https://code.ossystems.io/gitweb?a=commitdiff_plain;h=82ae62f28dd2d5fb2fb261478ac6161315ac6c38;p=openembedded-core.git classutils.py: deterministic sorting The method "prioritized" returns a list sorted by the value of the "priority" field, in descending order. However, if several list items have the same priority, the ordering of those items within the priority-sorted list becomes random. As a consequence, we may end up with a non-deterministic oe-terminal spawning, as several terminals have the same priority. So running commands such as $ bitbake xxx -cdevshell $ bitbake yyy -cmenuconfig may spawn a different terminal each time, for example sometimes Gnome and sometimes Konsole as hey have the same priority. Rather than modifying the priorities so they all differ, we sub-sort the list based on (terminal) names. This way we achieve a deterministic outcome. [YOCTO#10938] Signed-off-by: Juro Bystricky Signed-off-by: Richard Purdie --- diff --git a/meta/lib/oe/classutils.py b/meta/lib/oe/classutils.py index e7856c86f2..45cd5249be 100644 --- a/meta/lib/oe/classutils.py +++ b/meta/lib/oe/classutils.py @@ -36,7 +36,7 @@ abstract base classes out of the registry).""" @classmethod def prioritized(tcls): return sorted(list(tcls.registry.values()), - key=lambda v: v.priority, reverse=True) + key=lambda v: (v.priority, v.name), reverse=True) def unregister(cls): for key in cls.registry.keys():