summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIonel Cristian Mărieș <contact@ionelmc.ro>2019-05-10 13:49:11 +0300
committerIonel Cristian Mărieș <contact@ionelmc.ro>2019-05-10 13:55:33 +0300
commitea4a6e5eb885a2f013e1b3e5374476dceec2a2fa (patch)
treee2003f220390ea04d4c190f2f80ff41ba9a77d48
parentd1ac9d1e0fabc0905a3c854004ac8fd57117ea6d (diff)
downloadsetuptools-scm-ea4a6e5eb885a2f013e1b3e5374476dceec2a2fa.tar.gz
Use a different root for fallbacks. Remove old hack that merely checked entrypoint existence (and not if results are valid). Ref #333.
-rw-r--r--src/setuptools_scm/__init__.py23
-rw-r--r--src/setuptools_scm/config.py1
-rw-r--r--src/setuptools_scm/integration.py8
-rw-r--r--testing/test_git.py15
-rw-r--r--testing/test_regressions.py2
5 files changed, 32 insertions, 17 deletions
diff --git a/src/setuptools_scm/__init__.py b/src/setuptools_scm/__init__.py
index f9ab5c2..83cf5bb 100644
--- a/src/setuptools_scm/__init__.py
+++ b/src/setuptools_scm/__init__.py
@@ -34,9 +34,9 @@ def version_from_scm(root):
return _version_from_entrypoint(config, "setuptools_scm.parse_scm")
-def _call_entrypoint_fn(config, fn):
+def _call_entrypoint_fn(root, config, fn):
if function_has_arg(fn, "config"):
- return fn(config.absolute_root, config=config)
+ return fn(root, config=config)
else:
warnings.warn(
"parse functions are required to provide a named argument"
@@ -44,12 +44,17 @@ def _call_entrypoint_fn(config, fn):
category=PendingDeprecationWarning,
stacklevel=2,
)
- return fn(config.absolute_root)
+ return fn(root)
-def _version_from_entrypoint(config, entrypoint):
- for ep in iter_matching_entrypoints(config.absolute_root, entrypoint):
- version = _call_entrypoint_fn(config, ep.load())
+def _version_from_entrypoint(config, entrypoint, fallback=False):
+ if fallback:
+ entrypoint += "_fallback"
+ root = config.fallback_root
+ else:
+ root = config.absolute_root
+ for ep in iter_matching_entrypoints(root, entrypoint):
+ version = _call_entrypoint_fn(root, config, ep.load())
if version:
return version
@@ -81,20 +86,20 @@ def _do_parse(config):
return meta(tag=pretended, preformatted=True, config=config)
if config.parse:
- parse_result = _call_entrypoint_fn(config, config.parse)
+ parse_result = _call_entrypoint_fn(config.absolute_root, config, config.parse)
if isinstance(parse_result, string_types):
raise TypeError(
"version parse result was a string\nplease return a parsed version"
)
version = parse_result or _version_from_entrypoint(
- config, "setuptools_scm.parse_scm_fallback"
+ config, "setuptools_scm.parse_scm", fallback=True
)
else:
# include fallbacks after dropping them from the main entrypoint
version = _version_from_entrypoint(
config, "setuptools_scm.parse_scm"
) or _version_from_entrypoint(
- config, "setuptools_scm.parse_scm_fallback"
+ config, "setuptools_scm.parse_scm", fallback=True
)
if version:
diff --git a/src/setuptools_scm/config.py b/src/setuptools_scm/config.py
index 7b1d88b..f093c2e 100644
--- a/src/setuptools_scm/config.py
+++ b/src/setuptools_scm/config.py
@@ -61,6 +61,7 @@ class Configuration(object):
self.write_to = ""
self.write_to_template = None
self.fallback_version = None
+ self.fallback_root = _check_absolute_root(".", None)
self.parse = None
self.tag_regex = DEFAULT_TAG_REGEX
self.git_describe_command = None
diff --git a/src/setuptools_scm/integration.py b/src/setuptools_scm/integration.py
index 737e84f..e18b3e5 100644
--- a/src/setuptools_scm/integration.py
+++ b/src/setuptools_scm/integration.py
@@ -2,7 +2,6 @@ from pkg_resources import iter_entry_points
from .version import _warn_if_setuptools_outdated
from .utils import do
-from .discover import iter_matching_entrypoints
from . import get_version
@@ -14,12 +13,7 @@ def version_keyword(dist, keyword, value):
value = {}
if getattr(value, "__call__", None):
value = value()
- # this piece of code is a hack to counter the mistake in root finding
- matching_fallbacks = iter_matching_entrypoints(
- ".", "setuptools_scm.parse_scm_fallback"
- )
- if any(matching_fallbacks):
- value.pop("root", None)
+
dist.metadata.version = get_version(**value)
diff --git a/testing/test_git.py b/testing/test_git.py
index a889293..4d6b653 100644
--- a/testing/test_git.py
+++ b/testing/test_git.py
@@ -1,3 +1,5 @@
+import sys
+
from setuptools_scm import integration
from setuptools_scm.utils import do
from setuptools_scm import git
@@ -29,6 +31,19 @@ def test_parse_describe_output(given, tag, number, node, dirty):
assert parsed == (tag, number, node, dirty)
+def test_root_relative_to(tmpdir, wd, monkeypatch):
+ monkeypatch.delenv("SETUPTOOLS_SCM_DEBUG")
+ p = wd.cwd.ensure("sub/package", dir=1)
+ p.join("setup.py").write(
+ """from setuptools import setup
+setup(use_scm_version={"root": "../..",
+ "relative_to": __file__})
+"""
+ )
+ res = do((sys.executable, "setup.py", "--version"), p)
+ assert res == "0.1.dev0"
+
+
@pytest.mark.issue("https://github.com/pypa/setuptools_scm/issues/298")
def test_file_finder_no_history(wd, caplog):
file_list = git_find_files(str(wd.cwd))
diff --git a/testing/test_regressions.py b/testing/test_regressions.py
index 702cbf2..9327244 100644
--- a/testing/test_regressions.py
+++ b/testing/test_regressions.py
@@ -29,7 +29,7 @@ def test_pkginfo_noscmroot(tmpdir, monkeypatch):
do("git init", p.dirpath())
res = do((sys.executable, "setup.py", "--version"), p)
- assert res == "1.0"
+ assert res == "0.1.dev0"
def test_pip_egg_info(tmpdir, monkeypatch):