Skip to content

Commit 52e3f86

Browse files
committed
Deprecate overrides: local-overrides.json, add-override, remove-override
As explained in the changelog, overrides were a solution to a system with version-only dependencies, which is long gone.
1 parent 670ce18 commit 52e3f86

File tree

3 files changed

+73
-20
lines changed

3 files changed

+73
-20
lines changed

changelog/overrides_deprecated.dd

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
The override system is deprecated
2+
3+
Dub had an "override" system, allowing a specific version or version range
4+
to be overriden by a specific package.
5+
This override system was developed with a purely version-based approach in mind,
6+
however since its inception, more ways to specify dependencies have been added,
7+
making the override approach redundant and less flexible than other approaches.
8+
From this release, dub will warn you if it finds an override file,
9+
or when using the `dub add-override` / `dub remove-override` commands.

source/dub/commandline.d

+24-13
Original file line numberDiff line numberDiff line change
@@ -2191,13 +2191,19 @@ class AddOverrideCommand : Command {
21912191
bool m_system = false;
21922192
}
21932193

2194+
static immutable string DeprecationMessage =
2195+
"This command is deprecated. Use path based dependency, custom cache path, " ~
2196+
"or edit `dub.selections.json` to achieve the same results.";
2197+
2198+
21942199
this() @safe pure nothrow
21952200
{
21962201
this.name = "add-override";
21972202
this.argumentsPattern = "<package> <version-spec> <target-path/target-version>";
21982203
this.description = "Adds a new package override.";
2199-
this.helpText = [
2200-
];
2204+
2205+
this.hidden = true;
2206+
this.helpText = [ DeprecationMessage ];
22012207
}
22022208

22032209
override void prepare(scope CommandArgs args)
@@ -2209,6 +2215,7 @@ class AddOverrideCommand : Command {
22092215

22102216
override int execute(Dub dub, string[] free_args, string[] app_args)
22112217
{
2218+
logWarn(DeprecationMessage);
22122219
enforceUsage(app_args.length == 0, "Unexpected application arguments.");
22132220
enforceUsage(free_args.length == 3, "Expected three arguments, not "~free_args.length.to!string);
22142221
auto scope_ = m_system ? PlacementLocation.system : PlacementLocation.user;
@@ -2217,11 +2224,11 @@ class AddOverrideCommand : Command {
22172224
if (existsFile(NativePath(free_args[2]))) {
22182225
auto target = NativePath(free_args[2]);
22192226
if (!target.absolute) target = NativePath(getcwd()) ~ target;
2220-
dub.packageManager.addOverride(scope_, pack, source, target);
2227+
dub.packageManager.addOverride_(scope_, pack, source, target);
22212228
logInfo("Added override %s %s => %s", pack, source, target);
22222229
} else {
22232230
auto target = Version(free_args[2]);
2224-
dub.packageManager.addOverride(scope_, pack, source, target);
2231+
dub.packageManager.addOverride_(scope_, pack, source, target);
22252232
logInfo("Added override %s %s => %s", pack, source, target);
22262233
}
22272234
return 0;
@@ -2238,8 +2245,9 @@ class RemoveOverrideCommand : Command {
22382245
this.name = "remove-override";
22392246
this.argumentsPattern = "<package> <version-spec>";
22402247
this.description = "Removes an existing package override.";
2241-
this.helpText = [
2242-
];
2248+
2249+
this.hidden = true;
2250+
this.helpText = [ AddOverrideCommand.DeprecationMessage ];
22432251
}
22442252

22452253
override void prepare(scope CommandArgs args)
@@ -2251,11 +2259,12 @@ class RemoveOverrideCommand : Command {
22512259

22522260
override int execute(Dub dub, string[] free_args, string[] app_args)
22532261
{
2262+
logWarn(AddOverrideCommand.DeprecationMessage);
22542263
enforceUsage(app_args.length == 0, "Unexpected application arguments.");
22552264
enforceUsage(free_args.length == 2, "Expected two arguments, not "~free_args.length.to!string);
22562265
auto scope_ = m_system ? PlacementLocation.system : PlacementLocation.user;
22572266
auto source = VersionRange.fromString(free_args[1]);
2258-
dub.packageManager.removeOverride(scope_, free_args[0], source);
2267+
dub.packageManager.removeOverride_(scope_, free_args[0], source);
22592268
return 0;
22602269
}
22612270
}
@@ -2266,23 +2275,25 @@ class ListOverridesCommand : Command {
22662275
this.name = "list-overrides";
22672276
this.argumentsPattern = "";
22682277
this.description = "Prints a list of all local package overrides";
2269-
this.helpText = [
2270-
"Prints a list of all overridden packages added via \"dub add-override\"."
2271-
];
2278+
2279+
this.hidden = true;
2280+
this.helpText = [ AddOverrideCommand.DeprecationMessage ];
22722281
}
22732282
override void prepare(scope CommandArgs args) {}
22742283
override int execute(Dub dub, string[] free_args, string[] app_args)
22752284
{
2276-
void printList(in PackageOverride[] overrides, string caption)
2285+
logWarn(AddOverrideCommand.DeprecationMessage);
2286+
2287+
void printList(in PackageOverride_[] overrides, string caption)
22772288
{
22782289
if (overrides.length == 0) return;
22792290
logInfoNoTag("# %s", caption);
22802291
foreach (ovr; overrides)
22812292
ovr.target.match!(
22822293
t => logInfoNoTag("%s %s => %s", ovr.package_.color(Mode.bold), ovr.version_, t));
22832294
}
2284-
printList(dub.packageManager.getOverrides(PlacementLocation.user), "User wide overrides");
2285-
printList(dub.packageManager.getOverrides(PlacementLocation.system), "System wide overrides");
2295+
printList(dub.packageManager.getOverrides_(PlacementLocation.user), "User wide overrides");
2296+
printList(dub.packageManager.getOverrides_(PlacementLocation.system), "System wide overrides");
22862297
return 0;
22872298
}
22882299
}

source/dub/packagemanager.d

+40-7
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,13 @@ class PackageManager {
491491

492492
/** Returns a list of all package overrides for the given scope.
493493
*/
494+
deprecated(OverrideDepMsg)
494495
const(PackageOverride)[] getOverrides(PlacementLocation scope_)
496+
const {
497+
return cast(typeof(return)) this.getOverrides_(scope_);
498+
}
499+
500+
package(dub) const(PackageOverride_)[] getOverrides_(PlacementLocation scope_)
495501
const {
496502
return m_repositories[scope_].overrides;
497503
}
@@ -513,15 +519,28 @@ class PackageManager {
513519
}
514520

515521
/// Ditto
522+
deprecated(OverrideDepMsg)
516523
void addOverride(PlacementLocation scope_, string package_, VersionRange source, Version target)
517524
{
518-
m_repositories[scope_].overrides ~= PackageOverride(package_, source, target);
519-
m_repositories[scope_].writeOverrides();
525+
this.addOverride_(scope_, package_, source, target);
520526
}
521527
/// ditto
528+
deprecated(OverrideDepMsg)
522529
void addOverride(PlacementLocation scope_, string package_, VersionRange source, NativePath target)
523530
{
524-
m_repositories[scope_].overrides ~= PackageOverride(package_, source, target);
531+
this.addOverride_(scope_, package_, source, target);
532+
}
533+
534+
// Non deprecated version that is used by `commandline`. Do not use!
535+
package(dub) void addOverride_(PlacementLocation scope_, string package_, VersionRange source, Version target)
536+
{
537+
m_repositories[scope_].overrides ~= PackageOverride_(package_, source, target);
538+
m_repositories[scope_].writeOverrides();
539+
}
540+
// Non deprecated version that is used by `commandline`. Do not use!
541+
package(dub) void addOverride_(PlacementLocation scope_, string package_, VersionRange source, NativePath target)
542+
{
543+
m_repositories[scope_].overrides ~= PackageOverride_(package_, source, target);
525544
m_repositories[scope_].writeOverrides();
526545
}
527546

@@ -536,7 +555,13 @@ class PackageManager {
536555
);
537556
}
538557

558+
deprecated(OverrideDepMsg)
539559
void removeOverride(PlacementLocation scope_, string package_, VersionRange src)
560+
{
561+
this.removeOverride_(scope_, package_, src);
562+
}
563+
564+
package(dub) void removeOverride_(PlacementLocation scope_, string package_, VersionRange src)
540565
{
541566
Location* rep = &m_repositories[scope_];
542567
foreach (i, ovr; rep.overrides) {
@@ -838,9 +863,11 @@ class PackageManager {
838863
}
839864
}
840865

841-
struct PackageOverride {
842-
private alias ResolvedDep = SumType!(NativePath, Version);
866+
deprecated(OverrideDepMsg)
867+
alias PackageOverride = PackageOverride_;
843868

869+
package(dub) struct PackageOverride_ {
870+
private alias ResolvedDep = SumType!(NativePath, Version);
844871
string package_;
845872
VersionRange source;
846873
ResolvedDep target;
@@ -943,7 +970,7 @@ private struct Location {
943970
Package[] localPackages;
944971

945972
/// List of overrides stored at this `Location`
946-
PackageOverride[] overrides;
973+
PackageOverride_[] overrides;
947974

948975
this(NativePath path) @safe pure nothrow @nogc
949976
{
@@ -955,8 +982,11 @@ private struct Location {
955982
this.overrides = null;
956983
auto ovrfilepath = this.packagePath ~ LocalOverridesFilename;
957984
if (existsFile(ovrfilepath)) {
985+
logWarn("Found local override file: %s", ovrfilepath);
986+
logWarn(OverrideDepMsg);
987+
logWarn("Replace with a path-based dependency in your project or a custom cache path");
958988
foreach (entry; jsonFromFile(ovrfilepath)) {
959-
PackageOverride ovr;
989+
PackageOverride_ ovr;
960990
ovr.package_ = entry["name"].get!string;
961991
ovr.source = VersionRange.fromString(entry["version"].get!string);
962992
if (auto pv = "targetVersion" in entry) ovr.target = Version(pv.get!string);
@@ -1122,3 +1152,6 @@ private struct Location {
11221152
logDiagnostic("Failed to enumerate %s packages: %s", path.toNativeString(), e.toString());
11231153
}
11241154
}
1155+
1156+
private immutable string OverrideDepMsg =
1157+
"Overrides are deprecated as they are redundant with more fine-grained approaches";

0 commit comments

Comments
 (0)