[tool] Include `dev_dependencies` in `make-deps-path-based` (#6146)

diff --git a/script/tool/CHANGELOG.md b/script/tool/CHANGELOG.md
index a84e9af..f0534c2 100644
--- a/script/tool/CHANGELOG.md
+++ b/script/tool/CHANGELOG.md
@@ -1,5 +1,7 @@
-## NEXT
+## 0.8.9
 
+- Includes `dev_dependencies` when overridding dependencies using
+  `make-deps-path-based`.
 - Bypasses version and CHANGELOG checks for Dependabot PRs for packages
   that are known not to be client-affecting.
 
diff --git a/script/tool/lib/src/make_deps_path_based_command.dart b/script/tool/lib/src/make_deps_path_based_command.dart
index 4bbecb4..805dd68 100644
--- a/script/tool/lib/src/make_deps_path_based_command.dart
+++ b/script/tool/lib/src/make_deps_path_based_command.dart
@@ -154,8 +154,14 @@
       throw ToolExit(_exitCannotUpdatePubspec);
     }
 
-    final Iterable<String> packagesToOverride = pubspec.dependencies.keys.where(
-        (String packageName) => localDependencies.containsKey(packageName));
+    final Iterable<String> combinedDependencies = <String>[
+      ...pubspec.dependencies.keys,
+      ...pubspec.devDependencies.keys,
+    ];
+    final Iterable<String> packagesToOverride = combinedDependencies
+        .where(
+            (String packageName) => localDependencies.containsKey(packageName))
+        .toList();
     if (packagesToOverride.isNotEmpty) {
       final String commonBasePath = packagesDir.path;
       // Find the relative path to the common base.
diff --git a/script/tool/pubspec.yaml b/script/tool/pubspec.yaml
index b8233de..a4ecbfb 100644
--- a/script/tool/pubspec.yaml
+++ b/script/tool/pubspec.yaml
@@ -1,7 +1,7 @@
 name: flutter_plugin_tools
 description: Productivity utils for flutter/plugins and flutter/packages
 repository: https://github.com/flutter/plugins/tree/main/script/tool
-version: 0.8.8
+version: 0.8.9
 
 dependencies:
   args: ^2.1.0
diff --git a/script/tool/test/make_deps_path_based_command_test.dart b/script/tool/test/make_deps_path_based_command_test.dart
index 2644e81..33d6be2 100644
--- a/script/tool/test/make_deps_path_based_command_test.dart
+++ b/script/tool/test/make_deps_path_based_command_test.dart
@@ -60,6 +60,19 @@
     package.pubspecFile.writeAsStringSync(lines.join('\n'));
   }
 
+  /// Adds a 'dev_dependencies:' section with entries for each package in
+  /// [dependencies] to [package].
+  void _addDevDependenciesSection(
+      RepositoryPackage package, Iterable<String> devDependencies) {
+    final String originalContent = package.pubspecFile.readAsStringSync();
+    package.pubspecFile.writeAsStringSync('''
+$originalContent
+
+dev_dependencies:
+${devDependencies.map((String dep) => '  $dep: ^1.0.0').join('\n')}
+''');
+  }
+
   test('no-ops for no plugins', () async {
     createFakePackage('foo', packagesDir, isFlutter: true);
     final RepositoryPackage packageBar =
@@ -81,7 +94,7 @@
     expect(packageBar.pubspecFile.readAsStringSync(), originalPubspecContents);
   });
 
-  test('rewrites references', () async {
+  test('rewrites "dependencies" references', () async {
     final RepositoryPackage simplePackage =
         createFakePackage('foo', packagesDir, isFlutter: true);
     final Directory pluginGroup = packagesDir.childDirectory('bar');
@@ -142,6 +155,35 @@
         ]));
   });
 
+  test('rewrites "dev_dependencies" references', () async {
+    createFakePackage('foo', packagesDir);
+    final RepositoryPackage builderPackage =
+        createFakePackage('foo_builder', packagesDir);
+
+    _addDevDependenciesSection(builderPackage, <String>[
+      'foo',
+    ]);
+
+    final List<String> output = await runCapturingPrint(
+        runner, <String>['make-deps-path-based', '--target-dependencies=foo']);
+
+    expect(
+        output,
+        containsAll(<String>[
+          'Rewriting references to: foo...',
+          '  Modified packages/foo_builder/pubspec.yaml',
+        ]));
+
+    expect(
+        builderPackage.pubspecFile.readAsLinesSync(),
+        containsAllInOrder(<String>[
+          '# FOR TESTING ONLY. DO NOT MERGE.',
+          'dependency_overrides:',
+          '  foo:',
+          '    path: ../foo',
+        ]));
+  });
+
   // This test case ensures that running CI using this command on an interim
   // PR that itself used this command won't fail on the rewrite step.
   test('running a second time no-ops without failing', () async {