diff options
author | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2021-06-08 21:43:21 +0200 |
---|---|---|
committer | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2022-05-29 12:26:55 +0200 |
commit | 0fa8bee903b0f3f8f797a2101771d41698f61968 (patch) | |
tree | 84d16e7ad5a83c28c8dccf9a3726b4b37f70ed21 /src/setuptools_scm/git.py | |
parent | 5ae39d4d7ad9482b242218105d5557462898d547 (diff) | |
download | setuptools-scm-0fa8bee903b0f3f8f797a2101771d41698f61968.tar.gz |
Prepare git archival style testing
Diffstat (limited to 'src/setuptools_scm/git.py')
-rw-r--r-- | src/setuptools_scm/git.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/setuptools_scm/git.py b/src/setuptools_scm/git.py index f6933ff..1566a12 100644 --- a/src/setuptools_scm/git.py +++ b/src/setuptools_scm/git.py @@ -1,4 +1,5 @@ import os +import re import warnings from datetime import date from datetime import datetime @@ -8,10 +9,15 @@ from os.path import samefile from .config import Configuration from .scm_workdir import Workdir +from .utils import data_from_mime from .utils import do_ex from .utils import require_command from .utils import trace from .version import meta +from .version import tags_to_versions + +REF_TAG_RE = re.compile(r"(?<=\btag: )([^,]+)\b") +DESCRIBE_UNSUPPORTED = "%(describe" # If testing command in shell make sure to quote the match argument like # '*[0-9]*' as it will expand before being sent to git if there are any matching @@ -231,3 +237,29 @@ def search_parent(dirname): if not tail: return None + + +def archival_to_version(data, config=None): + trace("data", data) + archival_describe = data.get("describe-name", DESCRIBE_UNSUPPORTED) + if DESCRIBE_UNSUPPORTED in archival_describe: + warnings.warn("git archive did not support describe output") + else: + tag, number, node, _ = _git_parse_describe(archival_describe) + return meta( + tag, + config=config, + distance=None if number == 0 else number, + node=node, + ) + versions = tags_to_versions(REF_TAG_RE.findall(data.get("ref-names", ""))) + if versions: + return meta(versions[0], config=config) + else: + return meta("0.0", node=data.get("node"), config=config) + + +def parse_archival(root, config=None): + archival = os.path.join(root, ".git_archival.txt") + data = data_from_mime(archival) + return archival_to_version(data, config=config) |