60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
import sys
|
|
|
|
import py
|
|
|
|
from tox import reporter
|
|
from tox.util.path import ensure_empty_dir
|
|
|
|
|
|
def make_sdist(config, session):
|
|
setup = config.setupdir.join("setup.py")
|
|
pyproject = config.setupdir.join("pyproject.toml")
|
|
setup_check = setup.check()
|
|
if not setup_check and not pyproject.check():
|
|
reporter.error(
|
|
"No pyproject.toml or setup.py file found. The expected locations are:\n"
|
|
" {pyproject} or {setup}\n"
|
|
"You can\n"
|
|
" 1. Create one:\n"
|
|
" https://tox.readthedocs.io/en/latest/example/package.html\n"
|
|
" 2. Configure tox to avoid running sdist:\n"
|
|
" https://tox.readthedocs.io/en/latest/example/general.html\n"
|
|
" 3. Configure tox to use an isolated_build".format(pyproject=pyproject, setup=setup),
|
|
)
|
|
raise SystemExit(1)
|
|
if not setup_check:
|
|
reporter.error(
|
|
"pyproject.toml file found.\n"
|
|
"To use a PEP 517 build-backend you are required to "
|
|
"configure tox to use an isolated_build:\n"
|
|
"https://tox.readthedocs.io/en/latest/example/package.html\n",
|
|
)
|
|
raise SystemExit(1)
|
|
with session.newaction("GLOB", "packaging") as action:
|
|
action.setactivity("sdist-make", setup)
|
|
ensure_empty_dir(config.distdir)
|
|
build_log = action.popen(
|
|
[sys.executable, setup, "sdist", "--formats=zip", "--dist-dir", config.distdir],
|
|
cwd=config.setupdir,
|
|
returnout=True,
|
|
)
|
|
reporter.verbosity2(build_log)
|
|
try:
|
|
return config.distdir.listdir()[0]
|
|
except py.error.ENOENT:
|
|
# check if empty or comment only
|
|
data = []
|
|
with open(str(setup)) as fp:
|
|
for line in fp:
|
|
if line and line[0] == "#":
|
|
continue
|
|
data.append(line)
|
|
if not "".join(data).strip():
|
|
reporter.error("setup.py is empty")
|
|
raise SystemExit(1)
|
|
reporter.error(
|
|
"No dist directory found. Please check setup.py, e.g with:\n"
|
|
" python setup.py sdist",
|
|
)
|
|
raise SystemExit(1)
|