Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion setuptools_scm/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,14 @@
from setuptools_scm.integration import find_files
from setuptools_scm.version import _warn_if_setuptools_outdated

if __name__ == '__main__':

def main():
_warn_if_setuptools_outdated()
print('Guessed Version', get_version())
if 'ls' in sys.argv:
for fname in find_files('.'):
print(fname)


if __name__ == '__main__':
main()
12 changes: 9 additions & 3 deletions setuptools_scm/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

from pkg_resources import iter_entry_points

from distutils import log
from pkg_resources import parse_version


Expand All @@ -21,10 +20,17 @@ def _get_version_class():
VERSION_CLASS = _get_version_class()


class SetuptoolsOutdatedWarning(Warning):
pass


# append so integrators can disable the warning
warnings.simplefilter('error', SetuptoolsOutdatedWarning, append=1)


def _warn_if_setuptools_outdated():
if VERSION_CLASS is None:
log.warn("your setuptools is too old (<12)")
log.warn("setuptools_scm functionality is degraded")
warnings.warn("your setuptools is too old (<12)", SetuptoolsOutdatedWarning)


def callable_or_entrypoint(group, callable_or_name):
Expand Down
60 changes: 60 additions & 0 deletions testing/test_setuptools_support.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
"""
integration tests that check setuptools version support
"""
import sys
import os
import subprocess
import pytest
pytestmark = pytest.mark.skipif(
"sys.version_info >= (3,6,0)",
reason="integration with old versions no longer needed on py3.6+")


@pytest.fixture(scope='session')
def get_setuptools_packagedir(request):
targets = request.config.cache.makedir('setuptools_installs')

def makeinstall(version):
target = targets.ensure(version, dir=1)
subprocess.check_call([
sys.executable, '-m', 'pip',
'install', '--no-binary', 'setuptools', 'setuptools==' + version,
'-t', str(target),
])
return target
return makeinstall


SCRIPT = """
import setuptools
print(setuptools.__version__)
import setuptools_scm.version
from setuptools_scm.__main__ import main
main()
"""


def check(packagedir, **env):
subprocess.check_call(
[sys.executable, '-c', SCRIPT],
env=dict(os.environ, PYTHONPATH=".:" + str(packagedir), **env))


def test_old_setuptools_fails(get_setuptools_packagedir):
packagedir = get_setuptools_packagedir("0.9.8")
with pytest.raises(subprocess.CalledProcessError):
check(packagedir)


def test_old_setuptools_allows_with_warnings(get_setuptools_packagedir):

packagedir = get_setuptools_packagedir("0.9.8")
# filter using warning since in the early python startup
check(
packagedir,
PYTHONWARNINGS="once::Warning")


def test_distlib_setuptools_works(get_setuptools_packagedir):
packagedir = get_setuptools_packagedir("12.0.1")
check(packagedir)