diff options
author | Ionel Cristian Mărieș <contact@ionelmc.ro> | 2019-05-10 13:49:11 +0300 |
---|---|---|
committer | Ionel Cristian Mărieș <contact@ionelmc.ro> | 2019-05-10 13:55:33 +0300 |
commit | ea4a6e5eb885a2f013e1b3e5374476dceec2a2fa (patch) | |
tree | e2003f220390ea04d4c190f2f80ff41ba9a77d48 | |
parent | d1ac9d1e0fabc0905a3c854004ac8fd57117ea6d (diff) | |
download | setuptools-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__.py | 23 | ||||
-rw-r--r-- | src/setuptools_scm/config.py | 1 | ||||
-rw-r--r-- | src/setuptools_scm/integration.py | 8 | ||||
-rw-r--r-- | testing/test_git.py | 15 | ||||
-rw-r--r-- | testing/test_regressions.py | 2 |
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): |