diff --git a/packages/flutter_tools/lib/src/commands/precache.dart b/packages/flutter_tools/lib/src/commands/precache.dart index c8665c463eb..f2a15abc319 100644 --- a/packages/flutter_tools/lib/src/commands/precache.dart +++ b/packages/flutter_tools/lib/src/commands/precache.dart @@ -19,6 +19,9 @@ class PrecacheCommand extends FlutterCommand { @override final String description = 'Populates the Flutter tool\'s cache of binary artifacts.'; + @override + bool get shouldUpdateCache => false; + @override Future runCommand() async { if (argResults['all-platforms']) diff --git a/packages/flutter_tools/lib/src/commands/upgrade.dart b/packages/flutter_tools/lib/src/commands/upgrade.dart index 8b2a76aec34..ca963bcd582 100644 --- a/packages/flutter_tools/lib/src/commands/upgrade.dart +++ b/packages/flutter_tools/lib/src/commands/upgrade.dart @@ -22,6 +22,9 @@ class UpgradeCommand extends FlutterCommand { @override final String description = 'Upgrade your copy of Flutter.'; + @override + bool get shouldUpdateCache => false; + @override Future runCommand() async { try { diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index c1e8104bc52..be46185530d 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart @@ -37,6 +37,8 @@ abstract class FlutterCommand extends Command { bool get shouldRunPub => _usesPubOption && argResults['pub']; + bool get shouldUpdateCache => true; + BuildMode _defaultBuildMode; void usesTargetOption() { @@ -134,7 +136,8 @@ abstract class FlutterCommand extends Command { Future verifyThenRunCommand() async { // Populate the cache. We call this before pub get below so that the sky_engine // package is available in the flutter cache for pub to find. - await cache.updateAll(); + if (shouldUpdateCache) + await cache.updateAll(); if (shouldRunPub) await pubGet(); diff --git a/packages/flutter_tools/test/src/runner/flutter_command_test.dart b/packages/flutter_tools/test/src/runner/flutter_command_test.dart new file mode 100644 index 00000000000..8e9e7f97714 --- /dev/null +++ b/packages/flutter_tools/test/src/runner/flutter_command_test.dart @@ -0,0 +1,63 @@ +// Copyright 2017 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:flutter_tools/src/cache.dart'; +import 'package:flutter_tools/src/runner/flutter_command.dart'; +import 'package:mockito/mockito.dart'; +import 'package:test/test.dart'; + +import '../context.dart'; + +void main() { + + group('Flutter Command', () { + + MockCache cache; + + setUp(() { + cache = new MockCache(); + }); + + testUsingContext('honors shouldUpdateCache false', () async { + final DummyFlutterCommand flutterCommand = new DummyFlutterCommand(shouldUpdateCache: false); + await flutterCommand.run(); + verifyZeroInteractions(cache); + }, + overrides: { + Cache: () => cache, + }); + + testUsingContext('honors shouldUpdateCache true', () async { + final DummyFlutterCommand flutterCommand = new DummyFlutterCommand(shouldUpdateCache: true); + await flutterCommand.run(); + verify(cache.updateAll()).called(1); + }, + overrides: { + Cache: () => cache, + }); + }); +} + +class DummyFlutterCommand extends FlutterCommand { + + DummyFlutterCommand({this.shouldUpdateCache}); + + @override + final bool shouldUpdateCache; + + @override + String get description => 'does nothing'; + + @override + String get name => 'dummy'; + + @override + Future runCommand() async { + // does nothing. + } +} + +class MockCache extends Mock implements Cache {} \ No newline at end of file