Allow PEP517 without setup_requires
When using PBR PEP517 support without setup_requires were were infinitely recursing because Distribution.finalize_options calls pbr() and pbr() calls Distribution.finalize_options. With a setup_requires this doesn't seem to happen because something is resetting dist.pbr's value from True (callable) to None (not callable) after the initial pbr() call and before further recursion can occur. Explicitly enforce this behavior in pbr() via an explicit update of dist.pbr to None to avoid calling pbr() more than once resulting in the unwanted loop. Change-Id: I1f2b4d34e587389f7e11b99d000e14477cf5091b
This commit is contained in:
parent
d21c2caf1d
commit
de0c717b17
|
@ -130,6 +130,14 @@ def pbr(dist, attr, value):
|
|||
msg = 'Unknown distribution option: %s' % repr(key)
|
||||
warnings.warn(msg)
|
||||
|
||||
# Distribution.finalize_options() is what calls this method. That means
|
||||
# there is potential for recursion here. Recursion seems to be an issue
|
||||
# particularly when using PEP517 build-system configs without
|
||||
# setup_requires in setup.py. We can avoid the recursion by setting
|
||||
# dist.pbr to a None value as the corresponding entrypoint (this function)
|
||||
# will only be called on a non None value.
|
||||
setattr(dist, "pbr", None)
|
||||
|
||||
# Re-finalize the underlying Distribution
|
||||
try:
|
||||
super(dist.__class__, dist).finalize_options()
|
||||
|
|
|
@ -930,7 +930,12 @@ class TestPEP517Support(base.BaseTestCase):
|
|||
sphinx
|
||||
iso8601
|
||||
"""),
|
||||
# Use default PBR test setup.py.
|
||||
# Override default setup.py to remove setup_requires.
|
||||
'setup.py': textwrap.dedent("""\
|
||||
#!/usr/bin/env python
|
||||
import setuptools
|
||||
setuptools.setup(pbr=True)
|
||||
"""),
|
||||
'setup.cfg': textwrap.dedent("""\
|
||||
[metadata]
|
||||
name = test_pep517
|
||||
|
|
Loading…
Reference in New Issue