Refactor relationship resolver to capture full resolved tree#4232
Merged
Conversation
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.
Problems
If you use
ckan install -c modpack.ckanto install a modpack with incompatible dependencies, the message is something like:This does not explain the problem, can only report one problem with one mod, and almost all of the advice at the bottom is useless. A similar poor message can also appear in GUI if the user force-selects a mod with incompatible dependencies on the Versions tab.
Causes
When the relationship resolver checks dependencies recursively to make sure a mod can be installed, it loses the information from the "leaf nodes" and just reports the outermost mod that can't be resolved.
Changes
ckan compatinstead of--no-recommends, better explains what "lucky" means forckan update, and notes that--allow-incompatibledoesn't apply to dependencies:Fixes #4108.
Side fixes
While working on the above, I tossed in a few opportunistic fixes:
Registryand related classes are refactored to useICollectioninstead ofIEnumerableor specific collection types, which allows us to eliminate repeated calls to.ToHashSet(),.ToList(), etc. to improve performance.ModSearchobject with no tag names rather than the empty string. Now it works.RelationshipResolverOptionsandSelectionReasonare moved to their own files.