From 69a95cf39180ce1186e17144251abf20e3b3ec9c Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 4 Nov 2020 21:18:51 +0800 Subject: [PATCH] Tie-break requirements with package name This makes the ordering deterministic to improve debugging and user experience. --- news/9100.feature.rst | 1 + src/pip/_internal/resolution/resolvelib/provider.py | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 news/9100.feature.rst diff --git a/news/9100.feature.rst b/news/9100.feature.rst new file mode 100644 index 000000000..eb6c72839 --- /dev/null +++ b/news/9100.feature.rst @@ -0,0 +1 @@ +The new resolver now resolves packages in a deterministic order. diff --git a/src/pip/_internal/resolution/resolvelib/provider.py b/src/pip/_internal/resolution/resolvelib/provider.py index 7f7d0e154..c0e6b60d9 100644 --- a/src/pip/_internal/resolution/resolvelib/provider.py +++ b/src/pip/_internal/resolution/resolvelib/provider.py @@ -57,7 +57,8 @@ class PipProvider(AbstractProvider): ): # type: (...) -> Any transitive = all(parent is not None for _, parent in information) - return (transitive, bool(candidates)) + key = next(iter(candidates)).name if candidates else "" + return (transitive, key) def find_matches(self, requirements): # type: (Sequence[Requirement]) -> Iterable[Candidate]