summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2016-10-05 21:16:52 +0200
committerGitHub <noreply@github.com>2016-10-05 21:16:52 +0200
commitb0a95760a792e768eaeacc58d03d490c55483147 (patch)
tree5b432fe78f36313fd6407c9560880dae83c4e6bc
parentf9ca54d95d9a43f4da0c226d7876ecdc64cb93cb (diff)
parent6e6c18e1c5fb99c0dd8777a64e51fab8edda31b2 (diff)
downloadsetuptools-scm-b0a95760a792e768eaeacc58d03d490c55483147.tar.gz
Merge pull request #104 from RonnyPfannschmidt/master
fix issue #103 - reorder version dumping
-rw-r--r--CHANGELOG.rst7
-rw-r--r--setuptools_scm/__init__.py38
-rw-r--r--setuptools_scm/hacks.py3
-rw-r--r--testing/test_basic_api.py4
-rw-r--r--testing/test_functions.py2
5 files changed, 38 insertions, 16 deletions
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index b0cce34..49fd69a 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 1bb529d..04fd85a 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 7c8f507..db13e9b 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 4132c27..464343b 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 cfb9eb9..eae9e9c 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:")