Unverified Commit d03aecab authored by stuartmorgan's avatar stuartmorgan Committed by GitHub

Add an ephemeral directory for Linux (#40587)

Moves the generated config into that directory. Matches the structure of
the other desktop projects.

Also fixes #40265
parent 0df1594b
...@@ -37,7 +37,7 @@ or ...@@ -37,7 +37,7 @@ or
String cacheDirectory; String cacheDirectory;
switch (targetPlatform) { switch (targetPlatform) {
case 'linux-x64': case 'linux-x64':
cacheDirectory = 'linux/flutter'; cacheDirectory = 'linux/flutter/ephemeral';
break; break;
case 'windows-x64': case 'windows-x64':
cacheDirectory = 'windows/flutter/ephemeral'; cacheDirectory = 'windows/flutter/ephemeral';
......
...@@ -51,9 +51,15 @@ class CleanCommand extends FlutterCommand { ...@@ -51,9 +51,15 @@ class CleanCommand extends FlutterCommand {
final Directory iosEphemeralDirectory = flutterProject.ios.ephemeralDirectory; final Directory iosEphemeralDirectory = flutterProject.ios.ephemeralDirectory;
deleteFile(iosEphemeralDirectory); deleteFile(iosEphemeralDirectory);
final Directory linuxEphemeralDirectory = flutterProject.linux.ephemeralDirectory;
deleteFile(linuxEphemeralDirectory);
final Directory macosEphemeralDirectory = flutterProject.macos.ephemeralDirectory; final Directory macosEphemeralDirectory = flutterProject.macos.ephemeralDirectory;
deleteFile(macosEphemeralDirectory); deleteFile(macosEphemeralDirectory);
final Directory windowsEphemeralDirectory = flutterProject.windows.ephemeralDirectory;
deleteFile(windowsEphemeralDirectory);
return const FlutterCommandResult(ExitStatus.success); return const FlutterCommandResult(ExitStatus.success);
} }
......
...@@ -34,7 +34,7 @@ export PROJECT_DIR=${linuxProject.project.directory.path} ...@@ -34,7 +34,7 @@ export PROJECT_DIR=${linuxProject.project.directory.path}
} }
/// Cache flutter configuration files in the linux directory. /// Cache flutter configuration files in the linux directory.
linuxProject.cacheDirectory.childFile('generated_config') linuxProject.generatedMakeConfigFile
..createSync(recursive: true) ..createSync(recursive: true)
..writeAsStringSync(buffer.toString()); ..writeAsStringSync(buffer.toString());
...@@ -52,7 +52,7 @@ export PROJECT_DIR=${linuxProject.project.directory.path} ...@@ -52,7 +52,7 @@ export PROJECT_DIR=${linuxProject.project.directory.path}
final Process process = await processManager.start(<String>[ final Process process = await processManager.start(<String>[
'make', 'make',
'-C', '-C',
linuxProject.editableHostAppDirectory.path, linuxProject.makeFile.parent.path,
], runInShell: true); ], runInShell: true);
final Status status = logger.startProgress( final Status status = logger.startProgress(
'Building Linux application...', 'Building Linux application...',
......
...@@ -795,16 +795,26 @@ class LinuxProject { ...@@ -795,16 +795,26 @@ class LinuxProject {
final FlutterProject project; final FlutterProject project;
Directory get editableHostAppDirectory => project.directory.childDirectory('linux'); Directory get _editableDirectory => project.directory.childDirectory('linux');
// TODO(stuartmorgan): Move to using an ephemeralDirectory to match the other /// The directory in the project that is managed by Flutter. As much as
// desktop projects. /// possible, files that are edited by Flutter tooling after initial project
Directory get cacheDirectory => editableHostAppDirectory.childDirectory('flutter'); /// creation should live here.
Directory get managedDirectory => _editableDirectory.childDirectory('flutter');
bool existsSync() => editableHostAppDirectory.existsSync(); /// The subdirectory of [managedDirectory] that contains files that are
/// generated on the fly. All generated files that are not intended to be
/// checked in should live here.
Directory get ephemeralDirectory => managedDirectory.childDirectory('ephemeral');
bool existsSync() => _editableDirectory.existsSync();
/// The Linux project makefile. /// The Linux project makefile.
File get makeFile => editableHostAppDirectory.childFile('Makefile'); File get makeFile => _editableDirectory.childFile('Makefile');
/// Contains definitions for FLUTTER_ROOT, LOCAL_ENGINE, and more flags for
/// the build.
File get generatedMakeConfigFile => ephemeralDirectory.childFile('generated_config.mk');
} }
/// The Fuchisa sub project /// The Fuchisa sub project
......
...@@ -100,7 +100,7 @@ void main() { ...@@ -100,7 +100,7 @@ void main() {
await createTestCommandRunner(command).run( await createTestCommandRunner(command).run(
const <String>['build', 'linux'] const <String>['build', 'linux']
); );
expect(fs.file('linux/flutter/generated_config').existsSync(), true); expect(fs.file('linux/flutter/ephemeral/generated_config.mk').existsSync(), true);
}, overrides: <Type, Generator>{ }, overrides: <Type, Generator>{
FileSystem: () => MemoryFileSystem(), FileSystem: () => MemoryFileSystem(),
ProcessManager: () => mockProcessManager, ProcessManager: () => mockProcessManager,
......
...@@ -41,7 +41,9 @@ void main() { ...@@ -41,7 +41,9 @@ void main() {
projectUnderTest.dartTool.createSync(recursive: true); projectUnderTest.dartTool.createSync(recursive: true);
projectUnderTest.android.ephemeralDirectory.createSync(recursive: true); projectUnderTest.android.ephemeralDirectory.createSync(recursive: true);
projectUnderTest.ios.ephemeralDirectory.createSync(recursive: true); projectUnderTest.ios.ephemeralDirectory.createSync(recursive: true);
projectUnderTest.linux.ephemeralDirectory.createSync(recursive: true);
projectUnderTest.macos.ephemeralDirectory.createSync(recursive: true); projectUnderTest.macos.ephemeralDirectory.createSync(recursive: true);
projectUnderTest.windows.ephemeralDirectory.createSync(recursive: true);
}); });
group(CleanCommand, () { group(CleanCommand, () {
...@@ -53,7 +55,9 @@ void main() { ...@@ -53,7 +55,9 @@ void main() {
expect(projectUnderTest.dartTool.existsSync(), isFalse); expect(projectUnderTest.dartTool.existsSync(), isFalse);
expect(projectUnderTest.android.ephemeralDirectory.existsSync(), isFalse); expect(projectUnderTest.android.ephemeralDirectory.existsSync(), isFalse);
expect(projectUnderTest.ios.ephemeralDirectory.existsSync(), isFalse); expect(projectUnderTest.ios.ephemeralDirectory.existsSync(), isFalse);
expect(projectUnderTest.linux.ephemeralDirectory.existsSync(), isFalse);
expect(projectUnderTest.macos.ephemeralDirectory.existsSync(), isFalse); expect(projectUnderTest.macos.ephemeralDirectory.existsSync(), isFalse);
expect(projectUnderTest.windows.ephemeralDirectory.existsSync(), isFalse);
verify(xcodeProjectInterpreter.cleanWorkspace(any, 'Runner')).called(2); verify(xcodeProjectInterpreter.cleanWorkspace(any, 'Runner')).called(2);
}, overrides: <Type, Generator>{ }, overrides: <Type, Generator>{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment