mirror of
https://github.com/BepInEx/BepInEx.git
synced 2026-10-20 01:46:13 +00:00
Fixed possible cyclic dependency with incompatible plugins
This commit is contained in:
1 parent
1d0bc5295a
commit
eb65de062d
1 file changed
+15
-20
@@ -224,11 +224,25 @@ namespace BepInEx.Bootstrap
|
||||
continue;
|
||||
}
|
||||
|
||||
dependencyDict[pluginInfo.Metadata.GUID] = pluginInfo.Dependencies.Select(d => d.DependencyGUID).Concat(pluginInfo.Incompatibilities.Select(i => i.IncompatibilityGUID));
|
||||
dependencyDict[pluginInfo.Metadata.GUID] = pluginInfo.Dependencies.Select(d => d.DependencyGUID);
|
||||
pluginsByGUID[pluginInfo.Metadata.GUID] = pluginInfo;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var pluginInfo in pluginsByGUID.Values.ToList())
|
||||
{
|
||||
if (pluginInfo.Incompatibilities.Any(incompatibility => pluginsByGUID.ContainsKey(incompatibility.IncompatibilityGUID)))
|
||||
{
|
||||
pluginsByGUID.Remove(pluginInfo.Metadata.GUID);
|
||||
dependencyDict.Remove(pluginInfo.Metadata.GUID);
|
||||
|
||||
var incompatiblePlugins = pluginInfo.Incompatibilities.Select(x => x.IncompatibilityGUID).Where(x => pluginsByGUID.ContainsKey(x)).ToArray();
|
||||
string message = $@"Could not load [{pluginInfo.Metadata.Name}] because it is incompatible with: {string.Join(", ", incompatiblePlugins)}";
|
||||
DependencyErrors.Add(message);
|
||||
Logger.LogError(message);
|
||||
}
|
||||
}
|
||||
|
||||
var emptyDependencies = new string[0];
|
||||
|
||||
// Sort plugins by their dependencies.
|
||||
@@ -266,13 +280,6 @@ namespace BepInEx.Bootstrap
|
||||
}
|
||||
}
|
||||
|
||||
var incompatibilities = new List<BepInIncompatibility>();
|
||||
foreach (var incompatibility in pluginInfo.Incompatibilities)
|
||||
{
|
||||
if (processedPlugins.ContainsKey(incompatibility.IncompatibilityGUID))
|
||||
incompatibilities.Add(incompatibility);
|
||||
}
|
||||
|
||||
processedPlugins.Add(pluginGUID, pluginInfo.Metadata.Version);
|
||||
|
||||
if (dependsOnInvalidPlugin)
|
||||
@@ -297,18 +304,6 @@ namespace BepInEx.Bootstrap
|
||||
continue;
|
||||
}
|
||||
|
||||
if (incompatibilities.Count != 0)
|
||||
{
|
||||
string message = $@"Could not load [{pluginInfo.Metadata.Name}] because it is incompatible with: {
|
||||
string.Join(", ", incompatibilities.Select(i => i.IncompatibilityGUID).ToArray())
|
||||
}";
|
||||
DependencyErrors.Add(message);
|
||||
Logger.LogError(message);
|
||||
|
||||
invalidPlugins.Add(pluginGUID);
|
||||
continue;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Logger.LogInfo($"Loading [{pluginInfo.Metadata.Name} {pluginInfo.Metadata.Version}]");
|
||||
|
||||
Reference in new issue
Block a user