Skip to content

Commit

Permalink
showing message only once
Browse files Browse the repository at this point in the history
  • Loading branch information
nadavwe committed Nov 8, 2021
1 parent e277f18 commit 7ad1da1
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 11 deletions.
7 changes: 5 additions & 2 deletions src/pip/_internal/resolution/resolvelib/reporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ class PipReporter(BaseReporter):
def __init__(
self, conflicts_message_generator: Callable[[Causes], Optional[str]]
) -> None:
self.backtracks_by_package: DefaultDict[str, int] = defaultdict(int)
self.conflicts_message_generator = conflicts_message_generator
self.resolved_conflicts = False
self.backtracks_by_package: DefaultDict[str, int] = defaultdict(int)

self._messages_at_backtrack = {
1: (
Expand Down Expand Up @@ -53,7 +54,9 @@ def backtracking(self, candidate: Candidate) -> None:
logger.info("INFO: %s", message.format(package_name=candidate.name))

def resolving_conflicts(self, causes: Any) -> None:
logger.info("INFO: %s", self.conflicts_message_generator(causes))
if not self.resolved_conflicts:
self.resolved_conflicts = True
logger.info("INFO: %s", self.conflicts_message_generator(causes))


class PipDebuggingReporter(BaseReporter):
Expand Down
28 changes: 19 additions & 9 deletions tests/functional/test_new_resolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -1163,13 +1163,26 @@ def test_new_resolver_presents_messages_when_backtracking_a_lot(script, N):
assert "press Ctrl + C" in result.stdout


def test_new_resolver_presents_messages_when_resolving_conflicts(script):
def test_new_resolver_presents_conflicts_when_resolving_conflicts_for_the_first_time(
script,
):
def conflict_message(v):
return (
f"INFO: Cannot install a=={v}.0.0 and b==1.0.0 "
f"because these package versions have conflicting dependencies.\n"
f"The conflict is caused by:\n"
f" a {v}.0.0 depends on c=={v}.0.0\n"
f" b 1.0.0 depends on c==1.0.0"
)

packages = [
("a", "3.0.0", ["c==3.0.0"]),
("a", "2.0.0", ["c==2.0.0"]),
("a", "1.0.0", ["c==1.0.0"]),
("b", "1.0.0", ["c==1.0.0"]),
("c", "1.0.0", []),
("c", "2.0.0", []),
("c", "3.0.0", []),
]

for name, version, depends in packages:
Expand All @@ -1187,15 +1200,12 @@ def test_new_resolver_presents_messages_when_resolving_conflicts(script):
)

script.assert_installed(A="1.0.0", B="1.0.0", C="1.0.0")
message = (
"INFO: Cannot install a==2.0.0 and b==1.0.0 "
"because these package versions have conflicting dependencies.\n"
"The conflict is caused by:\n"
" a 2.0.0 depends on c==2.0.0\n"
" b 1.0.0 depends on c==1.0.0"
)
first_message = conflict_message(3)
second_message = conflict_message(2)

stdout = result.stdout
assert message in stdout
assert first_message in stdout
assert second_message not in stdout


@pytest.mark.parametrize(
Expand Down

0 comments on commit 7ad1da1

Please sign in to comment.