Add --summary option to diff tool (#44)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6def8f3..a821d69 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.5.11
+
+* Added `--summary` option to `dart2js_info_diff` tool.
+
## 0.5.10
* Set max SDK version to `<3.0.0`, and adjust other dependencies.
diff --git a/README.md b/README.md
index 796a4bc..cc9df90 100644
--- a/README.md
+++ b/README.md
@@ -134,7 +134,7 @@
```console
$ pub global activate dart2js_info # only needed once
-$ dart2js_info_diff old.js.info.json new.js.info.json
+$ dart2js_info_diff old.js.info.json new.js.info.json [--summary]
```
The tool gives a breakdown of the difference between the two info files.
diff --git a/bin/diff.dart b/bin/diff.dart
index eb73e4a..2bac65e 100644
--- a/bin/diff.dart
+++ b/bin/diff.dart
@@ -2,17 +2,28 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'package:dart2js_info/info.dart';
import 'package:dart2js_info/src/diff.dart';
import 'package:dart2js_info/src/util.dart';
/// A command-line tool that computes the diff between two info files.
main(List<String> args) async {
- if (args.length != 2) {
- print('usage: dart2js_info_diff old.info.json new.info.json');
+ if (args.length < 2 || args.length > 3) {
+ print('usage: dart2js_info_diff old.info.json new.info.json [--summary]');
return;
}
+
var oldInfo = await infoFromFile(args[0]);
var newInfo = await infoFromFile(args[1]);
+ var summary = false;
+ if (args.length == 3) {
+ if (args[2] == "--summary") {
+ summary = true;
+ } else {
+ print('Unrecognized argument: ${args[2]}');
+ return;
+ }
+ }
var diffs = diff(oldInfo, newInfo);
@@ -45,6 +56,53 @@
}
}
+ if (summary) {
+ reportSummary(oldInfo, newInfo, adds, removals, sizeChanges, becameDeferred,
+ becameUndeferred);
+ } else {
+ reportFull(oldInfo, newInfo, adds, removals, sizeChanges, becameDeferred,
+ becameUndeferred);
+ }
+}
+
+void reportSummary(
+ AllInfo oldInfo,
+ AllInfo newInfo,
+ List<AddDiff> adds,
+ List<RemoveDiff> removals,
+ List<SizeDiff> sizeChanges,
+ List<DeferredStatusDiff> becameDeferred,
+ List<DeferredStatusDiff> becameUndeferred) {
+ var overallSizeDiff = newInfo.program.size - oldInfo.program.size;
+ print('total_size_difference $overallSizeDiff');
+
+ var noLongerDeferred = 0;
+ for (var diff in becameUndeferred) {
+ noLongerDeferred += diff.info.size;
+ }
+ print('no_longer_deferred $noLongerDeferred');
+
+ var totalAdded = 0;
+ for (var diff in adds) {
+ totalAdded += diff.info.size;
+ }
+ print('total_added $totalAdded');
+
+ var totalRemoved = 0;
+ for (var diff in removals) {
+ totalRemoved += diff.info.size;
+ }
+ print('total_removed $totalRemoved');
+}
+
+void reportFull(
+ AllInfo oldInfo,
+ AllInfo newInfo,
+ List<AddDiff> adds,
+ List<RemoveDiff> removals,
+ List<SizeDiff> sizeChanges,
+ List<DeferredStatusDiff> becameDeferred,
+ List<DeferredStatusDiff> becameUndeferred) {
// TODO(het): Improve this output. Siggi has good suggestions in
// https://github.com/dart-lang/dart2js_info/pull/19
var overallSizeDiff = newInfo.program.size - oldInfo.program.size;
diff --git a/pubspec.yaml b/pubspec.yaml
index 8ab6f34..636e370 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
name: dart2js_info
-version: 0.5.10
+version: 0.5.11
description: >
Libraries and tools to process data produced when running dart2js with