Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert "Fix nondeterminism with environment markers #5239 (#5286)" #5306

Merged
merged 1 commit into from
Aug 29, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion news/5239.bugfix.rst

This file was deleted.

25 changes: 11 additions & 14 deletions pipenv/utils/resolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import sys
import warnings
from functools import lru_cache
from typing import Dict, List, Optional, Tuple, Union
from typing import Dict, List, Optional, Set, Tuple, Union

from pipenv import environments
from pipenv.exceptions import RequirementError, ResolutionFailure
Expand Down Expand Up @@ -86,6 +86,7 @@ def get_package_finder(


class HashCacheMixin:

"""Caches hashes of PyPI artifacts so we do not need to re-download them.

Hashes are only cached when the URL appears to contain a hash in it and the
Expand Down Expand Up @@ -188,14 +189,12 @@ def get_metadata(
pre: bool = False,
clear: bool = False,
) -> Tuple[
List[str],
Set[str],
Dict[str, Dict[str, Union[str, bool, List[str]]]],
Dict[str, str],
Dict[str, str],
]:
constraints: Dict[
str, None
] = {} # Used Dict instead of Set because Dict is ordered and is hence stable
constraints: Set[str] = set()
skipped: Dict[str, Dict[str, Union[str, bool, List[str]]]] = {}
if index_lookup is None:
index_lookup = {}
Expand Down Expand Up @@ -248,9 +247,9 @@ def get_metadata(
constraint_update, lockfile_update = self.get_deps_from_req(
req, resolver=transient_resolver, resolve_vcs=project.s.PIPENV_RESOLVE_VCS
)
constraints.update(constraint_update)
constraints |= constraint_update
skipped.update(lockfile_update)
return list(constraints.keys()), skipped, index_lookup, markers_lookup
return constraints, skipped, index_lookup, markers_lookup

def parse_line(
self,
Expand Down Expand Up @@ -310,17 +309,15 @@ def get_deps_from_req(
req: Requirement,
resolver: Optional["Resolver"] = None,
resolve_vcs: bool = True,
) -> Tuple[Dict[str, None], Dict[str, Dict[str, Union[str, bool, List[str]]]]]:
) -> Tuple[Set[str], Dict[str, Dict[str, Union[str, bool, List[str]]]]]:
from pipenv.vendor.requirementslib.models.requirements import Requirement
from pipenv.vendor.requirementslib.models.utils import (
_requirement_to_str_lowercase_name,
)
from pipenv.vendor.requirementslib.utils import is_installable_dir

# TODO: this is way too complex, refactor this
constraints: Dict[
str, None
] = {} # Used Dict instead of Set because Dict is ordered and is hence stable
constraints: Set[str] = set()
locked_deps: Dict[str, Dict[str, Union[str, bool, List[str]]]] = {}
editable_packages = self.project.get_editable_packages(dev=self.dev)
if (req.is_file_or_url or req.is_vcs) and not req.is_wheel:
Expand Down Expand Up @@ -368,12 +365,12 @@ def get_deps_from_req(
new_req, resolver
)
locked_deps.update(new_lock)
constraints.update(new_constraints)
constraints |= new_constraints
# if there is no marker or there is a valid marker, add the constraint line
elif r and (not r.marker or (r.marker and r.marker.evaluate())):
if r.name not in editable_packages:
line = _requirement_to_str_lowercase_name(r)
constraints[line] = None
constraints.add(line)
# ensure the top level entry remains as provided
# note that we shouldn't pin versions for editable vcs deps
if not req.is_vcs:
Expand Down Expand Up @@ -421,7 +418,7 @@ def get_deps_from_req(
err=True,
)
return constraints, locked_deps
constraints[req.constraint_line] = None
constraints.add(req.constraint_line)
return constraints, locked_deps
return constraints, locked_deps

Expand Down