gh-120910: Fix issue resolving relative paths outside site-packages. (#120911)

Incorporates changes from importlib_metadata 7.2.1.
This commit is contained in:
Jason R. Coombs 2024-06-23 13:06:07 -04:00 committed by GitHub
parent 0b918e81c1
commit 1ba0bb21ed
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 38 additions and 1 deletions

View File

@ -567,7 +567,7 @@ class Distribution(DeprecatedNonAbstract):
paths = ( paths = (
(subdir / name) (subdir / name)
.resolve() .resolve()
.relative_to(self.locate_file('').resolve()) .relative_to(self.locate_file('').resolve(), walk_up=True)
.as_posix() .as_posix()
for name in text.splitlines() for name in text.splitlines()
) )

View File

@ -234,6 +234,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): class EggInfoPkgPipInstalledNoModules(OnSysPath, SiteBuilder):
files: FilesSpec = { files: FilesSpec = {
"egg_with_no_modules_pkg.egg-info": { "egg_with_no_modules_pkg.egg-info": {

View File

@ -29,6 +29,7 @@ class APITests(
fixtures.EggInfoPkg, fixtures.EggInfoPkg,
fixtures.EggInfoPkgPipInstalledNoToplevel, fixtures.EggInfoPkgPipInstalledNoToplevel,
fixtures.EggInfoPkgPipInstalledNoModules, fixtures.EggInfoPkgPipInstalledNoModules,
fixtures.EggInfoPkgPipInstalledExternalDataFiles,
fixtures.EggInfoPkgSourcesFallback, fixtures.EggInfoPkgSourcesFallback,
fixtures.DistInfoPkg, fixtures.DistInfoPkg,
fixtures.DistInfoPkgWithDot, fixtures.DistInfoPkgWithDot,

View File

@ -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.