| // Copyright 2015 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 'dart:async'; |
| |
| import '../base/common.dart'; |
| import '../base/os.dart'; |
| import '../base/process.dart'; |
| import '../dart/pub.dart'; |
| import '../dart/summary.dart'; |
| import '../cache.dart'; |
| import '../globals.dart'; |
| import '../runner/flutter_command.dart'; |
| import '../version.dart'; |
| |
| class UpgradeCommand extends FlutterCommand { |
| @override |
| final String name = 'upgrade'; |
| |
| @override |
| final String description = 'Upgrade your copy of Flutter.'; |
| |
| @override |
| Future<Null> runCommand() async { |
| try { |
| runCheckedSync(<String>[ |
| 'git', 'rev-parse', '@{u}' |
| ], workingDirectory: Cache.flutterRoot); |
| } catch (e) { |
| throwToolExit('Unable to upgrade Flutter: no upstream repository configured.'); |
| } |
| |
| FlutterVersion version = new FlutterVersion(Cache.flutterRoot); |
| if (version.channel == 'alpha') { |
| // The alpha branch is deprecated. Rather than trying to pull the alpha |
| // branch, we should switch upstream to master. |
| printStatus('Switching to from alpha to master...'); |
| runSync(<String>['git', 'branch', '--set-upstream-to=origin/master']); |
| } |
| |
| printStatus('Upgrading Flutter from ${Cache.flutterRoot}...'); |
| |
| int code = await runCommandAndStreamOutput( |
| <String>['git', 'pull', '--ff-only'], |
| workingDirectory: Cache.flutterRoot, |
| mapFunction: (String line) => matchesGitLine(line) ? null : line |
| ); |
| |
| if (code != 0) |
| throwToolExit(null, exitCode: code); |
| |
| await buildUnlinkedForPackages(Cache.flutterRoot); |
| |
| // Check for and download any engine and pkg/ updates. |
| // We run the 'flutter' shell script re-entrantly here |
| // so that it will download the updated Dart and so forth |
| // if necessary. |
| printStatus(''); |
| printStatus('Upgrading engine...'); |
| code = await runCommandAndStreamOutput( |
| <String>[ |
| 'bin/flutter', '--no-color', 'precache' |
| ], |
| workingDirectory: Cache.flutterRoot, |
| allowReentrantFlutter: true |
| ); |
| |
| printStatus(''); |
| printStatus(FlutterVersion.getVersion(Cache.flutterRoot).toString()); |
| |
| String projRoot = findProjectRoot(); |
| if (projRoot != null) { |
| printStatus(''); |
| await pubGet(directory: projRoot, upgrade: true, checkLastModified: false); |
| } |
| |
| // Run a doctor check in case system requirements have changed. |
| printStatus(''); |
| printStatus('Running flutter doctor...'); |
| await doctor.diagnose(); |
| } |
| |
| // dev/benchmarks/complex_layout/lib/main.dart | 24 +- |
| static final RegExp _gitDiffRegex = new RegExp(r' (\S+)\s+\|\s+\d+ [+-]+'); |
| |
| // rename {packages/flutter/doc => dev/docs}/styles.html (92%) |
| // delete mode 100644 doc/index.html |
| // create mode 100644 examples/flutter_gallery/lib/gallery/demo.dart |
| static final RegExp _gitChangedRegex = new RegExp(r' (rename|delete mode|create mode) .+'); |
| |
| // Public for testing. |
| static bool matchesGitLine(String line) { |
| return _gitDiffRegex.hasMatch(line) |
| || _gitChangedRegex.hasMatch(line) |
| || line == 'Fast-forward'; |
| } |
| } |