diff options
author | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2023-04-27 07:35:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-27 07:35:21 +0200 |
commit | 20083e16e1b999cde99d8a19a53e1f9f4464f52f (patch) | |
tree | e68e0b5f4cbef9baa1b32e59361cb9e9be191b08 | |
parent | 126a49c3f9e6b4f3f077f83595af08a74895b4a2 (diff) | |
parent | 8af496d3f58fc20bc5e005e2e99d6eb2bc3d8d43 (diff) | |
download | setuptools-scm-20083e16e1b999cde99d8a19a53e1f9f4464f52f.tar.gz |
Merge pull request #841 from RonnyPfannschmidt/cleanups
fix #838 - handle empty tag regex
-rw-r--r-- | src/setuptools_scm/__init__.py | 44 | ||||
-rw-r--r-- | src/setuptools_scm/_log.py | 6 | ||||
-rw-r--r-- | src/setuptools_scm/version.py | 21 | ||||
-rw-r--r-- | testing/test_basic_api.py | 7 |
4 files changed, 55 insertions, 23 deletions
diff --git a/src/setuptools_scm/__init__.py b/src/setuptools_scm/__init__.py index b29273c..faea673 100644 --- a/src/setuptools_scm/__init__.py +++ b/src/setuptools_scm/__init__.py @@ -6,6 +6,7 @@ from __future__ import annotations import os import re +import warnings from typing import Any from typing import Pattern from typing import TYPE_CHECKING @@ -133,7 +134,15 @@ def get_version( version_cls = _validate_version_cls(version_cls, normalize) del normalize if isinstance(tag_regex, str): - tag_regex = re.compile(tag_regex) + if tag_regex == "": + warnings.warn( + DeprecationWarning( + "empty regex for tag regex is invalid, using default" + ) + ) + tag_regex = DEFAULT_TAG_REGEX + else: + tag_regex = re.compile(tag_regex) config = Configuration(**locals()) maybe_version = _get_version(config) @@ -143,23 +152,26 @@ def get_version( def _get_version(config: Configuration) -> str | None: - parsed_version = _do_parse(config) - if parsed_version is None: - return None - version_string = _format_version( - parsed_version, - version_scheme=config.version_scheme, - local_scheme=config.local_scheme, - ) - if config.write_to is not None: - dump_version( - root=config.root, - version=version_string, - write_to=config.write_to, - template=config.write_to_template, + from ._log import magic_debug + + with magic_debug(): + parsed_version = _do_parse(config) + if parsed_version is None: + return None + version_string = _format_version( + parsed_version, + version_scheme=config.version_scheme, + local_scheme=config.local_scheme, ) + if config.write_to is not None: + dump_version( + root=config.root, + version=version_string, + write_to=config.write_to, + template=config.write_to_template, + ) - return version_string + return version_string # Public API diff --git a/src/setuptools_scm/_log.py b/src/setuptools_scm/_log.py index 35c050d..abbdd0c 100644 --- a/src/setuptools_scm/_log.py +++ b/src/setuptools_scm/_log.py @@ -92,3 +92,9 @@ def enable_debug(handler: logging.Handler = _default_handler) -> Iterator[None]: handler.setLevel(old_handler_level) if handler is not _default_handler: log.removeHandler(handler) + + +@contextlib.contextmanager +def magic_debug() -> Iterator[None]: + with enable_debug(): + yield diff --git a/src/setuptools_scm/version.py b/src/setuptools_scm/version.py index 128533c..8cf48e8 100644 --- a/src/setuptools_scm/version.py +++ b/src/setuptools_scm/version.py @@ -38,10 +38,8 @@ SEMVER_LEN = 3 def _parse_version_tag( tag: str | object, config: _config.Configuration ) -> dict[str, str] | None: - tagstring = tag if isinstance(tag, str) else str(tag) - match = config.tag_regex.match(tagstring) + match = config.tag_regex.match(str(tag)) - result = None if match: key: str | int if len(match.groups()) == 1: @@ -49,14 +47,23 @@ def _parse_version_tag( else: key = "version" + full = match.group(0) + log.debug("%r %r %s", tag, config.tag_regex, match) + log.debug( + "key %s data %s, %s, %r", key, match.groupdict(), match.groups(), full + ) result = { "version": match.group(key), - "prefix": match.group(0)[: match.start(key)], - "suffix": match.group(0)[match.end(key) :], + "prefix": full[: match.start(key)], + "suffix": full[match.end(key) :], } - log.debug(f"tag '{tag}' parsed to {result}") - return result + log.debug("tag %r parsed to %r", tag, result) + return result + else: + log.debug("tag %r did not parse", tag) + + return None def callable_or_entrypoint(group: str, callable_or_name: str | Any) -> Any: diff --git a/testing/test_basic_api.py b/testing/test_basic_api.py index f1b4c4f..6fd39bd 100644 --- a/testing/test_basic_api.py +++ b/testing/test_basic_api.py @@ -121,6 +121,13 @@ setup(name="myscm", use_scm_version={"fallback_version": "12.34"}) assert res.stdout == "12.34" +def test_get_version_blank_tag_regex() -> None: + with pytest.warns( + DeprecationWarning, match="empty regex for tag regex is invalid, using default" + ): + setuptools_scm.get_version(tag_regex="") + + @pytest.mark.parametrize( "version", ["1.0", "1.2.3.dev1+ge871260", "1.2.3.dev15+ge871260.d20180625", "2345"] ) |