@@ -93,3 +93,66 @@ def test_distutils_has_origin():
93
93
Distutils module spec should have an origin. #2990.
94
94
"""
95
95
assert __import__ ('distutils' ).__spec__ .origin
96
+
97
+
98
+ ENSURE_IMPORTS_ARE_NOT_DUPLICATED = r"""
99
+ # Depending on the importlib machinery and _distutils_hack, some imports are
100
+ # duplicated resulting in different module objects being loaded, which prevents
101
+ # patches as shown in #3042.
102
+ # This script provides a way of verifying if this duplication is happening.
103
+
104
+ from distutils import cmd
105
+ import distutils.command.sdist as sdist
106
+
107
+ # import last to prevent caching
108
+ from distutils import {imported_module}
109
+
110
+ for mod in (cmd, sdist):
111
+ assert mod.{imported_module} == {imported_module}, (
112
+ f"\n{{mod.dir_util}}\n!=\n{{{imported_module}}}"
113
+ )
114
+
115
+ print("success")
116
+ """
117
+
118
+
119
+ @pytest .mark .parametrize (
120
+ "distutils_version, imported_module" ,
121
+ [
122
+ ("stdlib" , "dir_util" ),
123
+ ("stdlib" , "file_util" ),
124
+ ("stdlib" , "archive_util" ),
125
+ ("local" , "dir_util" ),
126
+ ("local" , "file_util" ),
127
+ ("local" , "archive_util" ),
128
+ ]
129
+ )
130
+ def test_modules_are_not_duplicated_on_import (
131
+ distutils_version , imported_module , tmpdir_cwd , venv
132
+ ):
133
+ env = dict (SETUPTOOLS_USE_DISTUTILS = distutils_version )
134
+ script = ENSURE_IMPORTS_ARE_NOT_DUPLICATED .format (imported_module = imported_module )
135
+ cmd = ['python' , '-c' , script ]
136
+ output = popen_text (venv .run )(cmd , env = win_sr (env )).strip ()
137
+ assert output == "success"
138
+
139
+
140
+ ENSURE_LOG_IMPORT_IS_NOT_DUPLICATED = r"""
141
+ # Similar to ENSURE_IMPORTS_ARE_NOT_DUPLICATED
142
+ import distutils.dist as dist
143
+ from distutils import log
144
+
145
+ assert dist.log == log, (
146
+ f"\n{dist.log}\n!=\n{log}"
147
+ )
148
+
149
+ print("success")
150
+ """
151
+
152
+
153
+ @pytest .mark .parametrize ("distutils_version" , "local stdlib" .split ())
154
+ def test_log_module_is_not_duplicated_on_import (distutils_version , tmpdir_cwd , venv ):
155
+ env = dict (SETUPTOOLS_USE_DISTUTILS = distutils_version )
156
+ cmd = ['python' , '-c' , ENSURE_LOG_IMPORT_IS_NOT_DUPLICATED ]
157
+ output = popen_text (venv .run )(cmd , env = win_sr (env )).strip ()
158
+ assert output == "success"
0 commit comments