From b85168787ec8b091250ccdb81cfee9dd65250167 Mon Sep 17 00:00:00 2001 From: Hixie Date: Wed, 28 Oct 2015 13:51:30 -0700 Subject: [PATCH] rev-flutter tool A tool to update all the pubspec.yaml versions when we're revving flutter. --- .../flutter/sky/packages/updater/pubspec.yaml | 1 - .../sky/packages/workbench/pubspec.yaml | 2 +- .../tools/pubspec_maintenance/pubspec.yaml | 5 + .../pubspec_maintenance/rev_flutter.dart | 110 ++++++++++++++++++ 4 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 engine/src/flutter/sky/tools/pubspec_maintenance/pubspec.yaml create mode 100755 engine/src/flutter/sky/tools/pubspec_maintenance/rev_flutter.dart diff --git a/engine/src/flutter/sky/packages/updater/pubspec.yaml b/engine/src/flutter/sky/packages/updater/pubspec.yaml index 0608368dddc..1048fb8f7ee 100644 --- a/engine/src/flutter/sky/packages/updater/pubspec.yaml +++ b/engine/src/flutter/sky/packages/updater/pubspec.yaml @@ -1,5 +1,4 @@ name: updater -version: 0.0.1 author: Flutter Authors description: The autoupdater for flutter homepage: http://flutter.io diff --git a/engine/src/flutter/sky/packages/workbench/pubspec.yaml b/engine/src/flutter/sky/packages/workbench/pubspec.yaml index 759be72f636..1a5795f2b98 100644 --- a/engine/src/flutter/sky/packages/workbench/pubspec.yaml +++ b/engine/src/flutter/sky/packages/workbench/pubspec.yaml @@ -5,7 +5,7 @@ description: A workspace to host pub packages homepage: https://github.com/flutter/engine/tree/master/sky/packages/workbench dependencies: flutter: ">=0.0.3 <0.1.0" - sky_tools: ">=0.0.26" + sky_tools: any cipher: any asn1lib: any flutter_rendering_examples: any diff --git a/engine/src/flutter/sky/tools/pubspec_maintenance/pubspec.yaml b/engine/src/flutter/sky/tools/pubspec_maintenance/pubspec.yaml new file mode 100644 index 00000000000..26363d091ed --- /dev/null +++ b/engine/src/flutter/sky/tools/pubspec_maintenance/pubspec.yaml @@ -0,0 +1,5 @@ +name: flutter-pubspec-maintenance +dependencies: + den_api: ^0.1.0 + path: ^1.3.6 + pub_semver: ^1.2.2 diff --git a/engine/src/flutter/sky/tools/pubspec_maintenance/rev_flutter.dart b/engine/src/flutter/sky/tools/pubspec_maintenance/rev_flutter.dart new file mode 100755 index 00000000000..757e928c1f3 --- /dev/null +++ b/engine/src/flutter/sky/tools/pubspec_maintenance/rev_flutter.dart @@ -0,0 +1,110 @@ +import 'dart:async'; +import 'dart:io'; + +import 'package:den_api/den_api.dart'; +import 'package:path/path.dart' as path; +import 'package:pub_semver/pub_semver.dart'; + +// set this to true when we decide to ship 0.1.0 +const bool haveWeEverReleasedAPointRelease = false; + +class FlutterPubspec { + static Future load(String path) async { + return new FlutterPubspec.fromPubspec(await Pubspec.load(path)); + } + + FlutterPubspec.fromPubspec(this._data) { + _openPubspecs.add(this); + } + + final Pubspec _data; + + String get name => _data.name; + Version get version => _data.version; + + PackageDep get asDependency { + return new PackageDep(name, 'hosted', version, ''); + } + + void bumpVersion({ bool breakingChange }) { + _data.bump(haveWeEverReleasedAPointRelease && breakingChange ? ReleaseType.minor : ReleaseType.patch); + print('$name is now at $version'); + } + + void setDependency(FlutterPubspec dependency) { + _data.addDependency(dependency.asDependency); + } + + void setDependencyIfNecessary(FlutterPubspec dependency) { + if (_data.dependencies.containsKey(dependency.name)) + _data.addDependency(dependency.asDependency); + } + + void _save() { + _data.save(); + } + + static List _openPubspecs = []; + static void saveAll() { + for (FlutterPubspec file in _openPubspecs) + file._save(); + } +} + +main() async { + bool breakingChange = true; + + + // The published packages + + FlutterPubspec flutterEngine = await FlutterPubspec.load('sky/packages/sky_engine') + ..bumpVersion(breakingChange: breakingChange); + + FlutterPubspec flutterServices = await FlutterPubspec.load('sky/packages/sky_services') + ..bumpVersion(breakingChange: breakingChange); + + FlutterPubspec flutterFlx = await FlutterPubspec.load('sky/packages/flx') + ..bumpVersion(breakingChange: breakingChange) + ..setDependency(flutterServices); + + FlutterPubspec flutter = await FlutterPubspec.load('sky/packages/sky') + ..bumpVersion(breakingChange: breakingChange) + ..setDependency(flutterEngine) + ..setDependency(flutterServices); + + FlutterPubspec flutterSprites = await FlutterPubspec.load('skysprites') + ..bumpVersion(breakingChange: breakingChange) + ..setDependency(flutter); + + + // The internal packages + + await FlutterPubspec.load('sky/packages/updater') + ..setDependency(flutter) + ..setDependency(flutterSprites); + + await FlutterPubspec.load('sky/unit') + ..setDependency(flutter); + + await FlutterPubspec.load('sky/packages/workbench') + ..setDependency(flutterServices) + ..setDependency(flutterFlx) + ..setDependency(flutter) + ..setDependency(flutterSprites); + + Directory examples = new Directory('examples'); + await for (FileSystemEntity entity in examples.list(recursive: true, followLinks: false)) { + if (entity is File && path.basename(entity.path) == Pubspec.basename) { + await FlutterPubspec.load(entity.path) + ..setDependency(flutter) + ..setDependencyIfNecessary(flutterSprites); + } + } + + // we don't update these, since they're their own things and don't depend on + // the above packages: + // sky/tools/pubspec_maintenance/pubspec.yaml + // sky/packages/material_design_icons/pubspec.yaml + + FlutterPubspec.saveAll(); +}