Don't warn about overrides (#3684)
Also always mention overrides in list of dependencies
diff --git a/lib/src/entrypoint.dart b/lib/src/entrypoint.dart
index ddc2189..0f0820b 100644
--- a/lib/src/entrypoint.dart
+++ b/lib/src/entrypoint.dart
@@ -342,11 +342,6 @@
Try running `$topLevelProgram pub get` to create `$lockFilePath`.''');
}
- if (!summaryOnly && hasPubspecOverrides) {
- log.warning(
- 'Warning: pubspec.yaml has overrides from $pubspecOverridesPath');
- }
-
SolveResult result;
try {
result = await log.progress('Resolving dependencies$suffix', () async {
diff --git a/lib/src/pubspec.dart b/lib/src/pubspec.dart
index 8ac8023..53bcea1 100644
--- a/lib/src/pubspec.dart
+++ b/lib/src/pubspec.dart
@@ -40,6 +40,8 @@
String? get _packageName => fields['name'] != null ? name : null;
+ final bool dependencyOverridesFromOverridesFile;
+
/// The name of the manifest file.
static const pubspecYamlFilename = 'pubspec.yaml';
@@ -289,6 +291,7 @@
Map? fields,
SourceRegistry? sources,
Map<String, SdkConstraint>? sdkConstraints,
+ this.dependencyOverridesFromOverridesFile = false,
}) : _dependencies = dependencies == null
? null
: Map.fromIterable(dependencies, key: (range) => range.name),
@@ -326,6 +329,8 @@
}) : _overridesFileFields = overridesFields,
_includeDefaultSdkConstraint = true,
_givenSdkConstraints = null,
+ dependencyOverridesFromOverridesFile = overridesFields != null &&
+ overridesFields.containsKey('dependency_overrides'),
super(fields is YamlMap
? fields
: YamlMap.wrap(fields, sourceUrl: location)) {
diff --git a/lib/src/solver/report.dart b/lib/src/solver/report.dart
index e9cd00e..321a3be 100644
--- a/lib/src/solver/report.dart
+++ b/lib/src/solver/report.dart
@@ -2,6 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'package:path/path.dart' as p;
import 'package:pub_semver/pub_semver.dart';
import '../command_runner.dart';
@@ -9,6 +10,7 @@
import '../log.dart' as log;
import '../package.dart';
import '../package_name.dart';
+import '../pubspec.dart';
import '../source/hosted.dart';
import '../source/root.dart';
import '../system_cache.dart';
@@ -64,7 +66,6 @@
Future<bool> show() async {
final hasChanges = await _reportChanges();
_checkContentHashesMatchOldLockfile();
- await _reportOverrides();
return hasChanges;
}
@@ -239,22 +240,6 @@
return hasChanges;
}
- /// Displays a warning about the overrides currently in effect.
- Future<void> _reportOverrides() async {
- final output = StringBuffer();
-
- if (_root.dependencyOverrides.isNotEmpty) {
- output.writeln('Warning: You are using these overridden dependencies:');
-
- for (var name in ordered(_root.dependencyOverrides.keys)) {
- await _reportPackage(name, output,
- alwaysShow: true, highlightOverride: false);
- }
-
- warning(output.toString());
- }
- }
-
/// Displays a single-line message, number of discontinued packages
/// if discontinued packages are detected.
Future<void> reportDiscontinued() async {
@@ -311,8 +296,11 @@
/// "(override)" next to overridden packages.
///
/// Returns true if the package had changed.
- Future<bool> _reportPackage(String name, StringBuffer output,
- {bool alwaysShow = false, bool highlightOverride = true}) async {
+ Future<bool> _reportPackage(
+ String name,
+ StringBuffer output, {
+ bool alwaysShow = false,
+ }) async {
var newId = _newLockFile.packages[name];
var oldId = _previousLockFile.packages[name];
var id = newId ?? oldId!;
@@ -417,7 +405,11 @@
}
if (_type == SolveType.get &&
- !(alwaysShow || changed || addedOrRemoved || message != null)) {
+ !(alwaysShow ||
+ changed ||
+ addedOrRemoved ||
+ message != null ||
+ isOverridden)) {
return changed || addedOrRemoved;
}
@@ -434,8 +426,11 @@
}
// Highlight overridden packages.
- if (isOverridden && highlightOverride) {
- output.write(" ${log.magenta('(overridden)')}");
+ if (isOverridden) {
+ final location = _root.pubspec.dependencyOverridesFromOverridesFile
+ ? ' in ${p.join(_root.dir, Pubspec.pubspecOverridesFilename)}'
+ : '';
+ output.write(' ${log.magenta('(overridden$location)')}');
}
if (message != null) output.write(' ${log.cyan(message)}');
diff --git a/test/dependency_override_test.dart b/test/dependency_override_test.dart
index 59f59e4..1c03f57 100644
--- a/test/dependency_override_test.dart
+++ b/test/dependency_override_test.dart
@@ -94,7 +94,7 @@
]).validate();
});
- test('warns about overridden dependencies', () async {
+ test('informs about overridden dependencies', () async {
await servePackages()
..serve('foo', '1.0.0')
..serve('bar', '1.0.0');
@@ -116,14 +116,13 @@
var bazPath = path.join('..', 'baz');
await runPub(
- args: [command.name],
- output: command.success,
- error: '''
- Warning: You are using these overridden dependencies:
- ! bar 1.0.0
- ! baz 0.0.1 from path $bazPath
- ! foo 1.0.0
- ''');
+ args: [command.name],
+ output: contains('''
+! bar 1.0.0 (overridden)
+! baz 0.0.1 from path $bazPath (overridden)
+! foo 1.0.0 (overridden)
+'''),
+ );
});
});
}
diff --git a/test/pubspec_overrides_test.dart b/test/pubspec_overrides_test.dart
index 7e0547c..ac5e899 100644
--- a/test/pubspec_overrides_test.dart
+++ b/test/pubspec_overrides_test.dart
@@ -2,6 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'package:path/path.dart' as p;
import 'package:test/test.dart';
import 'descriptor.dart' as d;
@@ -22,12 +23,12 @@
}),
]).create();
+ final overridesPath = p.join('.', 'pubspec_overrides.yaml');
await pubCommand(
command,
- warning:
- 'Warning: pubspec.yaml has overrides from pubspec_overrides.yaml\n'
- 'Warning: You are using these overridden dependencies:\n'
- '! lib 2.0.0',
+ output: contains(
+ '! lib 2.0.0 (overridden in $overridesPath)',
+ ),
);
await d.dir(appPath, [
@@ -46,4 +47,57 @@
]).validate();
});
});
+
+ test('pubspec_overrides.yaml shadows overrides from pubspec.yaml', () async {
+ await servePackages()
+ ..serve('lib', '1.0.0')
+ ..serve('lib', '2.0.0')
+ ..serve('lib', '3.0.0')
+ ..serve('foo', '1.0.0')
+ ..serve('foo', '2.0.0');
+
+ await d.dir(appPath, [
+ d.appPubspec(dependencies: {
+ 'lib': '1.0.0',
+ 'foo': '1.0.0'
+ }, extras: {
+ 'dependency_overrides': {'lib': '2.0.0', 'foo': '2.0.0'}
+ }),
+ d.dir('lib'),
+ // empty overrides file:
+ d.pubspecOverrides({
+ 'dependency_overrides': {'lib': '3.0.0'}
+ }),
+ ]).create();
+
+ final overridesPath = p.join('.', 'pubspec_overrides.yaml');
+ await pubGet(
+ output: allOf(
+ contains('! lib 3.0.0 (overridden in $overridesPath)'),
+ contains('+ foo 1.0.0 (2.0.0 available)'),
+ ),
+ );
+ });
+ test(
+ "An empty pubspec_overrides.yaml doesn't shadow overrides from pubspec.yaml",
+ () async {
+ await servePackages()
+ ..serve('lib', '1.0.0')
+ ..serve('lib', '2.0.0');
+
+ await d.dir(appPath, [
+ d.appPubspec(dependencies: {
+ 'lib': '1.0.0',
+ }, extras: {
+ 'dependency_overrides': {'lib': '2.0.0'}
+ }),
+ d.dir('lib'),
+ // empty overrides file:
+ d.pubspecOverrides({}),
+ ]).create();
+
+ await pubGet(
+ output: contains('! lib 2.0.0 (overridden)'),
+ );
+ });
}