diff --git a/source/dub/commandline.d b/source/dub/commandline.d index 4d869f7..e4ed883 100644 --- a/source/dub/commandline.d +++ b/source/dub/commandline.d @@ -580,9 +580,6 @@ args.getopt("nodeps", &m_nodeps, [ "Do not check/update dependencies before building" ]); - args.getopt("force-remove", &m_forceRemove, [ - "Force deletion of fetched packages with untracked files when upgrading" - ]); args.getopt("build-mode", &m_buildMode, [ "Specifies the way the compiler and linker are invoked. Valid values:", " separate (default), allAtOnce, singleFile" @@ -590,6 +587,9 @@ args.getopt("single", &m_single, [ "Treats the package name as a filename. The file must contain a package recipe comment." ]); + args.getopt("force-remove", &m_forceRemove, [ + "Deprecated option that does nothing." + ]); } protected void setupPackage(Dub dub, string package_name, string default_build_type = "debug") @@ -1104,15 +1104,15 @@ args.getopt("prerelease", &m_prerelease, [ "Uses the latest pre-release version, even if release versions are available" ]); - args.getopt("force-remove", &m_forceRemove, [ - "Force deletion of fetched packages with untracked files" - ]); args.getopt("verify", &m_verify, [ "Updates the project and performs a build. If successful, rewrites the selected versions file ." ]); args.getopt("missing-only", &m_missingOnly, [ "Performs an upgrade only for dependencies that don't yet have a version selected. This is also done automatically before each build." ]); + args.getopt("force-remove", &m_forceRemove, [ + "Deprecated option that does nothing." + ]); } override int execute(Dub dub, string[] free_args, string[] app_args) @@ -1125,7 +1125,6 @@ auto options = UpgradeOptions.upgrade|UpgradeOptions.select; if (m_missingOnly) options &= ~UpgradeOptions.upgrade; if (m_prerelease) options |= UpgradeOptions.preRelease; - if (m_forceRemove) options |= UpgradeOptions.forceRemove; enforceUsage(free_args.length == 0, "Upgrading a specific package is not yet implemented."); dub.upgrade(options); return 0; @@ -1146,7 +1145,7 @@ ]); args.getopt("force-remove", &m_forceRemove, [ - "Force deletion of fetched packages with untracked files" + "Deprecated option that does nothing" ]); } @@ -1193,7 +1192,6 @@ FetchOptions fetchOpts; fetchOpts |= FetchOptions.forceBranchUpgrade; - fetchOpts |= m_forceRemove ? FetchOptions.forceRemove : FetchOptions.none; if (m_version.length) dub.fetch(name, Dependency(m_version), location, fetchOpts); else { try { @@ -1280,9 +1278,9 @@ } if (m_nonInteractive || !m_version.empty) - dub.remove(package_id, m_version, location, m_forceRemove); + dub.remove(package_id, m_version, location); else - dub.remove(package_id, location, m_forceRemove, &resolveVersion); + dub.remove(package_id, location, &resolveVersion); return 0; } } diff --git a/source/dub/dub.d b/source/dub/dub.d index 0290694..9592933 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -427,14 +427,13 @@ { // TODO: only re-install if there is actually a new commit available logInfo("Re-installing branch based dependency %s %s", p, ver.toString()); - m_packageManager.remove(pack, (options & UpgradeOptions.forceRemove) != 0); + m_packageManager.remove(pack); pack = null; } } FetchOptions fetchOpts; fetchOpts |= (options & UpgradeOptions.preRelease) != 0 ? FetchOptions.usePrerelease : FetchOptions.none; - fetchOpts |= (options & UpgradeOptions.forceRemove) != 0 ? FetchOptions.forceRemove : FetchOptions.none; if (!pack) fetch(p, ver, defaultPlacementLocation, fetchOpts, "getting selected version"); if ((options & UpgradeOptions.select) && p != m_project.rootPackage.name) { if (ver.path.empty) m_project.selections.selectVersion(p, ver.version_); @@ -662,7 +661,7 @@ return existing; } else { logInfo("Removing %s %s to prepare replacement with a new version.", packageId, ver); - if (!m_dryRun) m_packageManager.remove(existing, (options & FetchOptions.forceRemove) != 0); + if (!m_dryRun) m_packageManager.remove(existing); } } @@ -707,13 +706,17 @@ Params: pack = Package instance to remove - force_remove = Forces removal of the package, even if untracked - files are found in its folder. */ - void remove(in Package pack, bool force_remove) + void remove(in Package pack) { logInfo("Removing %s in %s", pack.name, pack.path.toNativeString()); - if (!m_dryRun) m_packageManager.remove(pack, force_remove); + if (!m_dryRun) m_packageManager.remove(pack); + } + + /// Compatibility overload. Use the version without a `force_remove` argument instead. + void remove(in Package pack, bool force_remove) + { + remove(pack); } /// @see remove(string, string, RemoveLocation) @@ -729,11 +732,9 @@ package_id = Name of the package to be removed location_ = Specifies the location to look for the given package name/version. - force_remove = Forces removal of the package, even if untracked - files are found in its folder. resolve_version = Callback to select package version. */ - void remove(string package_id, PlacementLocation location, bool force_remove, + void remove(string package_id, PlacementLocation location, scope size_t delegate(in Package[] packages) resolve_version) { enforce(!package_id.empty); @@ -766,7 +767,7 @@ logDebug("Removing %s packages.", packages.length); foreach(pack; packages) { try { - remove(pack, force_remove); + remove(pack); logInfo("Removed %s, version %s.", package_id, pack.version_); } catch (Exception e) { logError("Failed to remove %s %s: %s", package_id, pack.version_, e.msg); @@ -775,6 +776,13 @@ } } + /// Compatibility overload. Use the version without a `force_remove` argument instead. + void remove(string package_id, PlacementLocation location, bool force_remove, + scope size_t delegate(in Package[] packages) resolve_version) + { + remove(package_id, location, resolve_version); + } + /** Removes a specific version of a package. Params: @@ -785,12 +793,10 @@ exception, if there are multiple versions retrieved. location_ = Specifies the location to look for the given package name/version. - force_remove = Forces removal of the package, even if untracked - files are found in its folder. */ - void remove(string package_id, string version_, PlacementLocation location, bool force_remove) + void remove(string package_id, string version_, PlacementLocation location) { - remove(package_id, location, force_remove, (in packages) { + remove(package_id, location, (in packages) { if (version_ == RemoveVersionWildcard) return packages.length; if (version_.empty && packages.length > 1) { @@ -812,6 +818,12 @@ }); } + /// Compatibility overload. Use the version without a `force_remove` argument instead. + void remove(string package_id, string version_, PlacementLocation location, bool force_remove) + { + remove(package_id, version_, location); + } + /** Adds a directory to the list of locally known packages. Forwards to `PackageManager.addLocalPackage`. @@ -1117,7 +1129,7 @@ none = 0, forceBranchUpgrade = 1<<0, usePrerelease = 1<<1, - forceRemove = 1<<2, + forceRemove = 1<<2, /// Deprecated, does nothing. printOnly = 1<<3, } @@ -1127,7 +1139,7 @@ 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 + forceRemove = 1<<3, /// Deprecated, does nothing. 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 useCachedResult = 1<<6, /// Use cached information stored with the package to determine upgrades @@ -1361,7 +1373,6 @@ try { FetchOptions fetchOpts; fetchOpts |= prerelease ? FetchOptions.usePrerelease : FetchOptions.none; - fetchOpts |= (m_options & UpgradeOptions.forceRemove) != 0 ? FetchOptions.forceRemove : FetchOptions.none; m_dub.fetch(rootpack, dep, m_dub.defaultPlacementLocation, fetchOpts, "need sub package description"); auto ret = m_dub.m_packageManager.getBestPackage(name, dep); if (!ret) { diff --git a/source/dub/packagemanager.d b/source/dub/packagemanager.d index 8b87637..00054b9 100644 --- a/source/dub/packagemanager.d +++ b/source/dub/packagemanager.d @@ -415,7 +415,7 @@ } /// Removes the given the package. - void remove(in Package pack, bool force_remove) + void remove(in Package pack) { logDebug("Remove %s, version %s, path '%s'", pack.name, pack.version_, pack.path); enforce(!pack.path.empty, "Cannot remove package "~pack.name~" without a path."); @@ -445,6 +445,12 @@ logInfo("Removed package: '"~pack.name~"'"); } + /// Compatibility overload. Use the version without a `force_remove` argument instead. + void remove(in Package pack, bool force_remove) + { + remove(pack); + } + Package addLocalPackage(Path path, string verName, LocalPackageType type) { path.endsWithSlash = true;