Validate that the same package cannot be overridden twice in workspace (#4238)

diff --git a/lib/src/package.dart b/lib/src/package.dart
index 8edf823..1daf3a6 100644
--- a/lib/src/package.dart
+++ b/lib/src/package.dart
@@ -383,8 +383,11 @@
   }
 }
 
-/// Reports an error if the graph of the workspace rooted at [root] is not a
-/// tree. Or if a package name occurs twice.
+/// Reports an error if one or more of:
+///
+/// * The graph of the workspace rooted at [root] is not a tree.
+/// * If a package name occurs twice.
+/// * If two packages in the workspace override the same package name.
 void validateWorkspace(Package root) {
   if (root.workspaceChildren.isEmpty) return;
 
@@ -420,4 +423,21 @@
     }
     namesSeen[package.name] = package;
   }
+
+  // Check that the workspace doesn't contain two overrides of the same package.
+  final overridesSeen = <String, Package>{};
+  for (final package in root.transitiveWorkspace) {
+    for (final override in package.pubspec.dependencyOverrides.keys) {
+      final collision = overridesSeen[override];
+      if (collision != null) {
+        fail('''
+The package `$override` is overridden in both:
+package `${collision.name}` at `${collision.dir}` and '${package.name}' at `${package.dir}`.
+
+Consider removing one of the overrides.
+''');
+      }
+      overridesSeen[override] = package;
+    }
+  }
 }
diff --git a/test/workspace_test.dart b/test/workspace_test.dart
index 0cd47de..df00a0f 100644
--- a/test/workspace_test.dart
+++ b/test/workspace_test.dart
@@ -1224,6 +1224,44 @@
     );
   });
 
+  test('Reports error if two members of workspace override the same package',
+      () async {
+    final server = await servePackages();
+    server.serve('foo', '1.0.0');
+    await dir(appPath, [
+      libPubspec(
+        'myapp',
+        '1.2.3',
+        deps: {'foo': 'any'},
+        extras: {
+          'dependency_overrides': {
+            'foo': {'path': '../foo'},
+          },
+          'workspace': ['a'],
+        },
+        sdk: '^3.5.0',
+      ),
+      dir('a', [
+        libPubspec(
+          'a',
+          '1.0.0',
+          resolutionWorkspace: true,
+        ),
+        pubspecOverrides({
+          'dependency_overrides': {'foo': '2.0.0'},
+        }),
+      ]),
+    ]).create();
+    await pubGet(
+      environment: {'_PUB_TEST_SDK_VERSION': '3.5.0'},
+      error: '''
+The package `foo` is overridden in both:
+package `myapp` at `.` and 'a' at `.${s}a`.
+
+Consider removing one of the overrides.''',
+    );
+  });
+
   test('overrides are applied', () async {
     final server = await servePackages();
     server.serve('foo', '1.0.0');