summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/setuptools_scm/git.py15
-rw-r--r--testing/test_git.py1
2 files changed, 13 insertions, 3 deletions
diff --git a/src/setuptools_scm/git.py b/src/setuptools_scm/git.py
index 27cb159..f2afda9 100644
--- a/src/setuptools_scm/git.py
+++ b/src/setuptools_scm/git.py
@@ -232,9 +232,11 @@ def _git_parse_inner(
)
-def _git_parse_describe(describe_output: str) -> tuple[str, int, str, bool]:
+def _git_parse_describe(describe_output: str) -> tuple[str, int | None, str | None, bool]:
# 'describe_output' looks e.g. like 'v1.5.0-0-g4060507' or
# 'v1.15.1rc1-37-g9bd1298-dirty'.
+ # It may also just be a bare tag name if this is a tagged commit and we are
+ # parsing a .git_archival.txt file.
if describe_output.endswith("-dirty"):
dirty = True
@@ -242,8 +244,15 @@ def _git_parse_describe(describe_output: str) -> tuple[str, int, str, bool]:
else:
dirty = False
- tag, number, node = describe_output.rsplit("-", 2)
- return tag, int(number), node, dirty
+ split = describe_output.rsplit("-", 2)
+ if len(split) < 3: # probably a tagged commit
+ tag = describe_output
+ number = None
+ node = None
+ else:
+ tag, number_, node = split
+ number = int(number_)
+ return tag, number, node, dirty
def search_parent(dirname: _t.PathT) -> GitWorkdir | None:
diff --git a/testing/test_git.py b/testing/test_git.py
index 321d658..412ce75 100644
--- a/testing/test_git.py
+++ b/testing/test_git.py
@@ -523,6 +523,7 @@ def test_git_getdate_signed_commit(signed_commit_wd: WorkDir) -> None:
("0.0", {"node": "0" * 20}),
("1.2.2", {"describe-name": "release-1.2.2-0-g00000"}),
("1.2.2.dev0", {"ref-names": "tag: release-1.2.2.dev"}),
+ ("1.2.2", {"describe-name": "v1.2.2"}),
],
)
@pytest.mark.filterwarnings("ignore:git archive did not support describe output")