diff --git a/packages/flutter_tools/lib/executable.dart b/packages/flutter_tools/lib/executable.dart index e85a34f797c..39b4e269105 100644 --- a/packages/flutter_tools/lib/executable.dart +++ b/packages/flutter_tools/lib/executable.dart @@ -23,6 +23,7 @@ import 'src/commands/start.dart'; import 'src/commands/stop.dart'; import 'src/commands/test.dart'; import 'src/commands/trace.dart'; +import 'src/commands/upgrade.dart'; import 'src/process.dart'; /// Main entry point for commands. @@ -57,7 +58,8 @@ Future main(List args) async { ..addCommand(new StartCommand()) ..addCommand(new StopCommand()) ..addCommand(new TestCommand()) - ..addCommand(new TraceCommand()); + ..addCommand(new TraceCommand()) + ..addCommand(new UpgradeCommand()); return Chain.capture(() async { dynamic result = await runner.run(args); diff --git a/packages/flutter_tools/lib/src/commands/upgrade.dart b/packages/flutter_tools/lib/src/commands/upgrade.dart new file mode 100644 index 00000000000..84b8494a9fd --- /dev/null +++ b/packages/flutter_tools/lib/src/commands/upgrade.dart @@ -0,0 +1,30 @@ +// 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 'package:logging/logging.dart'; + +import '../artifacts.dart'; +import '../process.dart'; +import 'flutter_command.dart'; + +final Logger _logging = new Logger('flutter_tools.upgrade'); + +class UpgradeCommand extends FlutterCommand { + final String name = 'upgrade'; + final String description = 'Upgrade your copy of Flutter.'; + + @override + Future runInProject() async { + int code = await runCommandAndStreamOutput([ + 'git', 'pull', '--ff-only' + ], workingDirectory: ArtifactStore.flutterRoot); + + if (code != 0) + return code; + + return await runCommandAndStreamOutput([sdkBinaryName('pub'), 'upgrade']); + } +}