Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(816)

Unified Diff: tool/patch_sdk.dart

Issue 1327573002: make build_sdk more incremental (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« lib/src/compiler.dart ('K') | « tool/build_sdk.sh ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tool/patch_sdk.dart
diff --git a/tool/patch_sdk.dart b/tool/patch_sdk.dart
index 276d5fd53e94a4a91914298fcacbe83f8cff3262..e8bc7409ef59495f084ba5790cf062e86ac397de 100755
--- a/tool/patch_sdk.dart
+++ b/tool/patch_sdk.dart
@@ -8,6 +8,7 @@
library dev_compiler.tool.patch_sdk;
import 'dart:io';
+import 'dart:math' as math;
import 'package:analyzer/analyzer.dart';
import 'package:analyzer/src/generated/sdk.dart';
@@ -72,17 +73,21 @@ void main(List<String> argv) {
var libraryFile = new File(libraryIn);
if (libraryFile.existsSync()) {
- var contents = <String>[];
- var paths = <String>[];
+ var outPaths = <String>[libraryOut];
var libraryContents = libraryFile.readAsStringSync();
- paths.add(libraryOut);
- contents.add(libraryContents);
+
+ int inputModifyTime =
+ libraryFile.lastModifiedSync().millisecondsSinceEpoch;
+ var partFiles = <File>[];
for (var part in parseDirectives(libraryContents).directives) {
if (part is PartDirective) {
var partPath = part.uri.stringValue;
- paths.add(path.join(path.dirname(libraryOut), partPath));
- contents.add(new File(path.join(path.dirname(libraryIn), partPath))
- .readAsStringSync());
+ outPaths.add(path.join(path.dirname(libraryOut), partPath));
+
+ var partFile = new File(path.join(path.dirname(libraryIn), partPath));
+ partFiles.add(partFile);
+ inputModifyTime = math.max(inputModifyTime,
+ partFile.lastModifiedSync().millisecondsSinceEpoch);
}
}
@@ -90,14 +95,41 @@ void main(List<String> argv) {
var patchPath = path.join(
patchIn, path.basenameWithoutExtension(libraryIn) + '_patch.dart');
- if (new File(patchPath).existsSync()) {
- var patchContents = new File(patchPath).readAsStringSync();
- contents = _patchLibrary(contents, patchContents);
+ var patchFile = new File(patchPath);
+ bool patchExists = patchFile.existsSync();
+ if (patchExists) {
+ inputModifyTime = math.max(inputModifyTime,
+ patchFile.lastModifiedSync().millisecondsSinceEpoch);
+ }
+
+ // Compute output paths
+ outPaths = outPaths
+ .map((p) => path.join(sdkOut, path.relative(p, from: sdkLibIn)))
+ .toList();
+
+ // Compare output modify time with input modify time.
+ bool needsUpdate = false;
+ for (var outPath in outPaths) {
+ var outFile = new File(outPath);
+ if (!outFile.existsSync() ||
+ outFile.lastModifiedSync().millisecondsSinceEpoch <
+ inputModifyTime) {
+ needsUpdate = true;
+ break;
+ }
}
- for (var i = 0; i < paths.length; i++) {
- var outPath =
- path.join(sdkOut, path.relative(paths[i], from: sdkLibIn));
- _writeSync(outPath, contents[i]);
+
+ if (needsUpdate) {
+ var contents = <String>[libraryContents];
+ contents.addAll(partFiles.map((f) => f.readAsStringSync()));
+ if (patchExists) {
+ var patchContents = patchFile.readAsStringSync();
+ contents = _patchLibrary(contents, patchContents);
+ }
+
+ for (var i = 0; i < outPaths.length; i++) {
+ _writeSync(outPaths[i], contents[i]);
+ }
}
}
}
« lib/src/compiler.dart ('K') | « tool/build_sdk.sh ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698