diff --git a/pkg/nnbd_migration/tool/src/package.dart b/pkg/nnbd_migration/tool/src/package.dart index 5b484fd4536c..517f874451f0 100644 --- a/pkg/nnbd_migration/tool/src/package.dart +++ b/pkg/nnbd_migration/tool/src/package.dart @@ -9,6 +9,24 @@ import 'dart:io'; import 'package:path/path.dart' as path; +/// Return a resolved path including the home directory in place of tilde +/// references. +String resolveTildePath(String originalPath) { + if (originalPath == null || !originalPath.startsWith('~/')) { + return originalPath; + } + + String homeDir; + + if (Platform.isWindows) { + homeDir = path.absolute(Platform.environment['USERPROFILE']); + } else { + homeDir = path.absolute(Platform.environment['HOME']); + } + + return path.join(homeDir, originalPath.substring(2)); +} + /// Returns the path to the SDK repository this script is a part of. final String thisSdkRepo = () { var maybeSdkRepoDir = Platform.script.toFilePath(); @@ -24,6 +42,14 @@ final String thisSdkRepo = () { Uri get thisSdkUri => Uri.file(thisSdkRepo); +/// Abstraction for an unmanaged package. +class ManualPackage extends Package { + ManualPackage(this.packagePath) : super(packagePath); + + @override + final String packagePath; +} + /// Abstraction for a package fetched via Github. class GitHubPackage extends Package { GitHubPackage(String name, [String label]) : super(name) { diff --git a/pkg/nnbd_migration/tool/trial_migration.dart b/pkg/nnbd_migration/tool/trial_migration.dart index 891a1fd1c1ed..93c8d79daf27 100644 --- a/pkg/nnbd_migration/tool/trial_migration.dart +++ b/pkg/nnbd_migration/tool/trial_migration.dart @@ -32,6 +32,15 @@ main(List args) async { help: 'Select the root of the SDK to analyze against for this run ' '(compiled with --nnbd). For example: ../../xcodebuild/DebugX64NNBD/dart-sdk'); + argParser.addMultiOption( + 'manual_packages', + abbr: 'm', + defaultsTo: [], + help: 'Run migration against packages in these directories. Does not ' + 'run pub get, any git commands, or any other preparation.', + splitCommas: true, + ); + argParser.addMultiOption( 'packages', abbr: 'p', @@ -75,9 +84,12 @@ main(List args) async { warnOnNoAssertions(); warnOnNoSdkNnbd(sdk); - List packages = (parsedArgs['packages'] as Iterable) - .map((n) => SdkPackage(n)) - .toList(growable: false); + List packages = [ + for (String package in parsedArgs['packages'] as Iterable) + SdkPackage(package), + for (String package in parsedArgs['manual_packages'] as Iterable) + ManualPackage(package), + ]; String categoryOfInterest = parsedArgs.rest.isEmpty ? null : parsedArgs.rest.single;