aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2018-09-18 09:08:04 -0400
committerGitHub <noreply@github.com>2018-09-18 09:08:04 -0400
commit91e2d0e5b26bfd74a2b9b9d6863c0600275eef06 (patch)
tree0f6e93934317bbf8aefd67f9dbfecd814db9eeec
parentb711d1b53b2556b47273c28dae3345a664c54972 (diff)
parentda5f8619e1cd3e08c8a7d9df1d3753b8f176485b (diff)
downloadexternal_python_setuptools-91e2d0e5b26bfd74a2b9b9d6863c0600275eef06.tar.gz
external_python_setuptools-91e2d0e5b26bfd74a2b9b9d6863c0600275eef06.tar.bz2
external_python_setuptools-91e2d0e5b26bfd74a2b9b9d6863c0600275eef06.zip
Merge pull request #1481 from gaborbernat/sdist-dir
build_meta sdist directory delegate to --dist-dir
-rw-r--r--changelog.d/1481.change.rst1
-rw-r--r--setuptools/build_meta.py6
-rw-r--r--setuptools/tests/test_build_meta.py36
3 files changed, 38 insertions, 5 deletions
diff --git a/changelog.d/1481.change.rst b/changelog.d/1481.change.rst
new file mode 100644
index 00000000..463ba6d9
--- /dev/null
+++ b/changelog.d/1481.change.rst
@@ -0,0 +1 @@
+Join the sdist ``--dist-dir`` and the ``build_meta`` sdist directory argument to point to the same target (meaning the build frontend no longer needs to clean manually the dist dir to avoid multiple sdist presence, and setuptools no longer needs to handle conflicts between the two).
diff --git a/setuptools/build_meta.py b/setuptools/build_meta.py
index f7f9bda2..0067a7ac 100644
--- a/setuptools/build_meta.py
+++ b/setuptools/build_meta.py
@@ -171,11 +171,9 @@ def build_sdist(sdist_directory, config_settings=None):
config_settings = _fix_config(config_settings)
sdist_directory = os.path.abspath(sdist_directory)
sys.argv = sys.argv[:1] + ['sdist'] + \
- config_settings["--global-option"]
+ config_settings["--global-option"] + \
+ ["--dist-dir", sdist_directory]
_run_setup()
- if sdist_directory != 'dist':
- shutil.rmtree(sdist_directory)
- shutil.copytree('dist', sdist_directory)
sdists = [f for f in os.listdir(sdist_directory)
if f.endswith('.tar.gz')]
diff --git a/setuptools/tests/test_build_meta.py b/setuptools/tests/test_build_meta.py
index f1d517bb..7b195e2c 100644
--- a/setuptools/tests/test_build_meta.py
+++ b/setuptools/tests/test_build_meta.py
@@ -1,6 +1,7 @@
from __future__ import unicode_literals
import os
+import shutil
import pytest
@@ -9,7 +10,6 @@ from .textwrap import DALS
__metaclass__ = type
-
futures = pytest.importorskip('concurrent.futures')
importlib = pytest.importorskip('importlib')
@@ -23,12 +23,14 @@ class BuildBackendBase:
class BuildBackend(BuildBackendBase):
"""PEP 517 Build Backend"""
+
def __init__(self, *args, **kwargs):
super(BuildBackend, self).__init__(*args, **kwargs)
self.pool = futures.ProcessPoolExecutor()
def __getattr__(self, name):
"""Handles aribrary function invocations on the build backend."""
+
def method(*args, **kw):
root = os.path.abspath(self.cwd)
caller = BuildBackendCaller(root, self.env, self.backend_name)
@@ -51,6 +53,7 @@ defns = [
'setup.py': DALS("""
__import__('setuptools').setup(
name='foo',
+ version='0.0.0',
py_modules=['hello'],
setup_requires=['six'],
)
@@ -65,6 +68,7 @@ defns = [
assert __name__ == '__main__'
__import__('setuptools').setup(
name='foo',
+ version='0.0.0',
py_modules=['hello'],
setup_requires=['six'],
)
@@ -82,6 +86,7 @@ defns = [
assert variable
__import__('setuptools').setup(
name='foo',
+ version='0.0.0',
py_modules=['hello'],
setup_requires=['six'],
)
@@ -146,3 +151,32 @@ def test_prepare_metadata_for_build_wheel_with_str(build_backend):
dist_info = build_backend.prepare_metadata_for_build_wheel(dist_dir)
assert os.path.isfile(os.path.join(dist_dir, dist_info, 'METADATA'))
+
+
+def test_build_sdist_explicit_dist(build_backend):
+ # explicitly specifying the dist folder should work
+ # the folder sdist_directory and the ``--dist-dir`` can be the same
+ dist_dir = os.path.abspath('dist')
+ sdist_name = build_backend.build_sdist(dist_dir)
+ assert os.path.isfile(os.path.join(dist_dir, sdist_name))
+
+
+def test_build_sdist_version_change(build_backend):
+ sdist_into_directory = os.path.abspath("out_sdist")
+ os.makedirs(sdist_into_directory)
+
+ sdist_name = build_backend.build_sdist(sdist_into_directory)
+ assert os.path.isfile(os.path.join(sdist_into_directory, sdist_name))
+
+ # if the setup.py changes subsequent call of the build meta should still succeed, given the
+ # sdist_directory the frontend specifies is empty
+ with open(os.path.abspath("setup.py"), 'rt') as file_handler:
+ content = file_handler.read()
+ with open(os.path.abspath("setup.py"), 'wt') as file_handler:
+ file_handler.write(content.replace("version='0.0.0'", "version='0.0.1'"))
+
+ shutil.rmtree(sdist_into_directory)
+ os.makedirs(sdist_into_directory)
+
+ sdist_name = build_backend.build_sdist("out_sdist")
+ assert os.path.isfile(os.path.join(os.path.abspath("out_sdist"), sdist_name))