From 4f72e971315e4702bc2b119309fc13c6c4a221f8 Mon Sep 17 00:00:00 2001 From: Alexander Campbell Date: Fri, 8 Mar 2024 11:33:22 -0600 Subject: [PATCH] generateRunScript: address code review comments --- lib/src/executable.dart | 13 +++++++++++-- lib/src/tools/clean_tool.dart | 4 ++++ lib/src/utils/dart_dev_paths.dart | 2 ++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/src/executable.dart b/lib/src/executable.dart index ed54d3ab..0dc50c13 100644 --- a/lib/src/executable.dart +++ b/lib/src/executable.dart @@ -4,6 +4,7 @@ import 'dart:io'; import 'package:analyzer/dart/analysis/utilities.dart'; import 'package:args/command_runner.dart'; +import 'package:collection/collection.dart'; import 'package:crypto/crypto.dart'; import 'package:dart_dev/dart_dev.dart'; import 'package:glob/glob.dart'; @@ -145,14 +146,19 @@ List generateRunScript() { return; } + // Include the packageConfig so that when dependencies change, we recompile. + final packageConfig = File(_paths.packageConfig); + final digest = md5.convert([ + ...packageConfig.readAsBytesSync(), if (configFile.existsSync()) ...configFile.readAsBytesSync(), if (configHasRelativeImports) for (final file in Glob('tool/**.dart', recursive: true) .listSync() .whereType() .where( - (f) => p.canonicalize(f.path) != p.canonicalize(_paths.config))) + (f) => p.canonicalize(f.path) != p.canonicalize(_paths.config)) + .sortedBy((f) => f.path)) ...file.readAsBytesSync(), ]); encodedDigest = base64.encode(digest.bytes); @@ -162,7 +168,10 @@ List generateRunScript() { (!runExecutableDigest.existsSync() || runExecutableDigest.readAsStringSync() != encodedDigest)) { // Digest is missing or outdated, so we (re-)compile. - logTimedSync(log, 'Compiling run script', () { + final logMessage = runExecutable.existsSync() + ? 'Recompiling run script (digest changed)' + : 'Compiling run script'; + logTimedSync(log, logMessage, () { // Delete the previous executable and digest so that if we hit a failure // trying to compile, we don't leave the outdated one in place. if (runExecutable.existsSync()) runExecutable.deleteSync(); diff --git a/lib/src/tools/clean_tool.dart b/lib/src/tools/clean_tool.dart index 4a48f888..46a184b9 100644 --- a/lib/src/tools/clean_tool.dart +++ b/lib/src/tools/clean_tool.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:io'; +import 'package:dart_dev/src/utils/logging.dart'; import 'package:io/io.dart'; import '../dart_dev_tool.dart'; @@ -14,7 +15,10 @@ class CleanTool extends DevTool { FutureOr run([DevToolExecutionContext? context]) { final cache = Directory(DartDevPaths().cache()); if (cache.existsSync()) { + log.info('Deleting ${cache.path}'); cache.deleteSync(recursive: true); + } else { + log.info('Nothing to do: no ${cache.path} found'); } return ExitCode.success.code; } diff --git a/lib/src/utils/dart_dev_paths.dart b/lib/src/utils/dart_dev_paths.dart index 3da0324c..d6e1e291 100644 --- a/lib/src/utils/dart_dev_paths.dart +++ b/lib/src/utils/dart_dev_paths.dart @@ -25,6 +25,8 @@ class DartDevPaths { from: p.url.absolute(_cacheForDart), ); + String get packageConfig => _context.join('.dart_tool', 'package_config.json'); + String get legacyConfig => _context.join('tool', 'dev.dart'); String get runScript => cache('run.dart');