xref: /OK3568_Linux_fs/yocto/poky/meta/recipes-devtools/python/python3/deterministic_imports.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1There are two issues here. Firstly, the modules are accessed in on disk order. This
2means behaviour seen on one system might not reproduce on another and is a real headache.
3
4Secondly, empty directories left behind by previous modules might be looked at. This
5has caused a long string of different issues for us.
6
7As a result, patch this to a behaviour which works for us.
8
9Upstream-Status: Pending [need to talk to upstream to see if they'll take one or both fixes]
10Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
11
12
13Index: Python-3.10.4/Lib/importlib/metadata/__init__.py
14===================================================================
15--- Python-3.10.4.orig/Lib/importlib/metadata/__init__.py
16+++ Python-3.10.4/Lib/importlib/metadata/__init__.py
17@@ -819,7 +819,14 @@ class Lookup:
18         self.infos = FreezableDefaultDict(list)
19         self.eggs = FreezableDefaultDict(list)
20
21-        for child in path.children():
22+        for child in sorted(path.children()):
23+            childpath = pathlib.Path(path.root, child)
24+            try:
25+                if childpath.is_dir() and not any(childpath.iterdir()):
26+                    # Empty directories aren't interesting
27+                    continue
28+            except PermissionError:
29+                continue
30             low = child.lower()
31             if low.endswith((".dist-info", ".egg-info")):
32                 # rpartition is faster than splitext and suitable for this purpose.
33