Skip to content

Commit d6474ff

Browse files
breaking change, drop support for setuptools<12
1 parent 339cfa1 commit d6474ff

File tree

3 files changed

+71
-4
lines changed

3 files changed

+71
-4
lines changed

setuptools_scm/__main__.py

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

0 commit comments

Comments
 (0)