| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import '../base/file_system.dart'; |
| import 'migrate_utils.dart'; |
| |
| /// Data class that holds all results and generated directories from a computeMigration run. |
| /// |
| /// mergeResults, addedFiles, and deletedFiles includes the sets of files to be migrated while |
| /// the other members track the temporary sdk and generated app directories created by the tool. |
| /// |
| /// The compute function does not clean up the temp directories, as the directories may be reused, |
| /// so this must be done manually afterwards. |
| class MigrateResult { |
| /// Explicitly initialize the MigrateResult. |
| MigrateResult({ |
| required this.mergeResults, |
| required this.addedFiles, |
| required this.deletedFiles, |
| required this.tempDirectories, |
| required this.sdkDirs, |
| required this.mergeTypeMap, |
| required this.diffMap, |
| this.generatedBaseTemplateDirectory, |
| this.generatedTargetTemplateDirectory}); |
| |
| /// Creates a MigrateResult with all empty members. |
| MigrateResult.empty() |
| : mergeResults = <MergeResult>[], |
| addedFiles = <FilePendingMigration>[], |
| deletedFiles = <FilePendingMigration>[], |
| tempDirectories = <Directory>[], |
| mergeTypeMap = <String, MergeType>{}, |
| diffMap = <String, DiffResult>{}, |
| sdkDirs = <String, Directory>{}; |
| |
| /// The results of merging existing files with the target files. |
| final List<MergeResult> mergeResults; |
| |
| /// Tracks the files that are to be newly added to the project. |
| final List<FilePendingMigration> addedFiles; |
| |
| /// Tracks the files that are to be deleted from the project. |
| final List<FilePendingMigration> deletedFiles; |
| |
| /// Tracks the temporary directories created during the migrate compute process. |
| final List<Directory> tempDirectories; |
| |
| /// Mapping between the local path of a file and the type of merge that should be used. |
| final Map<String, MergeType> mergeTypeMap; |
| |
| /// Mapping between the local path of a file and the diff between the base and target |
| /// versions of the file. |
| final Map<String, DiffResult> diffMap; |
| |
| /// The root directory of the base app. |
| Directory? generatedBaseTemplateDirectory; |
| |
| /// The root directory of the target app. |
| Directory? generatedTargetTemplateDirectory; |
| |
| /// The root directories of the Flutter SDK for each revision. |
| Map<String, Directory> sdkDirs; |
| } |
| |
| /// Defines available merge techniques. |
| enum MergeType { |
| /// A standard three-way merge. |
| threeWay, |
| /// A two way merge that ignores the base version of the file. |
| twoWay, |
| /// A `CustomMerge` manually handles the merge. |
| custom, |
| } |
| |
| /// Stores a file that has been marked for migration and metadata about the file. |
| class FilePendingMigration { |
| FilePendingMigration(this.localPath, this.file); |
| String localPath; |
| File file; |
| } |