Skip to content

Commit f59518b

Browse files
committed
Fix sorting for annotated tags
1 parent c081fb9 commit f59518b

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

README.md

+3
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,7 @@ setuptools.setup(
457457
"version_file": None,
458458
"count_commits_from_version_file": False,
459459
"branch_formatter": None,
460+
"sort_by": None,
460461
},
461462
setup_requires=["setuptools-git-versioning"],
462463
...,
@@ -479,6 +480,8 @@ setuptools.setup(
479480
480481
- `branch_formatter`: callback to be used for formatting a branch name before template substitution
481482
483+
- `sort_by`: format string passed to ``git tag --sort=`` command to sort the output. Possible values: ``version:refname`` (alphanumeric sort), ``committerdate`` (commit date of tag), ``creatordate`` (tag creation date, **default**)
484+
482485
### Substitutions
483486
484487
You can use these substitutions in `template`, `dev_template` or `dirty_template` options:

setuptools_git_versioning.py

+12-9
Original file line numberDiff line numberDiff line change
@@ -36,26 +36,26 @@ def get_branch(): # type: () -> Optional[str]
3636
return None
3737

3838

39-
def get_all_tags(): # type: () -> List[str]
40-
tags = _exec("git tag --sort=-committerdate")
39+
def get_all_tags(sort_by="creatordate"): # type: (str) -> List[str]
40+
tags = _exec("git tag --sort=-{}".format(sort_by))
4141
if tags:
4242
return tags
4343
return []
4444

4545

46-
def get_branch_tags(): # type: () -> List[str]
47-
tags = _exec("git tag --sort=-committerdate --merged")
46+
def get_branch_tags(sort_by="creatordate"): # type: (str) -> List[str]
47+
tags = _exec("git tag --sort=-{} --merged".format(sort_by))
4848
if tags:
4949
return tags
5050
return []
5151

5252

53-
def get_tags(): # type: () -> List[str]
54-
return get_branch_tags()
53+
def get_tags(*args, **kwargs): # type: (*str, **str) -> List[str]
54+
return get_branch_tags(*args, **kwargs)
5555

5656

57-
def get_tag(): # type: () -> Optional[str]
58-
tags = get_branch_tags()
57+
def get_tag(*args, **kwargs): # type: (*str, **str) -> Optional[str]
58+
tags = get_branch_tags(*args, **kwargs)
5959
if tags:
6060
return tags[0]
6161
return None
@@ -109,6 +109,7 @@ def parse_config(dist, _, value): # type: (Distribution, Any, Any) -> None
109109
version_file = value.get("version_file", None)
110110
count_commits_from_version_file = value.get("count_commits_from_version_file", False)
111111
branch_formatter = value.get("branch_formatter", None)
112+
sort_by = value.get("sort_by", None)
112113

113114
version = version_from_git(
114115
template=template,
@@ -119,6 +120,7 @@ def parse_config(dist, _, value): # type: (Distribution, Any, Any) -> None
119120
version_file=version_file,
120121
count_commits_from_version_file=count_commits_from_version_file,
121122
branch_formatter=branch_formatter,
123+
sort_by=sort_by,
122124
)
123125
dist.metadata.version = version
124126

@@ -137,6 +139,7 @@ def version_from_git(
137139
version_file=None, # type: Optional[str]
138140
count_commits_from_version_file=False, # type: bool
139141
branch_formatter=None, # type: Optional[Callable[[str], str]]
142+
sort_by=None, # type: Optional[str]
140143
):
141144
# type: (...) -> str
142145

@@ -149,7 +152,7 @@ def version_from_git(
149152
return line[8:].strip()
150153

151154
from_file = False
152-
tag = get_tag()
155+
tag = get_tag(sort_by) if sort_by else get_tag()
153156
if tag is None:
154157
if version_callback is not None:
155158
if callable(version_callback):

0 commit comments

Comments
 (0)