diff --git a/src/poetry/core/packages/dependency.py b/src/poetry/core/packages/dependency.py index 94d12030b..4d2b3ef90 100644 --- a/src/poetry/core/packages/dependency.py +++ b/src/poetry/core/packages/dependency.py @@ -258,6 +258,10 @@ def base_pep_508_name(self) -> str: return requirement + @property + def base_pep_508_name_resolved(self) -> str: + return self.base_pep_508_name + def allows_prereleases(self) -> bool: return self._allows_prereleases @@ -279,10 +283,13 @@ def is_directory(self) -> bool: def is_url(self) -> bool: return False - def to_pep_508(self, with_extras: bool = True) -> str: + def to_pep_508(self, with_extras: bool = True, *, resolved: bool = False) -> str: from poetry.core.packages.utils.utils import convert_markers - requirement = self.base_pep_508_name + if resolved: + requirement = self.base_pep_508_name_resolved + else: + requirement = self.base_pep_508_name markers = [] has_extras = False diff --git a/src/poetry/core/packages/vcs_dependency.py b/src/poetry/core/packages/vcs_dependency.py index 24e39d0f0..409af4a72 100644 --- a/src/poetry/core/packages/vcs_dependency.py +++ b/src/poetry/core/packages/vcs_dependency.py @@ -101,8 +101,7 @@ def pretty_constraint(self) -> str: return f"{what} {version}" - @property - def base_pep_508_name(self) -> str: + def _base_pep_508_name(self, *, resolved: bool = False) -> str: from poetry.core.vcs import git requirement = self.pretty_name @@ -117,7 +116,9 @@ def base_pep_508_name(self) -> str: else: requirement += f" @ {self._vcs}+ssh://{parsed_url.format()}" - if self.reference: + if resolved and self.source_resolved_reference: + requirement += f"@{self.source_resolved_reference}" + elif self.reference: requirement += f"@{self.reference}" if self._directory: @@ -125,5 +126,15 @@ def base_pep_508_name(self) -> str: return requirement + @property + def base_pep_508_name(self) -> str: + requirement = self._base_pep_508_name() + return requirement + + @property + def base_pep_508_name_resolved(self) -> str: + requirement = self._base_pep_508_name(resolved=True) + return requirement + def is_vcs(self) -> bool: return True diff --git a/tests/packages/test_dependency.py b/tests/packages/test_dependency.py index cf2e7e1c4..822dfb8bd 100644 --- a/tests/packages/test_dependency.py +++ b/tests/packages/test_dependency.py @@ -137,6 +137,7 @@ def test_to_pep_508_with_patch_python_version( expected = f"Django (>=1.23,<2.0) ; {marker}" assert dependency.to_pep_508() == expected + assert dependency.to_pep_508(resolved=True) == expected assert str(dependency.marker) == marker diff --git a/tests/packages/test_vcs_dependency.py b/tests/packages/test_vcs_dependency.py index 0d9d01910..214dd90b4 100644 --- a/tests/packages/test_vcs_dependency.py +++ b/tests/packages/test_vcs_dependency.py @@ -21,6 +21,10 @@ {"extras": ["foo", "bar"]}, "poetry[bar,foo] @ git+https://github.com/python-poetry/poetry.git", ), + ( + {"extras": ["foo", "bar"], "branch": "main"}, + "poetry[bar,foo] @ git+https://github.com/python-poetry/poetry.git@main", + ), ( {"branch": "main"}, "poetry @ git+https://github.com/python-poetry/poetry.git@main", @@ -54,6 +58,55 @@ def test_to_pep_508(kwargs: dict[str, Any], expected: str) -> None: assert dependency.to_pep_508() == expected +@pytest.mark.parametrize( + "kwargs, expected", + [ + ({}, "poetry @ git+https://github.com/python-poetry/poetry.git"), + ( + {"extras": ["foo"]}, + "poetry[foo] @ git+https://github.com/python-poetry/poetry.git", + ), + ( + {"extras": ["foo", "bar"]}, + "poetry[bar,foo] @ git+https://github.com/python-poetry/poetry.git", + ), + ( + {"extras": ["foo", "bar"], "branch": "main", "resolved_rev": "aaaa"}, + "poetry[bar,foo] @ git+https://github.com/python-poetry/poetry.git@aaaa", + ), + ( + {"branch": "main", "resolved_rev": "aaaa"}, + "poetry @ git+https://github.com/python-poetry/poetry.git@aaaa", + ), + ( + {"tag": "1.0", "resolved_rev": "aaaa"}, + "poetry @ git+https://github.com/python-poetry/poetry.git@aaaa", + ), + ( + {"rev": "12345", "resolved_rev": "aaaa"}, + "poetry @ git+https://github.com/python-poetry/poetry.git@aaaa", + ), + ( + {"directory": "sub"}, + "poetry @ git+https://github.com/python-poetry/poetry.git#subdirectory=sub", + ), + ( + {"branch": "main", "directory": "sub", "resolved_rev": "aaaa"}, + ( + "poetry @ git+https://github.com/python-poetry/poetry.git" + "@aaaa#subdirectory=sub" + ), + ), + ], +) +def test_to_pep_508_resolved(kwargs: dict[str, Any], expected: str) -> None: + dependency = VCSDependency( + "poetry", "git", "https://github.com/python-poetry/poetry.git", **kwargs + ) + + assert dependency.to_pep_508(resolved=True) == expected + + def test_to_pep_508_ssh() -> None: dependency = VCSDependency("poetry", "git", "git@github.com:sdispater/poetry.git")