Skip to content

Commit 0b6f878

Browse files
author
MousaZeidBaker
authored
Merge pull request #26 from KotlinIsland/feat/dont-up-zero
(🎁) feat: Preserve zero based notation
2 parents cde5350 + 8a5d3cb commit 0b6f878

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

src/poetry_plugin_up/command.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import re
12
from typing import Any, Dict, Iterable, List
23

34
from cleo.helpers import argument, option
@@ -134,6 +135,11 @@ def handle_dependency(
134135
self.line(f"No new version for '{dependency.name}'")
135136
return
136137

138+
# preserve zero based carets ('^0.0') when bumping
139+
version = re.match(r"\^([0.]+)", dependency.pretty_constraint)
140+
if version and candidate.pretty_version.startswith(version[1]):
141+
return
142+
137143
if (
138144
dependency.pretty_constraint[0] == "~"
139145
and "." in dependency.pretty_constraint

tests/integration/test_integration.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,45 @@ def test_handle_dependency_with_latest(
9898
new_version=f"^{new_version}",
9999
pyproject_content=content,
100100
)
101+
102+
103+
def test_handle_dependency_with_zero_caret(
104+
up_cmd_tester: TestUpCommand,
105+
mocker: MockerFixture,
106+
) -> None:
107+
dependency = Dependency(
108+
name="foo",
109+
constraint="^0",
110+
groups=["main"],
111+
)
112+
new_version = "0.1"
113+
package = Package(
114+
name=dependency.name,
115+
version=new_version,
116+
)
117+
118+
content = parse("")
119+
120+
selector = Mock()
121+
selector.find_best_candidate = Mock(return_value=package)
122+
bump_version_in_pyproject_content = mocker.patch(
123+
"poetry_plugin_up.command.UpCommand.bump_version_in_pyproject_content",
124+
return_value=None,
125+
)
126+
127+
up_cmd_tester.handle_dependency(
128+
dependency=dependency,
129+
latest=True,
130+
pinned=False,
131+
only_packages=[],
132+
pyproject_content=content,
133+
selector=selector,
134+
)
135+
136+
selector.find_best_candidate.assert_called_once_with(
137+
package_name=dependency.name,
138+
target_package_version="*",
139+
allow_prereleases=dependency.allows_prereleases(),
140+
source=dependency.source_name,
141+
)
142+
bump_version_in_pyproject_content.assert_not_called()

0 commit comments

Comments
 (0)