@@ -125,16 +125,38 @@ index a8cd133..20dd1e6 100644
125125 def pyc_source_file_paths() -> Generator[str, None, None]:
126126 # We de-duplicate installation paths, since there can be overlap (e.g.
127127 # file in .data maps to same location as file in wheel root).
128+ diff --git a/pip/_internal/resolution/resolvelib/candidates.py b/pip/_internal/resolution/resolvelib/candidates.py
129+ index de04e1d..d5bd355 100644
130+ --- a/pip/_internal/resolution/resolvelib/candidates.py
131+ +++ b/pip/_internal/resolution/resolvelib/candidates.py
132+ @@ -20,6 +20,7 @@ from pip._internal.req.constructors import (
133+ from pip._internal.req.req_install import InstallRequirement
134+ from pip._internal.utils.direct_url_helpers import direct_url_from_link
135+ from pip._internal.utils.misc import normalize_version_info
136+ + from pip._internal.utils import graalpy
137+
138+ from .base import Candidate, CandidateVersion, Requirement, format_name
139+
140+ @@ -242,6 +243,8 @@ class _InstallRequirementBackedCandidate(Candidate):
141+ for r in requires:
142+ yield self._factory.make_requirement_from_spec(str(r), self._ireq)
143+ yield self._factory.make_requires_python_requirement(self.dist.requires_python)
144+ + if self.name == 'virtualenv' and not graalpy.DISABLE_PATCHING:
145+ + yield self._factory.make_requirement_from_spec('graalpy-virtualenv', self._ireq)
146+
147+ def get_install_requirement(self) -> Optional[InstallRequirement]:
148+ return self._ireq
128149diff --git a/pip/_internal/utils/graalpy.py b/pip/_internal/utils/graalpy.py
129150new file mode 100644
130- index 0000000..5b35102
151+ index 0000000..53dbe96
131152--- /dev/null
132153+++ b/pip/_internal/utils/graalpy.py
133- @@ -0,0 +1,330 @@
154+ @@ -0,0 +1,334 @@
134155+ import abc
135156+ import logging
136157+ import os
137158+ import re
159+ + import sys
138160+ import tempfile
139161+ import zipfile
140162+ from contextlib import contextmanager
@@ -144,7 +166,7 @@ index 0000000..5b35102
144166+
145167+ from pip._internal.models.candidate import InstallationCandidate
146168+ from pip._internal.models.link import Link
147- + from pip._internal.utils.urls import url_to_path
169+ + from pip._internal.utils.urls import url_to_path, path_to_url
148170+ from pip._vendor import tomli, requests
149171+ from pip._vendor.packaging.specifiers import SpecifierSet
150172+ from pip._vendor.packaging.utils import canonicalize_name
@@ -440,6 +462,9 @@ index 0000000..5b35102
440462+ # We need to force the filename to match the usual convention, otherwise we won't find a patch
441463+ link = AddedSourceLink(url, f'{name}-{version}.{suffix}')
442464+ candidates.append(InstallationCandidate(name=name, version=version, link=link))
465+ + if name == 'graalpy-virtualenv':
466+ + link = Link(path_to_url(os.path.join(sys.base_prefix, 'graalpy_virtualenv')))
467+ + candidates.append(InstallationCandidate(name=name, version='0.0.1', link=link))
443468+ return candidates
444469+
445470+
0 commit comments