diff --git a/source/dub/commandline.d b/source/dub/commandline.d index cf7ed08..50b804a 100644 --- a/source/dub/commandline.d +++ b/source/dub/commandline.d @@ -382,10 +382,10 @@ // retrieve missing packages logDiagnostic("Checking for missing dependencies."); - dub.upgrade(UpdateOptions.select); + dub.upgrade(UpgradeOptions.select); // check for updates logDiagnostic("Checking for upgrades."); - dub.upgrade(UpdateOptions.upgrade|UpdateOptions.printUpgradesOnly); + dub.upgrade(UpgradeOptions.upgrade|UpgradeOptions.printUpgradesOnly); } dub.project.validate(); @@ -748,9 +748,9 @@ enforceUsage(!m_verify, "--verify is not yet implemented."); dub.loadPackageFromCwd(); logInfo("Upgrading project in %s", dub.projectPath.toNativeString()); - auto options = UpdateOptions.upgrade|UpdateOptions.select; - if (m_prerelease) options |= UpdateOptions.preRelease; - if (m_forceRemove) options |= UpdateOptions.forceRemove; + auto options = UpgradeOptions.upgrade|UpgradeOptions.select; + if (m_prerelease) options |= UpgradeOptions.preRelease; + if (m_forceRemove) options |= UpgradeOptions.forceRemove; enforceUsage(app_args.length == 0, "Upgrading a specific package is not yet implemented."); dub.upgrade(options); return 0; diff --git a/source/dub/dub.d b/source/dub/dub.d index e4403c0..f49a68c 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -164,7 +164,7 @@ string getDefaultConfiguration(BuildPlatform platform, bool allow_non_library_configs = true) const { return m_project.getDefaultConfiguration(platform, allow_non_library_configs); } - void upgrade(UpdateOptions options) + void upgrade(UpgradeOptions options) { auto resolver = new DependencyVersionResolver(this, options); auto versions = resolver.resolve(m_project.rootPackage, m_project.selections); @@ -172,12 +172,12 @@ foreach (p, ver; versions) { assert(!p.canFind(":"), "Resolved packages contain a sub package!?: "~p); auto pack = m_packageManager.getBestPackage(p, ver); - if (!pack) fetch(p, ver, PlacementLocation.userWide, false, (options & UpdateOptions.preRelease) != 0, (options & UpdateOptions.forceRemove) != 0, false); - if (options & UpdateOptions.select && ver.path.empty) + if (!pack) fetch(p, ver, PlacementLocation.userWide, false, (options & UpgradeOptions.preRelease) != 0, (options & UpgradeOptions.forceRemove) != 0, false); + if (options & UpgradeOptions.select && ver.path.empty) m_project.selections.selectVersion(p, ver.version_); } - if (options & UpdateOptions.select) + if (options & UpgradeOptions.select) m_project.saveSelections(); m_project.reinit(); @@ -588,10 +588,20 @@ return ret.data; } +enum UpgradeOptions +{ + none = 0, + upgrade = 1<<1, /// Upgrade existing packages + preRelease = 1<<2, /// inclde pre-release versions in upgrade + forceRemove = 1<<3, /// Force removing package folders, which contain unknown files + select = 1<<4, /// Update the dub.selections.json file with the upgraded versions + printUpgradesOnly = 1<<5, /// Instead of downloading new packages, just print a message to notify the user of their existence +} + class DependencyVersionResolver : DependencyResolver!(Dependency, Dependency) { protected { Dub m_dub; - UpdateOptions m_options; + UpgradeOptions m_options; Dependency[][string] m_packageVersions; Package[string] m_remotePackages; SelectedVersions m_selectedVersions; @@ -599,7 +609,7 @@ } - this(Dub dub, UpdateOptions options) + this(Dub dub, UpgradeOptions options) { m_dub = dub; m_selectedVersions = m_dub.m_project.selections; @@ -610,13 +620,13 @@ { m_rootPackage = root; m_selectedVersions = selected_versions; - return super.resolve(TreeNode(root.name, Dependency(root.ver)), (m_options & UpdateOptions.printUpgradesOnly) == 0); + return super.resolve(TreeNode(root.name, Dependency(root.ver)), (m_options & UpgradeOptions.printUpgradesOnly) == 0); } protected override Dependency[] getAllConfigs(string pack) { logDiagnostic("Search for versions of %s (%s package suppliers)", pack, m_dub.m_packageSuppliers.length); - if (!(m_options & UpdateOptions.upgrade) && m_selectedVersions.hasSelectedVersion(pack)) + if (!(m_options & UpgradeOptions.upgrade) && m_selectedVersions.hasSelectedVersion(pack)) return [m_selectedVersions.selectedVersion(pack)]; if (auto pvers = pack in m_packageVersions) @@ -646,7 +656,7 @@ versions = versions.sort!"a>b".uniq.array; // move pre-release versions to the back of the list if no preRelease flag is given - if (!(m_options & UpdateOptions.preRelease)) + if (!(m_options & UpgradeOptions.preRelease)) versions = versions.filter!(v => !v.isPreRelease).array ~ versions.filter!(v => v.isPreRelease).array; if (!versions.length) logDiagnostic("Nothing found for %s", pack); @@ -676,7 +686,7 @@ auto dbasename = getBasePackageName(dname); if (dspec.optional && !m_dub.packageManager.getFirstPackage(dname)) continue; - if (m_options & UpdateOptions.upgrade || !m_selectedVersions || !m_selectedVersions.hasSelectedVersion(dbasename)) + if (m_options & UpgradeOptions.upgrade || !m_selectedVersions || !m_selectedVersions.hasSelectedVersion(dbasename)) ret ~= TreeNodes(dname, dspec.mapToPath(pack.path)); else ret ~= TreeNodes(dname, m_selectedVersions.selectedVersion(dbasename)); } @@ -704,7 +714,7 @@ if (auto ret = key in m_remotePackages) return *ret; - auto prerelease = (m_options & UpdateOptions.preRelease) != 0; + auto prerelease = (m_options & UpgradeOptions.preRelease) != 0; auto rootpack = name.split(":")[0]; @@ -721,7 +731,7 @@ } } else { try { - m_dub.fetch(rootpack, dep, PlacementLocation.userWide, false, prerelease, (m_options & UpdateOptions.forceRemove) != 0, false); + m_dub.fetch(rootpack, dep, PlacementLocation.userWide, false, prerelease, (m_options & UpgradeOptions.forceRemove) != 0, false); auto ret = m_dub.m_packageManager.getBestPackage(name, dep); if (!ret) { logWarn("Package %s %s doesn't have a sub package %s", rootpack, dep.version_, name); diff --git a/source/dub/project.d b/source/dub/project.d index 8070218..24b2aac 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -643,17 +643,6 @@ } -enum UpdateOptions -{ - none = 0, - upgrade = 1<<1, /// Upgrade existing packages - preRelease = 1<<2, /// inclde pre-release versions in upgrade - forceRemove = 1<<3, /// Force removing package folders, which contain unknown files - select = 1<<4, /// Update the dub.selections.json file with the upgraded versions - printUpgradesOnly = 1<<5, /// Instead of downloading new packages, just print a message to notify the user of their existence -} - - /// Indicates where a package has been or should be placed to. enum PlacementLocation { /// Packages retrived with 'local' will be placed in the current folder