Skip to content

Commit 39ccd3f

Browse files
implement --dry-run
1 parent cb24fb4 commit 39ccd3f

File tree

5 files changed

+37
-10
lines changed

5 files changed

+37
-10
lines changed

src/pip/_internal/cli/req_command.py

+2
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ def make_resolver(
313313
use_user_site: bool = False,
314314
ignore_installed: bool = True,
315315
ignore_requires_python: bool = False,
316+
dry_run: bool = False,
316317
force_reinstall: bool = False,
317318
upgrade_strategy: str = "to-satisfy-only",
318319
use_pep517: Optional[bool] = None,
@@ -344,6 +345,7 @@ def make_resolver(
344345
ignore_dependencies=options.ignore_dependencies,
345346
ignore_installed=ignore_installed,
346347
ignore_requires_python=ignore_requires_python,
348+
dry_run=dry_run,
347349
force_reinstall=force_reinstall,
348350
upgrade_strategy=upgrade_strategy,
349351
py_version_info=py_version_info,

src/pip/_internal/commands/download.py

+17-8
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,13 @@ def add_options(self) -> None:
6262
help="Download packages into <dir>.",
6363
)
6464

65+
self.cmd_opts.add_option(
66+
"--dry-run",
67+
dest="dry_run",
68+
action="store_true",
69+
help="Avoid actually downloading wheels.",
70+
)
71+
6572
cmdoptions.add_target_python_options(self.cmd_opts)
6673

6774
index_opts = cmdoptions.make_option_group(
@@ -122,19 +129,21 @@ def run(self, options: Values, args: List[str]) -> int:
122129
options=options,
123130
ignore_requires_python=options.ignore_requires_python,
124131
py_version_info=options.python_version,
132+
dry_run=options.dry_run,
125133
)
126134

127135
self.trace_basic_info(finder)
128136

129137
requirement_set = resolver.resolve(reqs, check_supported_wheels=True)
130138

131-
downloaded: List[str] = []
132-
for req in requirement_set.requirements.values():
133-
if req.satisfied_by is None:
134-
assert req.name is not None
135-
preparer.save_linked_requirement(req)
136-
downloaded.append(req.name)
137-
if downloaded:
138-
write_output("Successfully downloaded %s", " ".join(downloaded))
139+
if not options.dry_run:
140+
downloaded: List[str] = []
141+
for req in requirement_set.requirements.values():
142+
if req.satisfied_by is None:
143+
assert req.name is not None
144+
preparer.save_linked_requirement(req)
145+
downloaded.append(req.name)
146+
if downloaded:
147+
write_output("Successfully downloaded %s", " ".join(downloaded))
139148

140149
return SUCCESS

src/pip/_internal/resolution/resolvelib/resolver.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ def __init__(
4545
ignore_dependencies: bool,
4646
ignore_installed: bool,
4747
ignore_requires_python: bool,
48+
dry_run: bool,
4849
force_reinstall: bool,
4950
upgrade_strategy: str,
5051
suppress_build_failures: bool,
@@ -66,6 +67,7 @@ def __init__(
6667
py_version_info=py_version_info,
6768
)
6869
self.ignore_dependencies = ignore_dependencies
70+
self.dry_run = dry_run
6971
self.upgrade_strategy = upgrade_strategy
7072
self._result: Optional[Result] = None
7173

@@ -159,8 +161,10 @@ def resolve(
159161

160162
req_set.add_named_requirement(ireq)
161163

162-
reqs = req_set.all_requirements
163-
self.factory.preparer.prepare_linked_requirements_more(reqs)
164+
if not self.dry_run:
165+
reqs = req_set.all_requirements
166+
self.factory.preparer.prepare_linked_requirements_more(reqs)
167+
164168
return req_set
165169

166170
def get_installation_order(

tests/functional/test_download.py

+11
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,17 @@ def test_basic_download_should_download_dependencies(
9090
result.did_not_create(script.site_packages / "openid")
9191

9292

93+
@pytest.mark.network
94+
def test_dry_run_should_not_download_dependencies(
95+
script: PipTestEnvironment,
96+
) -> None:
97+
"""
98+
It should not download dependencies into the scratch path.
99+
"""
100+
result = script.pip("download", "--dry-run", "Paste[openid]==1.7.5.1", "-d", ".")
101+
result.did_not_create(Path("scratch") / "Paste-1.7.5.1.tar.gz")
102+
103+
93104
def test_download_wheel_archive(script: PipTestEnvironment, data: TestData) -> None:
94105
"""
95106
It should download a wheel archive path

tests/unit/resolution_resolvelib/test_resolver.py

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def resolver(preparer: RequirementPreparer, finder: PackageFinder) -> Resolver:
2828
ignore_installed=False,
2929
ignore_requires_python=False,
3030
force_reinstall=False,
31+
dry_run=True,
3132
upgrade_strategy="to-satisfy-only",
3233
suppress_build_failures=False,
3334
)

0 commit comments

Comments
 (0)