diff --git a/build_runner_core/lib/src/asset_graph/graph.dart b/build_runner_core/lib/src/asset_graph/graph.dart index 946eaf49b..e30fbe4f8 100644 --- a/build_runner_core/lib/src/asset_graph/graph.dart +++ b/build_runner_core/lib/src/asset_graph/graph.dart @@ -276,32 +276,6 @@ class AssetGraph { Iterable get sources => allNodes.whereType().map((n) => n.id); - Future> checkForChanges( - List buildPhases, - String rootPackage, - Future Function(AssetId id) delete, - AssetReader digestReader, - ) async { - final result = {}; - for (final node in allNodes) { - print('Check $node'); - final oldDigest = node.lastKnownDigest; - await digestReader.cache.invalidate([node.id]); - if (await digestReader.canRead(node.id)) { - print(' readable'); - final newDigest = await digestReader.digest(node.id); - print(' $oldDigest -> $newDigest'); - if (oldDigest != newDigest) { - result[node.id] = ChangeType.MODIFY; - } - } else { - print(' not readable'); - result[node.id] = ChangeType.REMOVE; - } - } - return result; - } - /// Updates graph structure, invalidating and deleting any outputs that were /// affected. /// @@ -313,7 +287,7 @@ class AssetGraph { Future Function(AssetId id) delete, AssetReader digestReader, ) async { - print('Updating graph! ${StackTrace.current}'); + print('Updating graph! ${StackTrace.current} from $updates'); var newIds = {}; var modifyIds = {}; var removeIds = {}; @@ -429,6 +403,8 @@ class AssetGraph { _removeRecursive(id); } + print('Returning: $invalidatedIds'); + return invalidatedIds; } diff --git a/build_runner_core/lib/src/generate/build_definition.dart b/build_runner_core/lib/src/generate/build_definition.dart index 8a66f1f4c..1a7a77107 100644 --- a/build_runner_core/lib/src/generate/build_definition.dart +++ b/build_runner_core/lib/src/generate/build_definition.dart @@ -38,7 +38,7 @@ final _logger = Logger('BuildDefinition'); class BuildDefinition { final AssetGraph assetGraph; - final Map? updates; + Map? updates; final TargetGraph targetGraph; final AssetReader reader; @@ -134,6 +134,7 @@ class AssetTracker { Set internalSources, AssetGraph assetGraph, ) async { + print('compute source updates'); final allSources = {} ..addAll(inputSources) @@ -173,6 +174,7 @@ class AssetTracker { if (originalDigest == null) return; await _reader.cache.invalidate([id]); var currentDigest = await _reader.digest(id); + print('$id $originalDigest -> $currentDigest'); if (currentDigest != originalDigest) { updates[id] = ChangeType.MODIFY; } @@ -554,7 +556,8 @@ class _Loader { assetGraph, ); updates.addAll(_computeBuilderOptionsUpdates(assetGraph, buildPhases)); - await assetGraph.updateAndInvalidate( + // build_impl also wants to do this, and uses the results + /*await assetGraph.updateAndInvalidate( _buildPhases, updates, _options.packageGraph.root.name, @@ -566,7 +569,7 @@ class _Loader { _environment.reader, assetGraph, ), - ); + );*/ return updates; } diff --git a/build_runner_core/lib/src/generate/build_impl.dart b/build_runner_core/lib/src/generate/build_impl.dart index ed22f1f77..979c61983 100644 --- a/build_runner_core/lib/src/generate/build_impl.dart +++ b/build_runner_core/lib/src/generate/build_impl.dart @@ -96,7 +96,9 @@ class BuildImpl { _resourceManager = buildDefinition.resourceManager, _environment = buildDefinition.environment, _trackPerformance = options.trackPerformance, - _logPerformanceDir = options.logPerformanceDir; + _logPerformanceDir = options.logPerformanceDir { + buildDefinition.updates = null; + } Future run( Map updates, { @@ -827,7 +829,10 @@ class _SingleBuild { final inputs = firstNode.inputs; void compareResult(bool expectedResult) { - final myResult = invalidated == null || invalidated.any(inputs.contains); + final reallyInvalidated = invalidated!.difference( + unchangedGeneratedNodes, + ); + final myResult = reallyInvalidated.any(inputs.contains); print(''' _buildShouldRun $inputs -> $outputs @@ -982,6 +987,8 @@ invalidated: $invalidated return Digest(combinedBytes); } + Set unchangedGeneratedNodes = {}; + /// Sets the state for all [outputs] of a build step, by: /// /// - Setting `needsUpdate` to `false` for each output @@ -1026,6 +1033,7 @@ invalidated: $invalidated // time a node might not be in a valid state. _removeOldInputs(node, usedInputs); _addNewInputs(node, usedInputs); + if (node.lastKnownDigest == digest) unchangedGeneratedNodes.add(node.id); node ..state = NodeState.upToDate ..wasOutput = wasOutput