Skip to content

Commit a9daf58

Browse files
authored
Reland "Load parent package config" (flutter#153754)
Reverts flutter#153752 Relands flutter#150850 Now with attached g3fix
1 parent 990b80a commit a9daf58

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+613
-391
lines changed

packages/flutter_tools/bin/fuchsia_asset_builder.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import 'package:flutter_tools/src/bundle.dart';
1414
import 'package:flutter_tools/src/bundle_builder.dart';
1515
import 'package:flutter_tools/src/cache.dart';
1616
import 'package:flutter_tools/src/context_runner.dart';
17+
import 'package:flutter_tools/src/dart/package_map.dart';
1718
import 'package:flutter_tools/src/globals.dart' as globals;
1819
import 'package:flutter_tools/src/reporting/reporting.dart';
1920

@@ -44,7 +45,7 @@ Future<void> writeAssetFile(libfs.File outputFile, AssetBundleEntry asset) async
4445

4546
Future<void> run(List<String> args) async {
4647
final ArgParser parser = ArgParser()
47-
..addOption(_kOptionPackages, help: 'The .packages file')
48+
..addOption(_kOptionPackages, help: 'The .dart_tool/package_config file')
4849
..addOption(_kOptionAsset,
4950
help: 'The directory where to put temporary files')
5051
..addOption(_kOptionManifest, help: 'The manifest file')
@@ -63,7 +64,8 @@ Future<void> run(List<String> args) async {
6364
final AssetBundle? assets = await buildAssets(
6465
manifestPath: argResults[_kOptionManifest] as String? ?? defaultManifestPath,
6566
assetDirPath: assetDir,
66-
packagesPath: argResults[_kOptionPackages] as String?,
67+
packageConfigPath: argResults[_kOptionPackages] as String? ??
68+
findPackageConfigFileOrDefault(globals.fs.currentDirectory).path,
6769
targetPlatform: TargetPlatform.fuchsia_arm64 // This is not arch specific.
6870
);
6971

packages/flutter_tools/lib/src/asset.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ abstract class AssetBundle {
125125
/// Returns 0 for success; non-zero for failure.
126126
Future<int> build({
127127
String manifestPath = defaultManifestPath,
128-
required String packagesPath,
128+
required String packageConfigPath,
129129
bool deferredComponentsEnabled = false,
130130
TargetPlatform? targetPlatform,
131131
String? flavor,
@@ -246,7 +246,7 @@ class ManifestAssetBundle implements AssetBundle {
246246
Future<int> build({
247247
String manifestPath = defaultManifestPath,
248248
FlutterProject? flutterProject,
249-
required String packagesPath,
249+
required String packageConfigPath,
250250
bool deferredComponentsEnabled = false,
251251
TargetPlatform? targetPlatform,
252252
String? flavor,
@@ -293,7 +293,7 @@ class ManifestAssetBundle implements AssetBundle {
293293
}
294294

295295
final String assetBasePath = _fileSystem.path.dirname(_fileSystem.path.absolute(manifestPath));
296-
final File packageConfigFile = _fileSystem.file(packagesPath);
296+
final File packageConfigFile = _fileSystem.file(packageConfigPath);
297297
inputFiles.add(packageConfigFile);
298298
final PackageConfig packageConfig = await loadPackageConfigWithLogging(
299299
packageConfigFile,

packages/flutter_tools/lib/src/build_system/build_system.dart

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ class Environment {
334334
/// [engineVersion] should be set to null for local engine builds.
335335
factory Environment({
336336
required Directory projectDir,
337+
required String packageConfigPath,
337338
required Directory outputDir,
338339
required Directory cacheDir,
339340
required Directory flutterRootDir,
@@ -374,6 +375,7 @@ class Environment {
374375
return Environment._(
375376
outputDir: outputDir,
376377
projectDir: projectDir,
378+
packageConfigPath: packageConfigPath,
377379
buildDir: buildDirectory,
378380
rootBuildDir: rootBuildDir,
379381
cacheDir: cacheDir,
@@ -398,6 +400,7 @@ class Environment {
398400
@visibleForTesting
399401
factory Environment.test(Directory testDirectory, {
400402
Directory? projectDir,
403+
String? packageConfigPath,
401404
Directory? outputDir,
402405
Directory? cacheDir,
403406
Directory? flutterRootDir,
@@ -416,6 +419,7 @@ class Environment {
416419
}) {
417420
return Environment(
418421
projectDir: projectDir ?? testDirectory,
422+
packageConfigPath: packageConfigPath ?? '.dart_tool/package_config.json',
419423
outputDir: outputDir ?? testDirectory,
420424
cacheDir: cacheDir ?? testDirectory,
421425
flutterRootDir: flutterRootDir ?? testDirectory,
@@ -437,6 +441,7 @@ class Environment {
437441
Environment._({
438442
required this.outputDir,
439443
required this.projectDir,
444+
required this.packageConfigPath,
440445
required this.buildDir,
441446
required this.rootBuildDir,
442447
required this.cacheDir,
@@ -457,6 +462,11 @@ class Environment {
457462
/// The [Source] value which is substituted with the path to [projectDir].
458463
static const String kProjectDirectory = '{PROJECT_DIR}';
459464

465+
/// The [Source] value which is substituted with the path to the directory
466+
/// that contains `.dart_tool/package_config.json1`.
467+
/// That is the grand-parent of [BuildInfo.packageConfigPath].
468+
static const String kWorkspaceDirectory = '{WORKSPACE_DIR}';
469+
460470
/// The [Source] value which is substituted with the path to [buildDir].
461471
static const String kBuildDirectory = '{BUILD_DIR}';
462472

@@ -475,10 +485,16 @@ class Environment {
475485
/// can be located.
476486
final Directory projectDir;
477487

488+
/// The path to the package configuration file to use for compilation.
489+
///
490+
/// This is used by package:package_config to locate the actual package_config.json
491+
/// file. If not provided, defaults to `.dart_tool/package_config.json`.
492+
final String packageConfigPath;
493+
478494
/// The `BUILD_DIR` environment variable.
479495
///
480496
/// The root of the output directory where build step intermediates and
481-
/// outputs are written. Current usages of assemble configure ths to be
497+
/// outputs are written. Current usages of assemble configure this to be
482498
/// a unique directory under `.dart_tool/flutter_build`, though it can
483499
/// be placed anywhere. The uniqueness is only enforced by callers, and
484500
/// is currently done by hashing the build configuration.

packages/flutter_tools/lib/src/build_system/source.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,12 @@ class SourceVisitor implements ResolvedFiles {
9999
// flutter root will not contain a symbolic link.
100100
Environment.kFlutterRootDirectory => environment.flutterRootDir.absolute.path,
101101
Environment.kProjectDirectory => environment.projectDir.resolveSymbolicLinksSync(),
102+
Environment.kWorkspaceDirectory =>
103+
environment.fileSystem.path.dirname(
104+
environment.fileSystem.path.dirname(
105+
environment.packageConfigPath,
106+
),
107+
),
102108
Environment.kBuildDirectory => environment.buildDir.resolveSymbolicLinksSync(),
103109
Environment.kCacheDirectory => environment.cacheDir.resolveSymbolicLinksSync(),
104110
Environment.kOutputDirectory => environment.outputDir.resolveSymbolicLinksSync(),

packages/flutter_tools/lib/src/build_system/targets/assets.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import '../../base/file_system.dart';
1111
import '../../base/logger.dart';
1212
import '../../build_info.dart';
1313
import '../../convert.dart';
14+
import '../../dart/package_map.dart';
1415
import '../../devfs.dart';
1516
import '../../flutter_manifest.dart';
1617
import '../build_system.dart';
@@ -60,7 +61,7 @@ Future<Depfile> copyAssets(
6061
).createBundle();
6162
final int resultCode = await assetBundle.build(
6263
manifestPath: pubspecFile.path,
63-
packagesPath: environment.projectDir.childFile('.packages').path,
64+
packageConfigPath: findPackageConfigFileOrDefault(environment.projectDir).path,
6465
deferredComponentsEnabled: environment.defines[kDeferredComponents] == 'true',
6566
targetPlatform: targetPlatform,
6667
flavor: flavor,

packages/flutter_tools/lib/src/build_system/targets/common.dart

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,7 @@ class KernelSnapshotProgram extends Target {
181181
}
182182
final BuildMode buildMode = BuildMode.fromCliName(buildModeEnvironment);
183183
final String targetFile = environment.defines[kTargetFile] ?? environment.fileSystem.path.join('lib', 'main.dart');
184-
final File packagesFile = environment.projectDir
185-
.childDirectory('.dart_tool')
186-
.childFile('package_config.json');
184+
final File packagesFile = findPackageConfigFileOrDefault(environment.projectDir);
187185
final String targetFileAbsolute = environment.fileSystem.file(targetFile).absolute.path;
188186
// everything besides 'false' is considered to be enabled.
189187
final bool trackWidgetCreation = environment.defines[kTrackWidgetCreation] != 'false';
@@ -340,9 +338,7 @@ class KernelSnapshotNativeAssets extends Target {
340338
throw MissingDefineException(kTargetPlatform, 'kernel_snapshot');
341339
}
342340
final BuildMode buildMode = BuildMode.fromCliName(buildModeEnvironment);
343-
final File packagesFile = environment.projectDir
344-
.childDirectory('.dart_tool')
345-
.childFile('package_config.json');
341+
final File packageConfigFile = findPackageConfigFileOrDefault(environment.projectDir);
346342

347343
final TargetPlatform targetPlatform = getTargetPlatformForName(targetPlatformEnvironment);
348344

@@ -355,7 +351,7 @@ class KernelSnapshotNativeAssets extends Target {
355351
environment.logger.printTrace('Embedding native assets mapping $nativeAssets in kernel.');
356352

357353
final PackageConfig packageConfig = await loadPackageConfigWithLogging(
358-
packagesFile,
354+
packageConfigFile,
359355
logger: environment.logger,
360356
);
361357

@@ -371,7 +367,7 @@ class KernelSnapshotNativeAssets extends Target {
371367
buildMode: buildMode,
372368
trackWidgetCreation: false,
373369
outputFilePath: dillPath,
374-
packagesPath: packagesFile.path,
370+
packagesPath: packageConfigFile.path,
375371
frontendServerStarterPath: frontendServerStarterPath,
376372
packageConfig: packageConfig,
377373
buildDir: environment.buildDir,

packages/flutter_tools/lib/src/build_system/targets/dart_plugin_registrant.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,9 @@ class DartPluginRegistrantTarget extends Target {
3131
assert(environment.generateDartPluginRegistry);
3232
final FlutterProject project = _project
3333
?? FlutterProject.fromDirectory(environment.projectDir);
34+
final File packageConfigFile = findPackageConfigFileOrDefault(environment.projectDir);
3435
final PackageConfig packageConfig = await loadPackageConfigWithLogging(
35-
project.packageConfigFile,
36+
packageConfigFile,
3637
logger: environment.logger,
3738
);
3839
final String targetFilePath = environment.defines[kTargetFile] ??
@@ -73,7 +74,7 @@ class DartPluginRegistrantTarget extends Target {
7374

7475
@override
7576
List<Source> get inputs => <Source>[
76-
const Source.pattern('{PROJECT_DIR}/.dart_tool/package_config_subset'),
77+
const Source.pattern('{WORKSPACE_DIR}/.dart_tool/package_config_subset'),
7778
];
7879

7980
@override

packages/flutter_tools/lib/src/build_system/targets/native_assets.dart

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,15 @@ class NativeAssets extends Target {
6464
}
6565
final TargetPlatform targetPlatform = getTargetPlatformForName(targetPlatformEnvironment);
6666
final Uri projectUri = environment.projectDir.uri;
67-
final File packagesFile = fileSystem
68-
.directory(projectUri)
69-
.childDirectory('.dart_tool')
70-
.childFile('package_config.json');
67+
7168
final PackageConfig packageConfig = await loadPackageConfigWithLogging(
72-
packagesFile,
69+
fileSystem.file(environment.packageConfigPath),
7370
logger: environment.logger,
7471
);
7572
final NativeAssetsBuildRunner buildRunner = _buildRunner ??
7673
NativeAssetsBuildRunnerImpl(
7774
projectUri,
75+
environment.packageConfigPath,
7876
packageConfig,
7977
fileSystem,
8078
environment.logger,
@@ -380,7 +378,7 @@ class NativeAssets extends Target {
380378
List<Source> get inputs => const <Source>[
381379
Source.pattern('{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/targets/native_assets.dart'),
382380
// If different packages are resolved, different native assets might need to be built.
383-
Source.pattern('{PROJECT_DIR}/.dart_tool/package_config_subset'),
381+
Source.pattern('{WORKSPACE_DIR}/.dart_tool/package_config_subset'),
384382
// TODO(mosuem): Should consume resources.json. https://github.com/flutter/flutter/issues/146263
385383
];
386384

packages/flutter_tools/lib/src/build_system/targets/web.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,10 @@ class WebEntrypointTarget extends Target {
5454
Future<void> build(Environment environment) async {
5555
final String? targetFile = environment.defines[kTargetFile];
5656
final Uri importUri = environment.fileSystem.file(targetFile).absolute.uri;
57-
// TODO(zanderso): support configuration of this file.
58-
const String packageFile = '.packages';
57+
final File packageConfigFile = findPackageConfigFileOrDefault(environment.projectDir);
58+
5959
final PackageConfig packageConfig = await loadPackageConfigWithLogging(
60-
environment.fileSystem.file(packageFile),
60+
packageConfigFile,
6161
logger: environment.logger,
6262
);
6363
final FlutterProject flutterProject = FlutterProject.current();
@@ -129,7 +129,7 @@ abstract class Dart2WebTarget extends Target {
129129
compilerSnapshot,
130130
const Source.artifact(Artifact.engineDartBinary),
131131
const Source.pattern('{BUILD_DIR}/main.dart'),
132-
const Source.pattern('{PROJECT_DIR}/.dart_tool/package_config_subset'),
132+
const Source.pattern('{WORKSPACE_DIR}/.dart_tool/package_config_subset'),
133133
];
134134

135135
@override
@@ -188,7 +188,7 @@ class Dart2JSTarget extends Dart2WebTarget {
188188
...compilerConfig.toSharedCommandOptions(buildMode),
189189
'-o',
190190
environment.buildDir.childFile('app.dill').path,
191-
'--packages=.dart_tool/package_config.json',
191+
'--packages=${findPackageConfigFileOrDefault(environment.projectDir).path}',
192192
'--cfe-only',
193193
environment.buildDir.childFile('main.dart').path, // dartfile
194194
];
@@ -302,7 +302,7 @@ class Dart2WasmTarget extends Dart2WebTarget {
302302
artifacts.getArtifactPath(Artifact.engineDartBinary, platform: TargetPlatform.web_javascript),
303303
'compile',
304304
'wasm',
305-
'--packages=.dart_tool/package_config.json',
305+
'--packages=${findPackageConfigFileOrDefault(environment.projectDir).path}',
306306
'--extra-compiler-option=--platform=$platformFilePath',
307307
'--extra-compiler-option=--delete-tostring-package-uri=dart:ui',
308308
'--extra-compiler-option=--delete-tostring-package-uri=package:flutter',

packages/flutter_tools/lib/src/bundle_builder.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class BundleBuilder {
5555
// If the precompiled flag was not passed, force us into debug mode.
5656
final Environment environment = Environment(
5757
projectDir: project.directory,
58+
packageConfigPath: buildInfo.packageConfigPath,
5859
outputDir: globals.fs.directory(assetDirPath),
5960
buildDir: project.dartTool.childDirectory('flutter_build'),
6061
cacheDir: globals.cache.getRoot(),
@@ -115,18 +116,17 @@ class BundleBuilder {
115116
Future<AssetBundle?> buildAssets({
116117
required String manifestPath,
117118
String? assetDirPath,
118-
String? packagesPath,
119+
required String packageConfigPath,
119120
TargetPlatform? targetPlatform,
120121
String? flavor,
121122
}) async {
122123
assetDirPath ??= getAssetBuildDirectory();
123-
packagesPath ??= globals.fs.path.absolute('.packages');
124124

125125
// Build the asset bundle.
126126
final AssetBundle assetBundle = AssetBundleFactory.instance.createBundle();
127127
final int result = await assetBundle.build(
128128
manifestPath: manifestPath,
129-
packagesPath: packagesPath,
129+
packageConfigPath: packageConfigPath,
130130
targetPlatform: targetPlatform,
131131
flavor: flavor,
132132
);

0 commit comments

Comments
 (0)