summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2023-03-25 06:51:07 +0100
committerRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2023-03-29 17:04:12 +0200
commitb247393fe97ef7165a8cbfb4292e50297c0b1617 (patch)
treed62228c205ec96b075cd5671ebf3f009f224e2c9
parentb773005ad28b3cdfc8baf4fba5f7b07ac6ef11a6 (diff)
downloadsetuptools-scm-b247393fe97ef7165a8cbfb4292e50297c0b1617.tar.gz
own_version: also parse archival data
fixes #824 eventually this should be migrated to faking entrypoints from pyproject.toml
-rw-r--r--_own_version_helper.py29
1 files changed, 25 insertions, 4 deletions
diff --git a/_own_version_helper.py b/_own_version_helper.py
index e512dc2..f7dc4fe 100644
--- a/_own_version_helper.py
+++ b/_own_version_helper.py
@@ -4,6 +4,10 @@ to use the attribute for the versions
"""
from __future__ import annotations
+import logging
+from typing import Callable
+
+from setuptools_scm import _types as _t
from setuptools_scm import Configuration
from setuptools_scm import get_version
from setuptools_scm import git
@@ -13,12 +17,29 @@ from setuptools_scm.version import get_local_node_and_date
from setuptools_scm.version import guess_next_dev_version
from setuptools_scm.version import ScmVersion
+log = logging.getLogger("setuptools_scm")
+
+# todo: take fake entrypoints from pyproject.toml
+try_parse: list[Callable[[_t.PathT, Configuration], ScmVersion | None]] = [
+ parse_pkginfo,
+ git.parse,
+ hg.parse,
+ git.parse_archival,
+ hg.parse_archival,
+]
+
def parse(root: str, config: Configuration) -> ScmVersion | None:
- try:
- return parse_pkginfo(root, config)
- except OSError:
- return git.parse(root, config=config) or hg.parse(root, config=config)
+ for maybe_parse in try_parse:
+ try:
+ parsed = maybe_parse(root, config)
+ except OSError as e:
+ log.warning("parse with %s failed with: %s", maybe_parse, e)
+ else:
+ if parsed is not None:
+ return parsed
+ else:
+ return None
def scm_version() -> str: