mirror of
https://github.com/flutter/flutter
synced 2024-10-13 03:32:55 +00:00
add flutter channel command (#5561)
* add flutter channel command fixes https://github.com/flutter/flutter/issues/2513 * fix test * address comments * remove unused imports * fix lints
This commit is contained in:
parent
1ea2f4030e
commit
e47e937682
|
@ -14,6 +14,7 @@ import 'src/base/process.dart';
|
|||
import 'src/base/utils.dart';
|
||||
import 'src/commands/analyze.dart';
|
||||
import 'src/commands/build.dart';
|
||||
import 'src/commands/channel.dart';
|
||||
import 'src/commands/config.dart';
|
||||
import 'src/commands/create.dart';
|
||||
import 'src/commands/daemon.dart';
|
||||
|
@ -57,6 +58,7 @@ Future<Null> main(List<String> args) async {
|
|||
FlutterCommandRunner runner = new FlutterCommandRunner(verboseHelp: verboseHelp)
|
||||
..addCommand(new AnalyzeCommand())
|
||||
..addCommand(new BuildCommand())
|
||||
..addCommand(new ChannelCommand())
|
||||
..addCommand(new ConfigCommand())
|
||||
..addCommand(new CreateCommand())
|
||||
..addCommand(new DaemonCommand(hidden: !verboseHelp))
|
||||
|
|
66
packages/flutter_tools/lib/src/commands/channel.dart
Normal file
66
packages/flutter_tools/lib/src/commands/channel.dart
Normal file
|
@ -0,0 +1,66 @@
|
|||
// 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/process.dart';
|
||||
import '../cache.dart';
|
||||
import '../globals.dart';
|
||||
import '../runner/flutter_command.dart';
|
||||
|
||||
class ChannelCommand extends FlutterCommand {
|
||||
@override
|
||||
final String name = 'channel';
|
||||
|
||||
@override
|
||||
final String description = 'List or switch flutter channels.';
|
||||
|
||||
@override
|
||||
String get invocation => '${runner.executableName} $name [<channel-name>]';
|
||||
|
||||
@override
|
||||
bool get requiresProjectRoot => false;
|
||||
|
||||
@override
|
||||
Future<int> runInProject() async {
|
||||
switch (argResults.rest.length) {
|
||||
case 0:
|
||||
return await _listChannels();
|
||||
case 1:
|
||||
return await _switchChannel(argResults.rest[0]);
|
||||
default:
|
||||
printStatus('Too many arguments.');
|
||||
printStatus(usage);
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
Future<int> _listChannels() async {
|
||||
String currentBranch = runSync(
|
||||
<String>['git', 'rev-parse', '--abbrev-ref', 'HEAD'],
|
||||
workingDirectory: Cache.flutterRoot);
|
||||
|
||||
printStatus('Flutter channels:');
|
||||
return runCommandAndStreamOutput(
|
||||
<String>['git', 'branch', '-r'],
|
||||
workingDirectory: Cache.flutterRoot,
|
||||
mapFunction: (String line) {
|
||||
List<String> split = line.split('/');
|
||||
if (split.length < 2) return null;
|
||||
String branchName = split[1];
|
||||
if (branchName.startsWith('HEAD')) return null;
|
||||
if (branchName == currentBranch) return '* $branchName';
|
||||
return ' $branchName';
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future<int> _switchChannel(String branchName) {
|
||||
printStatus('Switching to flutter channel named $branchName');
|
||||
return runCommandAndStreamOutput(
|
||||
<String>['git', 'checkout', branchName],
|
||||
workingDirectory: Cache.flutterRoot,
|
||||
);
|
||||
}
|
||||
}
|
|
@ -17,6 +17,7 @@ import 'android_device_test.dart' as android_device_test;
|
|||
import 'android_sdk_test.dart' as android_sdk_test;
|
||||
import 'application_package_test.dart' as application_package_test;
|
||||
import 'base_utils_test.dart' as base_utils_test;
|
||||
import 'channel_test.dart' as channel_test;
|
||||
import 'config_test.dart' as config_test;
|
||||
import 'context_test.dart' as context_test;
|
||||
import 'create_test.dart' as create_test;
|
||||
|
@ -48,6 +49,7 @@ void main() {
|
|||
android_sdk_test.main();
|
||||
application_package_test.main();
|
||||
base_utils_test.main();
|
||||
channel_test.main();
|
||||
config_test.main();
|
||||
context_test.main();
|
||||
create_test.main();
|
||||
|
|
28
packages/flutter_tools/test/channel_test.dart
Normal file
28
packages/flutter_tools/test/channel_test.dart
Normal file
|
@ -0,0 +1,28 @@
|
|||
// 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 'package:args/command_runner.dart';
|
||||
import 'package:flutter_tools/src/base/context.dart';
|
||||
import 'package:flutter_tools/src/base/logger.dart';
|
||||
import 'package:flutter_tools/src/commands/channel.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
import 'src/common.dart';
|
||||
import 'src/context.dart';
|
||||
|
||||
void main() {
|
||||
group('channel', () {
|
||||
testUsingContext('list', () async {
|
||||
ChannelCommand command = new ChannelCommand();
|
||||
CommandRunner runner = createTestCommandRunner(command);
|
||||
expect(await runner.run(<String>['channel']), 0);
|
||||
BufferLogger logger = context[Logger];
|
||||
expect(logger.errorText, hasLength(0));
|
||||
expect(logger.statusText, contains('channels'));
|
||||
expect(logger.statusText, contains('master'));
|
||||
// fails on bots
|
||||
//expect(logger.statusText, contains('* ')); // current channel mark
|
||||
});
|
||||
});
|
||||
}
|
Loading…
Reference in a new issue