Skip to content

Commit

Permalink
Merge pull request #1650 from pypa/feature/include-pyproject.toml
Browse files Browse the repository at this point in the history
Include pyproject.toml in sdist
  • Loading branch information
jaraco committed Dec 31, 2019
2 parents e6bdf25 + 2eb3ba1 commit d971118
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 0 deletions.
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):
"""
Check if pyproject.toml is included in source distribution if present
"""
open(os.path.join(self.temp_dir, 'pyproject.toml'), 'w').close()
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

0 comments on commit d971118

Please sign in to comment.