未验证 提交 bb960a66 编写于 作者: F Frost Ming

Merge markers correctly from different parents

上级 fd143544
Always consider wheels before tarballs; correctly merge markers from different parents.
......@@ -108,10 +108,6 @@ class Candidate:
self.wheel = None
self.metadata = None
# Dependencies from lockfile content.
self.dependencies = None
self.summary = None
def __hash__(self):
return hash((self.name, self.version))
......
......@@ -155,15 +155,6 @@ class BaseRepository:
for c in matching_candidates
}
def _get_dependencies_from_lockfile(self, candidate: Candidate) -> CandidateInfo:
if candidate.dependencies is None:
raise CandidateInfoNotFound(candidate)
return (
[dep.as_line() for dep in candidate.dependencies],
candidate.requires_python,
candidate.summary,
)
def dependency_generators(self) -> Iterable[Callable[[Candidate], CandidateInfo]]:
"""Return an iterable of getter functions to get dependencies, which will be
called one by one.
......@@ -212,7 +203,6 @@ class PyPIRepository(BaseRepository):
def dependency_generators(self) -> Iterable[Callable[[Candidate], CandidateInfo]]:
return (
self._get_dependencies_from_lockfile,
self._get_dependencies_from_cache,
self._get_dependencies_from_json,
self._get_dependencies_from_metadata,
......@@ -241,19 +231,20 @@ class PyPIRepository(BaseRepository):
c
for c in cans
if requirement.specifier.contains(c.version, allow_prereleases)
and (allow_all or requires_python.is_subset(c.requires_python))
),
key=lambda c: (c.version, c.ireq.is_wheel),
key=lambda c: (c.version, c.link.is_wheel),
)
if not allow_all:
sorted_cans = [
can
for can in sorted_cans
if requires_python.is_subset(can.requires_python)
]
if not sorted_cans and allow_prereleases is None:
# No non-pre-releases is found, force pre-releases now
sorted_cans = sorted(
(c for c in cans if requirement.specifier.contains(c.version, True)),
(
c
for c in cans
if requirement.specifier.contains(c.version, True)
and (allow_all or requires_python.is_subset(c.requires_python))
),
key=lambda c: c.version,
)
return sorted_cans
......@@ -185,17 +185,9 @@ class Project:
if version:
package["version"] = f"=={version}"
package_name = package.pop("name")
summary = package.pop("summary", None)
dependencies = [
Requirement.from_req_dict(k, v)
for k, v in package.pop("dependencies", {}).items()
]
req = Requirement.from_req_dict(package_name, dict(package))
can = Candidate(req, self.environment, name=package_name, version=version)
can.marker = req.marker
can.requires_python = str(req.requires_python)
can.dependencies = dependencies
can.summary = summary
can.hashes = {
item["file"]: item["hash"]
for item in self.lockfile["metadata"].get(
......
......@@ -178,6 +178,14 @@ def test_exclude_incompatible_requirements(project, repository):
assert "bar" not in result
def test_union_markers_from_different_parents(project, repository):
repository.add_candidate("foo", "0.1.0")
repository.add_dependencies("foo", "0.1.0", ["bar; python_version < '3'"])
repository.add_candidate("bar", "0.1.0")
result = resolve_requirements(repository, ["foo", "bar"], ">=3.6")
assert not result["bar"].requires_python
def test_requirements_from_different_sections(project, repository):
repository.add_candidate("foo", "0.1.0")
repository.add_candidate("foo", "0.2.0")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册