Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Include pyproject.toml in sdist #1650

Merged
merged 9 commits into from
Dec 31, 2019
1 change: 1 addition & 0 deletions changelog.d/1634.breaking.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Include ``pyproject.toml`` in source distribution by default. Projects relying on the previous behavior where ``pyproject.toml`` was excluded by default should stop relying on that behavior or add ``exclude pyproject.toml`` to their MANIFEST.in file.
8 changes: 8 additions & 0 deletions setuptools/command/sdist.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,14 @@ def __read_template_hack(self):
if has_leaky_handle:
read_template = __read_template_hack

def _add_defaults_optional(self):
if six.PY2:
sdist_add_defaults._add_defaults_optional(self)
else:
super()._add_defaults_optional()
if os.path.isfile('pyproject.toml'):
self.filelist.append('pyproject.toml')

def _add_defaults_python(self):
"""getting python files"""
if self.distribution.has_pure_modules():
Expand Down
21 changes: 21 additions & 0 deletions setuptools/tests/test_build_meta.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,27 @@ def test_build_sdist_version_change(self, build_backend):
assert os.path.isfile(
os.path.join(os.path.abspath("out_sdist"), sdist_name))

def test_build_sdist_pyproject_toml_exists(self, tmpdir_cwd):
files = {
'setup.py': DALS("""
__import__('setuptools').setup(
name='foo',
version='0.0.0',
py_modules=['hello']
)"""),
'hello.py': '',
'pyproject.toml': DALS("""
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta
"""),
}
build_files(files)
build_backend = self.get_build_backend()
targz_path = build_backend.build_sdist("temp")
with tarfile.open(os.path.join("temp", targz_path)) as tar:
assert any('pyproject.toml' in name for name in tar.getnames())

def test_build_sdist_setup_py_exists(self, tmpdir_cwd):
# If build_sdist is called from a script other than setup.py,
# ensure setup.py is included
Expand Down
14 changes: 14 additions & 0 deletions setuptools/tests/test_sdist.py
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,20 @@ def test_sdist_with_latin1_encoded_filename(self):
except UnicodeDecodeError:
filename not in cmd.filelist.files

def test_pyproject_toml_in_sdist(self):
jaraco marked this conversation as resolved.
Show resolved Hide resolved
"""
Check if pyproject.toml is included in source distribution if present
"""
open(os.path.join(self.temp_dir, 'pyproject.toml'), 'w').close()
jaraco marked this conversation as resolved.
Show resolved Hide resolved
dist = Distribution(SETUP_ATTRS)
dist.script_name = 'setup.py'
cmd = sdist(dist)
cmd.ensure_finalized()
with quiet():
cmd.run()
manifest = cmd.filelist.files
assert 'pyproject.toml' in manifest


def test_default_revctrl():
"""
Expand Down