Skip to content

Commit 8e891a2

Browse files
--lock without requirements installs the entire lock. (#1658)
Closes #1657.
1 parent ede0184 commit 8e891a2

File tree

4 files changed

+30
-17
lines changed

4 files changed

+30
-17
lines changed

pex/resolve/lock_resolver.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,9 @@ def resolve_from_lock(
117117
)
118118
parsed_requirements = try_(
119119
parse_lockable_requirements(
120-
requirement_configuration, network_configuration=network_configuration
120+
requirement_configuration,
121+
network_configuration=network_configuration,
122+
fallback_requirements=(str(req) for req in lock.requirements),
121123
)
122124
)
123125

pex/resolve/lockfile/__init__.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
PyPIRequirement,
1616
URLRequirement,
1717
VCSRequirement,
18+
parse_requirement_strings,
1819
)
1920
from pex.resolve import resolvers
2021
from pex.resolve.locked_resolve import Artifact, LockConfiguration
@@ -124,12 +125,17 @@ def create(
124125
def parse_lockable_requirements(
125126
requirement_configuration, # type: RequirementConfiguration
126127
network_configuration=None, # type: Optional[NetworkConfiguration]
128+
fallback_requirements=None, # type: Optional[Iterable[str]]
127129
):
128130
# type: (...) -> Union[Requirements, Error]
129131

132+
all_parsed_requirements = requirement_configuration.parse_requirements(network_configuration)
133+
if not all_parsed_requirements and fallback_requirements:
134+
all_parsed_requirements = parse_requirement_strings(fallback_requirements)
135+
130136
parsed_requirements = [] # type: List[Union[PyPIRequirement, URLRequirement]]
131137
projects = [] # type: List[str]
132-
for parsed_requirement in requirement_configuration.parse_requirements(network_configuration):
138+
for parsed_requirement in all_parsed_requirements:
133139
if isinstance(parsed_requirement, LocalProjectRequirement):
134140
projects.append("local project at {path}".format(path=parsed_requirement.path))
135141
elif isinstance(parsed_requirement, VCSRequirement):

pex/resolve/resolver_options.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,9 @@ def register(
119119
default=None,
120120
type=str,
121121
help=(
122-
"Resolve requirements from the given lock file instead of from --index servers, "
123-
"--find-links repos or a --pex-repository."
122+
"Resolve requirements from the given lock file crated by Pex instead of from "
123+
"--index servers, --find-links repos or a --pex-repository. If no requirements are "
124+
"specified, will install the entire lock."
124125
),
125126
)
126127

tests/integration/test_lock_resolver.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -111,21 +111,25 @@ def test_subset(
111111
# type: (...) -> None
112112

113113
urllib3_pex = os.path.join(str(tmpdir), "urllib3.pex")
114-
run_pex_command(
115-
args=[
116-
"--lock",
117-
requests_lock_strict,
118-
"urllib3",
119-
"-o",
120-
urllib3_pex,
121-
"--",
122-
"-c",
123-
"import urllib3",
124-
]
125-
).assert_success()
114+
115+
def args(*requirements):
116+
return (
117+
["--lock", requests_lock_strict, "-o", urllib3_pex]
118+
+ list(requirements)
119+
+ ["--", "-c", "import urllib3"]
120+
)
121+
122+
run_pex_command(args("urllib3")).assert_success()
126123
pex_distributions = index_pex_distributions(urllib3_pex)
127-
assert ProjectName("requests") not in pex_distributions
128124
assert ProjectName("urllib3") in pex_distributions
125+
for project in ("requests", "idna", "chardet", "certifi"):
126+
assert ProjectName(project) not in pex_distributions
127+
128+
# However, if no requirements are specified, resolve the entire lock.
129+
run_pex_command(args()).assert_success()
130+
pex_distributions = index_pex_distributions(urllib3_pex)
131+
for project in ("requests", "urllib3", "idna", "chardet", "certifi"):
132+
assert ProjectName(project) in pex_distributions
129133

130134

131135
def test_empty_lock_issue_1659(tmpdir):

0 commit comments

Comments
 (0)