_loader: Use the sort algorithm from Python 3.12 for dependencies#1993
Merged
_loader: Use the sort algorithm from Python 3.12 for dependencies#1993
Conversation
The comparison function used to sort dependencies does not impose a total ordering. This means that the order of the sorted list depends on the order of inputs and implementation details of the sort algorithm. Python 3.13 changes the sort algorithm in a way that may affect the sorting of dependencies. This in turn affects the staging order and cache keys of elements. This commit embeds the list sort algorithm from Python 3.12.9 in BuildStream and uses that to sort dependencies. This restores cache key compatibility across Python versions despite the flaw of the comparison function. The comparison function is not modified at this point to prevent changes in staging order and cache keys on Python <= 3.12. Fixes #1988.
b332c68 to
efe4e9b
Compare
Add test elements that would result in a cache key difference between Python 3.12 and Python 3.13 without the embedded sort algorithm.
Contributor
|
Asides from landing this, we should keep an additional issue open about dependency ordering in bst files incorrectly affecting staging order and cache keys. |
Contributor
Author
I've opened #1995 to keep track of this. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The comparison function used to sort dependencies does not impose a total ordering. This means that the order of the sorted list depends on the order of inputs and implementation details of the sort algorithm.
Python 3.13 changes the sort algorithm in a way that may affect the sorting of dependencies. This in turn affects the staging order and cache keys of elements.
This commit embeds the list sort algorithm from Python 3.12.9 in BuildStream and uses that to sort dependencies. This restores cache key compatibility across Python versions despite the flaw of the comparison function.
The comparison function is not modified at this point to prevent changes in staging order and cache keys on Python <= 3.12.
Fixes #1988.