Skip to content

Commit 96f68bb

Browse files
Merge pull request #241 from RonnyPfannschmidt/drop-setuptools-noparse
breaking change, drop support for setuptools<12
2 parents 339cfa1 + e402266 commit 96f68bb

File tree

3 files changed

+75
-4
lines changed

3 files changed

+75
-4
lines changed

setuptools_scm/__main__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,14 @@
44
from setuptools_scm.integration import find_files
55
from setuptools_scm.version import _warn_if_setuptools_outdated
66

7-
if __name__ == '__main__':
7+
8+
def main():
89
_warn_if_setuptools_outdated()
910
print('Guessed Version', get_version())
1011
if 'ls' in sys.argv:
1112
for fname in find_files('.'):
1213
print(fname)
14+
15+
16+
if __name__ == '__main__':
17+
main()

setuptools_scm/version.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
from pkg_resources import iter_entry_points
88

9-
from distutils import log
109
from pkg_resources import parse_version
1110

1211

@@ -21,10 +20,17 @@ def _get_version_class():
2120
VERSION_CLASS = _get_version_class()
2221

2322

23+
class SetuptoolsOutdatedWarning(Warning):
24+
pass
25+
26+
27+
# append so integrators can disable the warning
28+
warnings.simplefilter('error', SetuptoolsOutdatedWarning, append=1)
29+
30+
2431
def _warn_if_setuptools_outdated():
2532
if VERSION_CLASS is None:
26-
log.warn("your setuptools is too old (<12)")
27-
log.warn("setuptools_scm functionality is degraded")
33+
warnings.warn("your setuptools is too old (<12)", SetuptoolsOutdatedWarning)
2834

2935

3036
def callable_or_entrypoint(group, callable_or_name):

testing/test_setuptools_support.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
"""
2+
integration tests that check setuptools version support
3+
"""
4+
import sys
5+
import os
6+
import subprocess
7+
import pytest
8+
pytestmark = pytest.mark.skipif(
9+
"sys.version_info >= (3,6,0)",
10+
reason="integration with old versions no longer needed on py3.6+")
11+
12+
13+
@pytest.fixture(scope='session')
14+
def get_setuptools_packagedir(request):
15+
targets = request.config.cache.makedir('setuptools_installs')
16+
17+
def makeinstall(version):
18+
target = targets.ensure(version, dir=1)
19+
subprocess.check_call([
20+
sys.executable, '-m', 'pip',
21+
'install', '--no-binary', 'setuptools', 'setuptools==' + version,
22+
'-t', str(target),
23+
])
24+
return target
25+
return makeinstall
26+
27+
28+
SCRIPT = """
29+
import setuptools
30+
print(setuptools.__version__)
31+
import setuptools_scm.version
32+
from setuptools_scm.__main__ import main
33+
main()
34+
"""
35+
36+
37+
def check(packagedir, **env):
38+
subprocess.check_call(
39+
[sys.executable, '-c', SCRIPT],
40+
env=dict(os.environ, PYTHONPATH=".:" + str(packagedir), **env))
41+
42+
43+
def test_old_setuptools_fails(get_setuptools_packagedir):
44+
packagedir = get_setuptools_packagedir("0.9.8")
45+
with pytest.raises(subprocess.CalledProcessError):
46+
check(packagedir)
47+
48+
49+
def test_old_setuptools_allows_with_warnings(get_setuptools_packagedir):
50+
51+
packagedir = get_setuptools_packagedir("0.9.8")
52+
# filter using warning since in the early python startup
53+
check(
54+
packagedir,
55+
PYTHONWARNINGS="once::Warning")
56+
57+
58+
def test_distlib_setuptools_works(get_setuptools_packagedir):
59+
packagedir = get_setuptools_packagedir("12.0.1")
60+
check(packagedir)

0 commit comments

Comments
 (0)