Skip to content

Commit bfbe919

Browse files
authored
Merge pull request #11277 from vanschelven/respect-no-index-from-requirements-file
2 parents 8a51fe7 + 2ec5097 commit bfbe919

File tree

10 files changed

+39
-16
lines changed

10 files changed

+39
-16
lines changed

news/11276.bugfix.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix ``--no-index`` when ``--index-url`` or ``--extra-index-url`` is specified
2+
inside a requirements file.

src/pip/_internal/index/collector.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,7 @@ def create(
552552
search_scope = SearchScope.create(
553553
find_links=find_links,
554554
index_urls=index_urls,
555+
no_index=options.no_index,
555556
)
556557
link_collector = LinkCollector(
557558
session=session,

src/pip/_internal/models/search_scope.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ class SearchScope:
2020
Encapsulates the locations that pip is configured to search.
2121
"""
2222

23-
__slots__ = ["find_links", "index_urls"]
23+
__slots__ = ["find_links", "index_urls", "no_index"]
2424

2525
@classmethod
2626
def create(
2727
cls,
2828
find_links: List[str],
2929
index_urls: List[str],
30+
no_index: bool,
3031
) -> "SearchScope":
3132
"""
3233
Create a SearchScope object after normalizing the `find_links`.
@@ -60,15 +61,18 @@ def create(
6061
return cls(
6162
find_links=built_find_links,
6263
index_urls=index_urls,
64+
no_index=no_index,
6365
)
6466

6567
def __init__(
6668
self,
6769
find_links: List[str],
6870
index_urls: List[str],
71+
no_index: bool,
6972
) -> None:
7073
self.find_links = find_links
7174
self.index_urls = index_urls
75+
self.no_index = no_index
7276

7377
def get_formatted_locations(self) -> str:
7478
lines = []

src/pip/_internal/req/req_file.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,11 +229,13 @@ def handle_option_line(
229229
if finder:
230230
find_links = finder.find_links
231231
index_urls = finder.index_urls
232-
if opts.index_url:
233-
index_urls = [opts.index_url]
232+
no_index = finder.search_scope.no_index
234233
if opts.no_index is True:
234+
no_index = True
235235
index_urls = []
236-
if opts.extra_index_urls:
236+
if opts.index_url and not no_index:
237+
index_urls = [opts.index_url]
238+
if opts.extra_index_urls and not no_index:
237239
index_urls.extend(opts.extra_index_urls)
238240
if opts.find_links:
239241
# FIXME: it would be nice to keep track of the source
@@ -253,6 +255,7 @@ def handle_option_line(
253255
search_scope = SearchScope(
254256
find_links=find_links,
255257
index_urls=index_urls,
258+
no_index=no_index,
256259
)
257260
finder.search_scope = search_scope
258261

tests/functional/test_build_env.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def run_with_build_env(
4141
4242
link_collector = LinkCollector(
4343
session=PipSession(),
44-
search_scope=SearchScope.create([{scratch!r}], []),
44+
search_scope=SearchScope.create([{scratch!r}], [], False),
4545
)
4646
selection_prefs = SelectionPreferences(
4747
allow_yanked=True,

tests/lib/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,11 @@ def make_test_search_scope(
8686
if index_urls is None:
8787
index_urls = []
8888

89-
return SearchScope.create(find_links=find_links, index_urls=index_urls)
89+
return SearchScope.create(
90+
find_links=find_links,
91+
index_urls=index_urls,
92+
no_index=False,
93+
)
9094

9195

9296
def make_test_link_collector(

tests/unit/resolution_resolvelib/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
@pytest.fixture
2424
def finder(data: TestData) -> Iterator[PackageFinder]:
2525
session = PipSession()
26-
scope = SearchScope([str(data.packages)], [])
26+
scope = SearchScope([str(data.packages)], [], False)
2727
collector = LinkCollector(session, scope)
2828
prefs = SelectionPreferences(allow_yanked=False)
2929
finder = PackageFinder.create(collector, prefs)

tests/unit/test_index.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -593,7 +593,7 @@ def test_create__candidate_prefs(
593593
"""
594594
link_collector = LinkCollector(
595595
session=PipSession(),
596-
search_scope=SearchScope([], []),
596+
search_scope=SearchScope([], [], False),
597597
)
598598
selection_prefs = SelectionPreferences(
599599
allow_yanked=True,
@@ -614,7 +614,7 @@ def test_create__link_collector(self) -> None:
614614
"""
615615
link_collector = LinkCollector(
616616
session=PipSession(),
617-
search_scope=SearchScope([], []),
617+
search_scope=SearchScope([], [], False),
618618
)
619619
finder = PackageFinder.create(
620620
link_collector=link_collector,
@@ -629,7 +629,7 @@ def test_create__target_python(self) -> None:
629629
"""
630630
link_collector = LinkCollector(
631631
session=PipSession(),
632-
search_scope=SearchScope([], []),
632+
search_scope=SearchScope([], [], False),
633633
)
634634
target_python = TargetPython(py_version_info=(3, 7, 3))
635635
finder = PackageFinder.create(
@@ -649,7 +649,7 @@ def test_create__target_python_none(self) -> None:
649649
"""
650650
link_collector = LinkCollector(
651651
session=PipSession(),
652-
search_scope=SearchScope([], []),
652+
search_scope=SearchScope([], [], False),
653653
)
654654
finder = PackageFinder.create(
655655
link_collector=link_collector,
@@ -668,7 +668,7 @@ def test_create__allow_yanked(self, allow_yanked: bool) -> None:
668668
"""
669669
link_collector = LinkCollector(
670670
session=PipSession(),
671-
search_scope=SearchScope([], []),
671+
search_scope=SearchScope([], [], False),
672672
)
673673
selection_prefs = SelectionPreferences(allow_yanked=allow_yanked)
674674
finder = PackageFinder.create(
@@ -684,7 +684,7 @@ def test_create__ignore_requires_python(self, ignore_requires_python: bool) -> N
684684
"""
685685
link_collector = LinkCollector(
686686
session=PipSession(),
687-
search_scope=SearchScope([], []),
687+
search_scope=SearchScope([], [], False),
688688
)
689689
selection_prefs = SelectionPreferences(
690690
allow_yanked=True,
@@ -702,7 +702,7 @@ def test_create__format_control(self) -> None:
702702
"""
703703
link_collector = LinkCollector(
704704
session=PipSession(),
705-
search_scope=SearchScope([], []),
705+
search_scope=SearchScope([], [], False),
706706
)
707707
format_control = FormatControl(set(), {":all:"})
708708
selection_prefs = SelectionPreferences(
@@ -743,7 +743,7 @@ def test_make_link_evaluator(
743743

744744
link_collector = LinkCollector(
745745
session=PipSession(),
746-
search_scope=SearchScope([], []),
746+
search_scope=SearchScope([], [], False),
747747
)
748748

749749
finder = PackageFinder(
@@ -793,7 +793,7 @@ def test_make_candidate_evaluator(
793793
)
794794
link_collector = LinkCollector(
795795
session=PipSession(),
796-
search_scope=SearchScope([], []),
796+
search_scope=SearchScope([], [], False),
797797
)
798798
finder = PackageFinder(
799799
link_collector=link_collector,

tests/unit/test_req_file.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,13 @@ def test_set_finder_no_index(
395395
line_processor("--no-index", "file", 1, finder=finder)
396396
assert finder.index_urls == []
397397

398+
def test_set_finder_no_index_is_remembered_for_later_invocations(
399+
self, line_processor: LineProcessor, finder: PackageFinder
400+
) -> None:
401+
line_processor("--no-index", "file", 1, finder=finder)
402+
line_processor("--index-url=url", "file", 1, finder=finder)
403+
assert finder.index_urls == []
404+
398405
def test_set_finder_index_url(
399406
self, line_processor: LineProcessor, finder: PackageFinder, session: PipSession
400407
) -> None:

tests/unit/test_search_scope.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def test_get_formatted_locations_basic_auth(self) -> None:
1616
search_scope = SearchScope(
1717
find_links=find_links,
1818
index_urls=index_urls,
19+
no_index=False,
1920
)
2021

2122
result = search_scope.get_formatted_locations()
@@ -29,6 +30,7 @@ def test_get_index_urls_locations(self) -> None:
2930
search_scope = SearchScope(
3031
find_links=[],
3132
index_urls=["file://index1/", "file://index2"],
33+
no_index=False,
3234
)
3335
req = install_req_from_line("Complex_Name")
3436
assert req.name is not None

0 commit comments

Comments
 (0)