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
32 changes: 32 additions & 0 deletions setuptools/tests/test_sdist.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
"""sdist tests"""

from __future__ import print_function

import os
import shutil
import sys
Expand Down Expand Up @@ -449,6 +451,36 @@ 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_pyproject_toml_excluded(self):
"""
Check that pyproject.toml can excluded even if present
"""
open(os.path.join(self.temp_dir, 'pyproject.toml'), 'w').close()
with open('MANIFEST.in', 'w') as mts:
print('exclude pyproject.toml', file=mts)
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' not in manifest


def test_default_revctrl():
"""
Expand Down