Sort exported modpack relationships by identifier #3499
Merged
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.
Problem
When you export a modpack into a
.ckan
file, the mods are in a non-deterministic order. Since the ordering changes from one export to the next, it is difficult to notice changes or track them with code tools like git or diff.First reported here:
https://forum.kerbalspaceprogram.com/index.php?/topic/205890-%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D1%89%D0%B8%D0%BA-ckan-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0/
(Found while searching the forum for "CKAN" because I don't have the official CKAN forum thread bookmarked.)
Cause
The order is the order of
Registry.Installed()
, which is aDictionary
with the identifiers as keys. This is non-deterministic.Changes
Now we perform a case-insensitive sort by identifier after filtering the sequence and before making the
RelationshipDescriptor
objects. This should make the ordering consistent.Documentation for
StringComparer.OrdinalIgnoreCase
:https://docs.microsoft.com/en-us/dotnet/api/system.stringcomparer.ordinalignorecase?view=netframework-4.7.2