Skip to content

Commit f113d45

Browse files
committed
Make sure user_supplied is propagated where needed
1 parent c580d66 commit f113d45

File tree

6 files changed

+43
-13
lines changed

6 files changed

+43
-13
lines changed

src/pip/_internal/cli/req_command.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ def make_resolver(
253253
"""
254254
make_install_req = partial(
255255
install_req_from_req_string,
256+
user_supplied=False, # dependencies are not user supplied
256257
isolated=options.isolated_mode,
257258
use_pep517=use_pep517,
258259
)
@@ -308,26 +309,29 @@ def get_requirements(
308309
session=session):
309310
req_to_add = install_req_from_parsed_requirement(
310311
parsed_req,
312+
user_supplied=False,
311313
isolated=options.isolated_mode,
312314
)
313-
req_to_add.user_supplied = False
314315
requirements.append(req_to_add)
315316

316317
for req in args:
317318
req_to_add = install_req_from_line(
318-
req, None, isolated=options.isolated_mode,
319+
req,
320+
comes_from=None,
321+
user_supplied=True,
322+
isolated=options.isolated_mode,
319323
use_pep517=options.use_pep517,
320324
)
321-
req_to_add.user_supplied = True
322325
requirements.append(req_to_add)
323326

324327
for req in options.editables:
325328
req_to_add = install_req_from_editable(
326329
req,
330+
comes_from=None,
331+
user_supplied=True,
327332
isolated=options.isolated_mode,
328333
use_pep517=options.use_pep517,
329334
)
330-
req_to_add.user_supplied = True
331335
requirements.append(req_to_add)
332336

333337
# NOTE: options.require_hashes may be set if --require-hashes is True
@@ -337,10 +341,10 @@ def get_requirements(
337341
finder=finder, options=options, session=session):
338342
req_to_add = install_req_from_parsed_requirement(
339343
parsed_req,
344+
user_supplied=True,
340345
isolated=options.isolated_mode,
341346
use_pep517=options.use_pep517
342347
)
343-
req_to_add.user_supplied = True
344348
requirements.append(req_to_add)
345349

346350
# If any requirement has hash options, enable hash checking.

src/pip/_internal/operations/freeze.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,15 @@ def freeze(
116116
line = line[len('--editable'):].strip().lstrip('=')
117117
line_req = install_req_from_editable(
118118
line,
119+
comes_from=None,
120+
user_supplied=False, # actually we don't know
119121
isolated=isolated,
120122
)
121123
else:
122124
line_req = install_req_from_line(
123125
COMMENT_RE.sub('', line).strip(),
126+
comes_from=None,
127+
user_supplied=False, # actually we don't know
124128
isolated=isolated,
125129
)
126130

src/pip/_internal/req/constructors.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,8 @@ def parse_req_from_editable(editable_req):
218218

219219
def install_req_from_editable(
220220
editable_req, # type: str
221-
comes_from=None, # type: Optional[Union[InstallRequirement, str]]
221+
comes_from, # type: Optional[Union[InstallRequirement, str]]
222+
user_supplied, # type: bool
222223
use_pep517=None, # type: Optional[bool]
223224
isolated=False, # type: bool
224225
options=None, # type: Optional[Dict[str, Any]]
@@ -231,6 +232,7 @@ def install_req_from_editable(
231232
return InstallRequirement(
232233
parts.requirement,
233234
comes_from=comes_from,
235+
user_supplied=user_supplied,
234236
editable=True,
235237
link=parts.link,
236238
constraint=constraint,
@@ -379,7 +381,8 @@ def with_source(text):
379381

380382
def install_req_from_line(
381383
name, # type: str
382-
comes_from=None, # type: Optional[Union[str, InstallRequirement]]
384+
comes_from, # type: Optional[Union[str, InstallRequirement]]
385+
user_supplied, # type: bool
383386
use_pep517=None, # type: Optional[bool]
384387
isolated=False, # type: bool
385388
options=None, # type: Optional[Dict[str, Any]]
@@ -396,8 +399,13 @@ def install_req_from_line(
396399
parts = parse_req_from_line(name, line_source)
397400

398401
return InstallRequirement(
399-
parts.requirement, comes_from, link=parts.link, markers=parts.markers,
400-
use_pep517=use_pep517, isolated=isolated,
402+
parts.requirement,
403+
comes_from=comes_from,
404+
user_supplied=user_supplied,
405+
link=parts.link,
406+
markers=parts.markers,
407+
use_pep517=use_pep517,
408+
isolated=isolated,
401409
install_options=options.get("install_options", []) if options else [],
402410
global_options=options.get("global_options", []) if options else [],
403411
hash_options=options.get("hashes", {}) if options else {},
@@ -408,7 +416,8 @@ def install_req_from_line(
408416

409417
def install_req_from_req_string(
410418
req_string, # type: str
411-
comes_from=None, # type: Optional[InstallRequirement]
419+
comes_from, # type: Optional[InstallRequirement]
420+
user_supplied, # type: bool
412421
isolated=False, # type: bool
413422
use_pep517=None # type: Optional[bool]
414423
):
@@ -432,19 +441,25 @@ def install_req_from_req_string(
432441
)
433442

434443
return InstallRequirement(
435-
req, comes_from, isolated=isolated, use_pep517=use_pep517
444+
req,
445+
comes_from=comes_from,
446+
user_supplied=user_supplied,
447+
isolated=isolated,
448+
use_pep517=use_pep517,
436449
)
437450

438451

439452
def install_req_from_parsed_requirement(
440453
parsed_req, # type: ParsedRequirement
454+
user_supplied, # type: bool
441455
isolated=False, # type: bool
442456
use_pep517=None # type: Optional[bool]
443457
):
444458
# type: (...) -> InstallRequirement
445459
if parsed_req.is_editable:
446460
req = install_req_from_editable(
447461
parsed_req.requirement,
462+
user_supplied=user_supplied,
448463
comes_from=parsed_req.comes_from,
449464
use_pep517=use_pep517,
450465
constraint=parsed_req.constraint,
@@ -454,6 +469,7 @@ def install_req_from_parsed_requirement(
454469
else:
455470
req = install_req_from_line(
456471
parsed_req.requirement,
472+
user_supplied=user_supplied,
457473
comes_from=parsed_req.comes_from,
458474
use_pep517=use_pep517,
459475
isolated=isolated,

src/pip/_internal/req/req_install.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ def __init__(
101101
self,
102102
req, # type: Optional[Requirement]
103103
comes_from, # type: Optional[Union[str, InstallRequirement]]
104+
user_supplied, # type: bool
104105
editable=False, # type: bool
105106
link=None, # type: Optional[Link]
106107
markers=None, # type: Optional[Marker]
@@ -174,7 +175,7 @@ def __init__(
174175
# User supplied requirement are explicitly requested for installation
175176
# by the user via CLI arguments or requirements files, as opposed to,
176177
# e.g. dependencies, extras or constraints.
177-
self.user_supplied = False
178+
self.user_supplied = user_supplied
178179

179180
# Set by the legacy resolver when the requirement has been downloaded
180181
# TODO: This introduces a strong coupling between the resolver and the

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def make_install_req_from_link(link, parent):
4747
line = link.url
4848
ireq = install_req_from_line(
4949
line,
50+
user_supplied=parent.user_supplied,
5051
comes_from=parent.comes_from,
5152
use_pep517=parent.use_pep517,
5253
isolated=parent.isolated,
@@ -68,6 +69,7 @@ def make_install_req_from_editable(link, parent):
6869
assert parent.editable, "parent not editable"
6970
return install_req_from_editable(
7071
link.url,
72+
user_supplied=parent.user_supplied,
7173
comes_from=parent.comes_from,
7274
use_pep517=parent.use_pep517,
7375
isolated=parent.isolated,
@@ -91,6 +93,7 @@ def make_install_req_from_dist(dist, parent):
9193
line = "{}=={}".format(project_name, dist.parsed_version)
9294
ireq = install_req_from_line(
9395
line,
96+
user_supplied=parent.user_supplied,
9497
comes_from=parent.comes_from,
9598
use_pep517=parent.use_pep517,
9699
isolated=parent.isolated,

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,9 @@ def make_requirement_from_install_req(self, ireq):
176176

177177
def make_requirement_from_spec(self, specifier, comes_from):
178178
# type: (str, InstallRequirement) -> Requirement
179-
ireq = self._make_install_req_from_spec(specifier, comes_from)
179+
ireq = self._make_install_req_from_spec(
180+
specifier, comes_from
181+
)
180182
return self.make_requirement_from_install_req(ireq)
181183

182184
def make_requires_python_requirement(self, specifier):

0 commit comments

Comments
 (0)