@@ -28,10 +28,11 @@ VoidCallback disableWorkspaceResolution(
2828 }
2929
3030 try {
31- overridePathDependenciesInPubspecOverrides (
31+ overrideDependenciesInPubspecOverrides (
3232 projectDirectory: projectDirectory,
3333 packageConfig: packageConfig,
3434 packageGraph: packageGraph,
35+ workspaceRoot: workspaceRoot,
3536 );
3637 } on Exception catch (e) {
3738 restoreWorkspaceResolution ();
@@ -70,11 +71,12 @@ VoidCallback overrideResolutionInPubspecOverrides(String projectDirectory) {
7071 return () => pubspecOverridesFile.writeAsStringSync (contents);
7172}
7273
73- /// Add overrides for all path dependencies to `pubspec_overrides.yaml`
74- void overridePathDependenciesInPubspecOverrides ({
74+ /// Add overrides for all necessary dependencies to `pubspec_overrides.yaml`
75+ void overrideDependenciesInPubspecOverrides ({
7576 required String projectDirectory,
7677 required PackageConfig packageConfig,
7778 required PackageGraph packageGraph,
79+ required String workspaceRoot,
7880}) {
7981 final name = getPackageName (projectDirectory: projectDirectory);
8082 if (name == null ) {
@@ -90,29 +92,45 @@ void overridePathDependenciesInPubspecOverrides({
9092 .where ((p) => p.relativeRoot && productionDeps.contains (p.name))
9193 .map ((p) => PathDependency (name: p.name, path: p.root.path));
9294
93- writePathDependencyOverrides (
95+ final workspaceRootOverrides = getWorkspaceRootDependencyOverrides (
96+ workspaceRoot: workspaceRoot,
97+ );
98+ final productionOverrides = workspaceRootOverrides.entries.where (
99+ (e) => productionDeps.contains (e.key),
100+ );
101+
102+ final overrides = < String , dynamic > {
103+ for (final pathDependency in pathDependencies)
104+ pathDependency.name: {
105+ 'path' : path.relative (pathDependency.path, from: projectDirectory),
106+ },
107+ for (final override in productionOverrides)
108+ '${override .key }' : override.value,
109+ };
110+
111+ writeDependencyOverrides (
94112 projectDirectory: projectDirectory,
95- pathDependencies : pathDependencies ,
113+ overrides : overrides ,
96114 );
97115}
98116
99- void writePathDependencyOverrides ({
117+ void writeDependencyOverrides ({
100118 required String projectDirectory,
101- required Iterable < PathDependency > pathDependencies ,
119+ required Map < String , dynamic > overrides ,
102120}) {
103121 final pubspecOverridesFile = File (
104122 path.join (projectDirectory, 'pubspec_overrides.yaml' ),
105123 );
106124 final contents = pubspecOverridesFile.readAsStringSync ();
107- final overrides = loadYaml (contents) as YamlMap ;
125+ final pubspecOverrides = loadYaml (contents) as YamlMap ;
108126 final editor = YamlEditor (contents);
109- if (! overrides .containsKey ('dependency_overrides' )) {
127+ if (! pubspecOverrides .containsKey ('dependency_overrides' )) {
110128 editor.update (['dependency_overrides' ], {});
111129 }
112- for (final package in pathDependencies ) {
130+ for (final override in overrides.entries ) {
113131 editor.update (
114- ['dependency_overrides' , package.name ],
115- { 'path' : path. relative (package.path, from : projectDirectory)} ,
132+ ['dependency_overrides' , override.key ],
133+ override.value ,
116134 );
117135 }
118136 pubspecOverridesFile.writeAsStringSync (editor.toString ());
@@ -130,6 +148,21 @@ String? getPackageName({required String projectDirectory}) {
130148 return name;
131149}
132150
151+ YamlMap getWorkspaceRootDependencyOverrides ({required String workspaceRoot}) {
152+ final pubspecOverridesFile = File (
153+ path.join (workspaceRoot, 'pubspec_overrides.yaml' ),
154+ );
155+ if (! pubspecOverridesFile.existsSync ()) return YamlMap ();
156+
157+ final pubspecOverrides = loadYaml (pubspecOverridesFile.readAsStringSync ());
158+ if (pubspecOverrides is ! YamlMap ) return YamlMap ();
159+
160+ final overrides = pubspecOverrides['dependency_overrides' ];
161+ if (overrides is ! YamlMap ) return YamlMap ();
162+
163+ return overrides;
164+ }
165+
133166/// Build a complete list of dependencies (direct and transitive).
134167Set <String > getProductionDependencies ({
135168 required String packageName,
0 commit comments