| // Copyright 2016 The Chromium 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 'asset.dart'; |
| import 'base/file_system.dart'; |
| import 'dart/dependencies.dart'; |
| import 'globals.dart'; |
| |
| class DependencyChecker { |
| final DartDependencySetBuilder builder; |
| final Set<String> _dependencies = new Set<String>(); |
| final AssetBundle assets; |
| DependencyChecker(this.builder, this.assets); |
| |
| /// Returns [true] if any components have been modified after [threshold] or |
| /// if it cannot be determined. |
| bool check(DateTime threshold) { |
| _dependencies.clear(); |
| // Build the set of Dart dependencies. |
| try { |
| _dependencies.addAll(builder.build()); |
| } catch (e, st) { |
| printTrace('DependencyChecker: error determining .dart dependencies:\n$e\n$st'); |
| return true; |
| } |
| // TODO(johnmccutchan): Extract dependencies from the AssetBundle too. |
| |
| // Check all dependency modification times. |
| for (String path in _dependencies) { |
| final File file = fs.file(path); |
| final FileStat stat = file.statSync(); |
| if (stat.type == FileSystemEntityType.notFound) { |
| printTrace('DependencyChecker: Error stating $path.'); |
| return true; |
| } |
| if (stat.modified.isAfter(threshold)) { |
| printTrace('DependencyChecker: $path is newer than $threshold'); |
| return true; |
| } |
| } |
| printTrace('DependencyChecker: nothing is modified after $threshold.'); |
| return false; |
| } |
| } |