diff --git a/source/dub/dependencyresolver.d b/source/dub/dependencyresolver.d index 9ff1cd0..d41606b 100644 --- a/source/dub/dependencyresolver.d +++ b/source/dub/dependencyresolver.d @@ -10,7 +10,7 @@ import dub.dependency; import dub.internal.vibecompat.core.log; -import std.algorithm : any, canFind, sort; +import std.algorithm : all, canFind, sort; import std.array : appender; import std.conv : to; import std.exception : enforce; @@ -40,7 +40,7 @@ ChildIterationState[] children; } - CONFIG[string] resolve(TreeNode root) + CONFIG[string] resolve(TreeNode root, bool throw_on_failure = true) { static string rootPackage(string p) { auto idx = indexOf(p, ":"); @@ -106,7 +106,10 @@ if (++i >= all_configs[pi].length) i = 0; else break; } - enforce(config_indices.any!"a!=0", "Could not find a valid dependency tree configuration."); + if (config_indices.all!"a==0") { + if (throw_on_failure) throw new Exception("Could not find a valid dependency tree configuration."); + else return null; + } } } diff --git a/source/dub/dub.d b/source/dub/dub.d index b17ecf9..e3982da 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -597,6 +597,7 @@ this(Dub dub, UpdateOptions options) { m_dub = dub; + m_selectedVersions = m_dub.m_project.selections; m_options = options; } @@ -604,7 +605,7 @@ { m_rootPackage = root; m_selectedVersions = selected_versions; - return super.resolve(TreeNode(root.name, Dependency(root.ver))); + return super.resolve(TreeNode(root.name, Dependency(root.ver)), (m_options & UpdateOptions.printUpgradesOnly) == 0); } protected override Dependency[] getAllConfigs(string pack) @@ -647,9 +648,10 @@ auto ret = appender!(TreeNodes[]); auto pack = getPackage(node.pack, node.config); foreach (dname, dspec; pack.dependencies) { - if (m_options & UpdateOptions.upgrade || !m_selectedVersions || !m_selectedVersions.hasSelectedVersion(node.pack)) + auto dbasename = getBasePackage(dname); + if (m_options & UpdateOptions.upgrade || !m_selectedVersions || !m_selectedVersions.hasSelectedVersion(dbasename)) ret ~= TreeNodes(dname, dspec); - else ret ~= TreeNodes(dname, m_selectedVersions.selectedVersion(node.pack)); + else ret ~= TreeNodes(dname, m_selectedVersions.selectedVersion(dbasename)); } return ret.data; }