]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-120910: Fix issue resolving relative paths outside site-packages. (GH-12091...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sun, 23 Jun 2024 17:30:08 +0000 (19:30 +0200)
committerGitHub <noreply@github.com>
Sun, 23 Jun 2024 17:30:08 +0000 (17:30 +0000)
gh-120910: Fix issue resolving relative paths outside site-packages. (GH-120911)

Incorporates changes from importlib_metadata 7.2.1.
(cherry picked from commit 1ba0bb21ed4eb54023fdfccc9cb20be8fff946b1)

Co-authored-by: Jason R. Coombs <jaraco@jaraco.com>
Lib/importlib/metadata/__init__.py
Lib/test/test_importlib/metadata/fixtures.py
Lib/test/test_importlib/metadata/test_api.py
Misc/NEWS.d/next/Library/2024-06-23-11-21-27.gh-issue-120910.t0QXdB.rst [new file with mode: 0644]

index 245f905737cb15ebe41d56820db97009f44712e3..8ce62dd864fc2735dc4c863909b0622b4f5f4548 100644 (file)
@@ -567,7 +567,7 @@ class Distribution(DeprecatedNonAbstract):
         paths = (
             (subdir / name)
             .resolve()
-            .relative_to(self.locate_file('').resolve())
+            .relative_to(self.locate_file('').resolve(), walk_up=True)
             .as_posix()
             for name in text.splitlines()
         )
index 7ff94c9afe88e12648b7631da26fceb60bf45022..2db6c40ffc273d638eeb5998d712943860b1fdfc 100644 (file)
@@ -253,6 +253,40 @@ class EggInfoPkgPipInstalledNoToplevel(OnSysPath, SiteBuilder):
     }
 
 
+class EggInfoPkgPipInstalledExternalDataFiles(OnSysPath, SiteBuilder):
+    files: FilesSpec = {
+        "egg_with_module_pkg.egg-info": {
+            "PKG-INFO": "Name: egg_with_module-pkg",
+            # SOURCES.txt is made from the source archive, and contains files
+            # (setup.py) that are not present after installation.
+            "SOURCES.txt": """
+                egg_with_module.py
+                setup.py
+                egg_with_module.json
+                egg_with_module_pkg.egg-info/PKG-INFO
+                egg_with_module_pkg.egg-info/SOURCES.txt
+                egg_with_module_pkg.egg-info/top_level.txt
+            """,
+            # installed-files.txt is written by pip, and is a strictly more
+            # accurate source than SOURCES.txt as to the installed contents of
+            # the package.
+            "installed-files.txt": """
+                ../../../etc/jupyter/jupyter_notebook_config.d/relative.json
+                /etc/jupyter/jupyter_notebook_config.d/absolute.json
+                ../egg_with_module.py
+                PKG-INFO
+                SOURCES.txt
+                top_level.txt
+            """,
+            # missing top_level.txt (to trigger fallback to installed-files.txt)
+        },
+        "egg_with_module.py": """
+            def main():
+                print("hello world")
+            """,
+    }
+
+
 class EggInfoPkgPipInstalledNoModules(OnSysPath, SiteBuilder):
     files: FilesSpec = {
         "egg_with_no_modules_pkg.egg-info": {
index 33c6e85ee94753503e8f6fbb853bff7f5e59a838..29b261baba4cccd6102a8b7dc1689fdfb61346b0 100644 (file)
@@ -29,6 +29,7 @@ class APITests(
     fixtures.EggInfoPkg,
     fixtures.EggInfoPkgPipInstalledNoToplevel,
     fixtures.EggInfoPkgPipInstalledNoModules,
+    fixtures.EggInfoPkgPipInstalledExternalDataFiles,
     fixtures.EggInfoPkgSourcesFallback,
     fixtures.DistInfoPkg,
     fixtures.DistInfoPkgWithDot,
diff --git a/Misc/NEWS.d/next/Library/2024-06-23-11-21-27.gh-issue-120910.t0QXdB.rst b/Misc/NEWS.d/next/Library/2024-06-23-11-21-27.gh-issue-120910.t0QXdB.rst
new file mode 100644 (file)
index 0000000..3773cdc
--- /dev/null
@@ -0,0 +1,2 @@
+When reading installed files from an egg, use ``relative_to(walk_up=True)``
+to honor files installed outside of the installation root.