Skip to content

Commit 06ddb60

Browse files
committed
Avoid non-monotonic versions
1 parent 3c145df commit 06ddb60

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

src/setuptools_scm/_config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ class Configuration:
103103
dist_name: str | None = None
104104
version_cls: type[_VersionT] = _Version
105105
search_parent_directories: bool = False
106+
micro_version_factor: int = 1000
106107

107108
parent: _t.PathT | None = None
108109

src/setuptools_scm/version.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,11 @@ def release_branch_semver_version(version: ScmVersion) -> str:
295295
if branch_ver_up_to_minor == tag_ver_up_to_minor:
296296
# We're in a release/maintenance branch, next is a patch/rc/beta bump:
297297
return version.format_next_version(guess_next_version)
298-
# We're in a development branch, next is a minor bump:
298+
299+
# We're in a development branch, next is a minor bump, but take
300+
# the minor into consideration so that e.g. being five commits off
301+
# 1.0.1 is greater than being 10 commits off 1.0.0.
302+
version.distance += version.tag.micro * version.config.micro_version_factor
299303
return version.format_next_version(guess_next_simple_semver, retain=SEMVER_MINOR)
300304

301305

testing/test_mercurial.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,12 @@ def wd(wd: WorkDir) -> WorkDir:
3232
archival_mapping = {
3333
"1.0": {"tag": "1.0"},
3434
"1.1.0.dev3+h000000000000": {
35-
"latesttag": "1.0",
35+
"latesttag": "1.0.0",
36+
"latesttagdistance": "3",
37+
"node": "0" * 20,
38+
},
39+
"1.1.0.dev103+h000000000000": {
40+
"latesttag": "1.0.1",
3641
"latesttagdistance": "3",
3742
"node": "0" * 20,
3843
},
@@ -51,7 +56,9 @@ def wd(wd: WorkDir) -> WorkDir:
5156
@pytest.mark.parametrize(("expected", "data"), sorted(archival_mapping.items()))
5257
def test_archival_to_version(expected: str, data: dict[str, str]) -> None:
5358
config = Configuration(
54-
version_scheme="release-branch-semver", local_scheme="node-and-date"
59+
version_scheme="release-branch-semver",
60+
local_scheme="node-and-date",
61+
micro_version_factor=100,
5562
)
5663
version = archival_to_version(data, config=config)
5764
assert format_version(version) == expected

0 commit comments

Comments
 (0)