Skip to content

Commit

Permalink
Merge #2424 Treat installed DLC as compatible dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
politas committed Apr 25, 2018
2 parents 95e8934 + d0e8249 commit 6436219
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file.
### Bugfixes
- [GUI] Splitter and tabstrip visual improvements (#2413 by: HebaruSan; reviewed: politas)
- [GUI] Fix "Collection was modified" exception for redundant optional dependencies (#2423 by: HebaruSan; reviewed: politas)
- [core] Treat installed DLC as compatible dependency (#2424 by: HebaruSan; reviewed: politas)

### Internal

Expand Down
3 changes: 2 additions & 1 deletion Core/Registry/Registry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,8 @@ private bool allDependenciesCompatible(CkanModule mod, KspVersionCriteria ksp_ve
{
try
{
if (!LatestAvailableWithProvides(dependency.name, ksp_version).Any())
if (!dependency.MatchesAny(null, InstalledDlls.ToHashSet(), InstalledDlc)
&& !LatestAvailableWithProvides(dependency.name, ksp_version).Any())
{
return false;
}
Expand Down
17 changes: 17 additions & 0 deletions GUI/MainModInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,13 @@ private TreeNode findDependencyShallow(IRegistryQuerier registry, string identif
}
catch (ModuleNotFoundKraken)
{
// Maybe it's a DLC?
ModuleVersion installedVersion = registry.InstalledVersion(identifier, false);
if (installedVersion != null)
{
return nonModuleNode(identifier, installedVersion, relationship);
}

// If we don't find a module by this name, look for other modules that provide it.
List<CkanModule> dependencyModules = registry.LatestAvailableWithProvides(identifier, crit);
if (dependencyModules != null && dependencyModules.Count > 0)
Expand Down Expand Up @@ -342,6 +349,16 @@ private TreeNode indexedNode(IRegistryQuerier registry, CkanModule module, Relat
};
}

private TreeNode nonModuleNode(string identifier, ModuleVersion version, RelationshipType relationship)
{
int icon = (int)relationship + 1;
return new TreeNode($"{identifier} {version}", icon, icon)
{
Name = identifier,
ToolTipText = relationship.ToString()
};
}

private TreeNode nonindexedNode(string identifier, RelationshipType relationship)
{
// Completely nonexistent dependency, e.g. "AJE"
Expand Down
94 changes: 93 additions & 1 deletion Tests/Core/Registry/Registry.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Transactions;
using System.Collections.Generic;
using CKAN;
using CKAN.Versioning;
using NUnit.Framework;
Expand Down Expand Up @@ -90,6 +91,98 @@ public void LatestAvailable()
});
}

[Test]
public void Available_NoDLCInstalled_ExcludesModulesDependingOnMH()
{
// Arrange
CkanModule DLCDepender = CkanModule.FromJson(@"{
""identifier"": ""DLC-Depender"",
""version"": ""1.0.0"",
""download"": ""https://kerbalstuff.com/mod/269/Dogecoin%20Flag/download/1.01"",
""depends"": [ {
""name"":""MakingHistory-DLC""
} ]
}");
registry.AddAvailable(DLCDepender);

// Act
List<CkanModule> avail = registry.Available(v0_24_2);

// Assert
Assert.IsFalse(avail.Contains(DLCDepender));
}

[Test]
public void Available_MHInstalled_IncludesModulesDependingOnMH()
{
// Arrange
registry.RegisterDlc("MakingHistory-DLC", new UnmanagedModuleVersion("1.1.0"));

CkanModule DLCDepender = CkanModule.FromJson(@"{
""identifier"": ""DLC-Depender"",
""version"": ""1.0.0"",
""download"": ""https://kerbalstuff.com/mod/269/Dogecoin%20Flag/download/1.01"",
""depends"": [ {
""name"":""MakingHistory-DLC""
} ]
}");
registry.AddAvailable(DLCDepender);

// Act
List<CkanModule> avail = registry.Available(v0_24_2);

// Assert
Assert.IsTrue(avail.Contains(DLCDepender));
}

[Test]
public void Available_MH110Installed_IncludesModulesDependingOnMH110()
{
// Arrange
registry.RegisterDlc("MakingHistory-DLC", new UnmanagedModuleVersion("1.1.0"));

CkanModule DLCDepender = CkanModule.FromJson(@"{
""identifier"": ""DLC-Depender"",
""version"": ""1.0.0"",
""download"": ""https://kerbalstuff.com/mod/269/Dogecoin%20Flag/download/1.01"",
""depends"": [ {
""name"": ""MakingHistory-DLC"",
""version"": ""1.1.0""
} ]
}");
registry.AddAvailable(DLCDepender);

// Act
List<CkanModule> avail = registry.Available(v0_24_2);

// Assert
Assert.IsTrue(avail.Contains(DLCDepender));
}

[Test]
public void Available_MH100Installed_ExcludesModulesDependingOnMH110()
{
// Arrange
registry.RegisterDlc("MakingHistory-DLC", new UnmanagedModuleVersion("1.0.0"));

CkanModule DLCDepender = CkanModule.FromJson(@"{
""identifier"": ""DLC-Depender"",
""version"": ""1.0.0"",
""download"": ""https://kerbalstuff.com/mod/269/Dogecoin%20Flag/download/1.01"",
""depends"": [ {
""name"": ""MakingHistory-DLC"",
""version"": ""1.1.0""
} ]
}");
registry.AddAvailable(DLCDepender);

// Act
List<CkanModule> avail = registry.Available(v0_24_2);

// Assert
Assert.IsFalse(avail.Contains(DLCDepender));
}

[Test]
public void TxEmbeddedCommit()
{
Expand Down Expand Up @@ -186,4 +279,3 @@ public void TxAmbient()
}
}
}

0 comments on commit 6436219

Please sign in to comment.