diff --git a/CHANGELOG.rst b/CHANGELOG.rst index b0cce34d..49fd69a7 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,3 +1,10 @@ +v2.0.0 +======== + +* fix regression caused by the fix of #101 + * assert types for version dumping + * strictly pass all versions trough parsed version metadata + v1.12.0 ======= diff --git a/setuptools_scm/__init__.py b/setuptools_scm/__init__.py index 1bb529d6..04fd85a0 100644 --- a/setuptools_scm/__init__.py +++ b/setuptools_scm/__init__.py @@ -4,9 +4,10 @@ """ import os import sys +import warnings from .utils import trace -from .version import format_version +from .version import format_version, meta, ScmVersion from .discover import find_matching_entrypoint PRETEND_KEY = 'SETUPTOOLS_SCM_PRETEND_VERSION' @@ -37,6 +38,7 @@ def _version_from_entrypoint(root, entrypoint): def dump_version(root, version, write_to, template=None): + assert isinstance(version, string_types) if not write_to: return target = os.path.normpath(os.path.join(root, write_to)) @@ -59,10 +61,21 @@ def dump_version(root, version, write_to, template=None): def _do_parse(root, parse): pretended = os.environ.get(PRETEND_KEY) if pretended: - return pretended + # we use meta here since the pretended version + # must adhere to the pep to begin with + return meta(pretended) if parse: - version = parse(root) or _version_from_entrypoint( + parse_result = parse(root) + if isinstance(parse_result, string_types): + warnings.warn( + "version parse result was a string\n" + "please return a parsed version", + category=DeprecationWarning) + # we use ScmVersion here in order to keep legacy code working + # for 2.0 we should use meta + parse_result = ScmVersion(parse_result) + version = parse_result or _version_from_entrypoint( root, 'setuptools_scm.parse_scm_fallback') else: # include fallbacks after dropping them from the main entrypoint @@ -101,18 +114,17 @@ def get_version(root='.', root = os.path.abspath(root) trace('root', repr(root)) - version = _do_parse(root, parse) + parsed_version = _do_parse(root, parse) - if version: + if parsed_version: + version_string = format_version( + parsed_version, + version_scheme=version_scheme, + local_scheme=local_scheme) dump_version( root=root, - version=version, + version=version_string, write_to=write_to, template=write_to_template) - if isinstance(version, string_types): - return version - version = format_version( - version, - version_scheme=version_scheme, - local_scheme=local_scheme) - return version + + return version_string diff --git a/setuptools_scm/hacks.py b/setuptools_scm/hacks.py index 7c8f507d..db13e9b4 100644 --- a/setuptools_scm/hacks.py +++ b/setuptools_scm/hacks.py @@ -1,5 +1,6 @@ import os from .utils import data_from_mime, trace +from .version import meta def parse_pkginfo(root): @@ -9,4 +10,4 @@ def parse_pkginfo(root): data = data_from_mime(pkginfo) version = data.get('Version') if version != 'UNKNOWN': - return version + return meta(version) diff --git a/testing/test_basic_api.py b/testing/test_basic_api.py index 4132c27a..464343b9 100644 --- a/testing/test_basic_api.py +++ b/testing/test_basic_api.py @@ -74,7 +74,9 @@ def test_dump_version(tmpdir): ast.parse(content) -def test_parse_plain(): +def test_parse_plain(recwarn): def parse(root): return 'tricked you' assert setuptools_scm.get_version(parse=parse) == 'tricked you' + assert str(recwarn.pop().message) == \ + 'version parse result was a string\nplease return a parsed version' diff --git a/testing/test_functions.py b/testing/test_functions.py index cfb9eb98..eae9e9c6 100644 --- a/testing/test_functions.py +++ b/testing/test_functions.py @@ -52,7 +52,7 @@ def test_format_version(version, monkeypatch, scheme, expected): def test_dump_version_doesnt_bail_on_value_error(tmpdir): write_to = "VERSION" - version = VERSIONS['exact'] + version = str(VERSIONS['exact'].tag) with pytest.raises(ValueError) as exc_info: dump_version(tmpdir.strpath, version, write_to) assert str(exc_info.value).startswith("bad file format:")