Upgrade selected optional dependencies. Fixes #762.
The previous version mixed optional dependency pinning with version pinning logic and missed this case.
1 parent 417cfa1 commit 8c038e9038208c5a8be5c88f8835ac9d13b017ec
@Sönke Ludwig Sönke Ludwig authored on 12 Nov 2016
Showing 1 changed file
View
30
source/dub/dub.d
if (d.spec.default_) dt = DependencyType.optionalDefault;
else dt = DependencyType.optional;
} else dt = DependencyType.required;
 
if (m_options & UpgradeOptions.upgrade || !m_selectedVersions || !m_selectedVersions.hasSelectedVersion(dbasename)) {
// keep deselected dependencies deselected by default
if (m_selectedVersions && !m_selectedVersions.bare && dt == DependencyType.optionalDefault)
Dependency dspec = d.spec.mapToPath(pack.path);
 
// if not upgrading, use the selected version
if (!(m_options & UpgradeOptions.upgrade) && m_selectedVersions && m_selectedVersions.hasSelectedVersion(dbasename))
dspec = m_selectedVersions.getSelectedVersion(dbasename);
 
// keep selected optional dependencies and avoid non-selected optional-default dependencies by default
if (m_selectedVersions && !m_selectedVersions.bare) {
if (dt == DependencyType.optionalDefault && !m_selectedVersions.hasSelectedVersion(dbasename))
dt = DependencyType.optional;
ret ~= TreeNodes(d.name, d.spec.mapToPath(pack.path), dt);
} else {
// keep already selected optional dependencies if possible
if (dt == DependencyType.optional) dt = DependencyType.optionalDefault;
ret ~= TreeNodes(d.name, m_selectedVersions.getSelectedVersion(dbasename), dt);
}
else if (dt == DependencyType.optional && m_selectedVersions.hasSelectedVersion(dbasename))
dt = DependencyType.optionalDefault;
}
 
ret ~= TreeNodes(d.name, dspec, dt);
}
return ret.data;
}