Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
76061c4f
Unverified
Commit
76061c4f
authored
Feb 13, 2019
by
Jonah Williams
Committed by
GitHub
Feb 13, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Lazily download artifacts (Part II) (#27735)
parent
16fd0eb5
Changes
16
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
1012 additions
and
235 deletions
+1012
-235
fuchsia_attach.dart
packages/flutter_tools/bin/fuchsia_attach.dart
+3
-0
xcode_backend.sh
packages/flutter_tools/bin/xcode_backend.sh
+6
-1
net.dart
packages/flutter_tools/lib/src/base/net.dart
+4
-3
cache.dart
packages/flutter_tools/lib/src/cache.dart
+616
-178
build.dart
packages/flutter_tools/lib/src/commands/build.dart
+17
-0
build_apk.dart
packages/flutter_tools/lib/src/commands/build_apk.dart
+21
-0
build_appbundle.dart
packages/flutter_tools/lib/src/commands/build_appbundle.dart
+18
-0
build_ios.dart
packages/flutter_tools/lib/src/commands/build_ios.dart
+8
-2
create.dart
packages/flutter_tools/lib/src/commands/create.dart
+4
-1
doctor.dart
packages/flutter_tools/lib/src/commands/doctor.dart
+9
-0
ide_config.dart
packages/flutter_tools/lib/src/commands/ide_config.dart
+0
-2
precache.dart
packages/flutter_tools/lib/src/commands/precache.dart
+14
-7
run.dart
packages/flutter_tools/lib/src/commands/run.dart
+28
-0
flutter_command.dart
packages/flutter_tools/lib/src/runner/flutter_command.dart
+48
-22
cache_test.dart
packages/flutter_tools/test/cache_test.dart
+210
-18
flutter_command_test.dart
packages/flutter_tools/test/runner/flutter_command_test.dart
+6
-1
No files found.
packages/flutter_tools/bin/fuchsia_attach.dart
View file @
76061c4f
...
...
@@ -134,4 +134,7 @@ class _FuchsiaAttachCommand extends AttachCommand {
Cache
.
flutterRoot
=
'
$originalWorkingDirectory
/third_party/dart-pkg/git/flutter'
;
return
super
.
runCommand
();
}
@override
Future
<
void
>
updateCache
()
async
{}
}
packages/flutter_tools/bin/xcode_backend.sh
View file @
76061c4f
...
...
@@ -84,7 +84,6 @@ BuildApp() {
local
framework_path
=
"
${
FLUTTER_ROOT
}
/bin/cache/artifacts/engine/
${
artifact_variant
}
"
AssertExists
"
${
framework_path
}
"
AssertExists
"
${
project_path
}
"
local
derived_dir
=
"
${
SOURCE_ROOT
}
/Flutter"
...
...
@@ -118,6 +117,12 @@ BuildApp() {
flutter_podspec
=
"
${
LOCAL_ENGINE
}
/Flutter.podspec"
fi
# If the framework path does not exist, ensure that it is downloaded.
if
[[
!
-e
"
$1
"
]]
;
then
FLUTTER_ALREADY_LOCKED
=
"true"
RunCommand
"
${
FLUTTER_ROOT
}
/bin/flutter"
precache
--suppress-analytics
fi
if
[[
-e
"
${
project_path
}
/.ios"
]]
;
then
RunCommand
rm
-rf
--
"
${
derived_dir
}
/engine"
mkdir
"
${
derived_dir
}
/engine"
...
...
packages/flutter_tools/lib/src/base/net.dart
View file @
76061c4f
...
...
@@ -37,7 +37,8 @@ Future<List<int>> _attempt(Uri url, {bool onlyHeaders = false}) async {
printTrace
(
'Downloading:
$url
'
);
HttpClient
httpClient
;
if
(
context
[
HttpClientFactory
]
!=
null
)
{
httpClient
=
(
context
[
HttpClientFactory
]
as
HttpClientFactory
)();
// ignore: avoid_as
final
HttpClientFactory
httpClientFactory
=
context
[
HttpClientFactory
];
httpClient
=
httpClientFactory
();
}
else
{
httpClient
=
HttpClient
();
}
...
...
@@ -64,9 +65,9 @@ Future<List<int>> _attempt(Uri url, {bool onlyHeaders = false}) async {
// If we're making a HEAD request, we're only checking to see if the URL is
// valid.
if
(
onlyHeaders
)
{
return
(
response
.
statusCode
==
200
)
?
<
int
>[]
:
null
;
return
(
response
.
statusCode
==
HttpStatus
.
ok
)
?
<
int
>[]
:
null
;
}
if
(
response
.
statusCode
!=
200
)
{
if
(
response
.
statusCode
!=
HttpStatus
.
ok
)
{
if
(
response
.
statusCode
>
0
&&
response
.
statusCode
<
500
)
{
throwToolExit
(
'Download failed.
\n
'
...
...
packages/flutter_tools/lib/src/cache.dart
View file @
76061c4f
This diff is collapsed.
Click to expand it.
packages/flutter_tools/lib/src/commands/build.dart
View file @
76061c4f
...
...
@@ -4,6 +4,8 @@
import
'dart:async'
;
import
'../build_info.dart'
;
import
'../globals.dart'
;
import
'../runner/flutter_command.dart'
;
import
'build_aot.dart'
;
import
'build_apk.dart'
;
...
...
@@ -36,4 +38,19 @@ abstract class BuildSubCommand extends FlutterCommand {
BuildSubCommand
()
{
requiresPubspecYaml
();
}
@override
Future
<
void
>
updateCache
()
async
{
final
BuildInfo
buildInfo
=
getBuildInfo
();
bool
skipUnknown
=
false
;
if
(
buildInfo
.
mode
==
null
||
buildInfo
.
targetPlatform
==
null
)
{
skipUnknown
=
true
;
}
await
cache
.
updateAll
(
buildModes:
buildInfo
.
mode
!=
null
?
<
BuildMode
>[
buildInfo
.
mode
]
:
<
BuildMode
>[],
targetPlatforms:
buildInfo
.
targetPlatform
!=
null
?
<
TargetPlatform
>[
buildInfo
.
targetPlatform
]
:
<
TargetPlatform
>[],
clobber:
false
,
skipUnknown:
skipUnknown
,
);
}
}
packages/flutter_tools/lib/src/commands/build_apk.dart
View file @
76061c4f
...
...
@@ -5,6 +5,8 @@
import
'dart:async'
;
import
'../android/apk.dart'
;
import
'../build_info.dart'
;
import
'../globals.dart'
;
import
'../project.dart'
;
import
'../runner/flutter_command.dart'
show
FlutterCommandResult
;
import
'build.dart'
;
...
...
@@ -49,4 +51,23 @@ class BuildApkCommand extends BuildSubCommand {
);
return
null
;
}
@override
Future
<
void
>
updateCache
()
async
{
final
BuildInfo
buildInfo
=
getBuildInfo
();
await
cache
.
updateAll
(
buildModes:
<
BuildMode
>[
buildInfo
.
mode
,
BuildMode
.
debug
,
],
targetPlatforms:
<
TargetPlatform
>[
TargetPlatform
.
android_arm
,
TargetPlatform
.
android_arm64
,
TargetPlatform
.
android_x64
,
TargetPlatform
.
android_x86
],
clobber:
false
,
skipUnknown:
true
,
);
}
}
packages/flutter_tools/lib/src/commands/build_appbundle.dart
View file @
76061c4f
...
...
@@ -5,6 +5,8 @@
import
'dart:async'
;
import
'../android/app_bundle.dart'
;
import
'../build_info.dart'
;
import
'../globals.dart'
;
import
'../project.dart'
;
import
'../runner/flutter_command.dart'
show
FlutterCommandResult
;
import
'build.dart'
;
...
...
@@ -47,4 +49,20 @@ class BuildAppBundleCommand extends BuildSubCommand {
);
return
null
;
}
@override
Future
<
void
>
updateCache
()
async
{
final
BuildInfo
buildInfo
=
getBuildInfo
();
await
cache
.
updateAll
(
buildModes:
<
BuildMode
>[
buildInfo
.
mode
,
],
targetPlatforms:
<
TargetPlatform
>[
TargetPlatform
.
android_arm
,
TargetPlatform
.
android_arm64
,
],
clobber:
false
,
skipUnknown:
true
,
);
}
}
packages/flutter_tools/lib/src/commands/build_ios.dart
View file @
76061c4f
...
...
@@ -49,9 +49,15 @@ class BuildIOSCommand extends BuildSubCommand {
final
String
description
=
'Build an iOS application bundle (Mac OS X host only).'
;
@override
Future
<
FlutterCommandResult
>
runCommand
()
async
{
final
bool
forSimulator
=
argResults
[
'simulator'
];
Future
<
void
>
validateCommand
()
async
{
defaultBuildMode
=
forSimulator
?
BuildMode
.
debug
:
BuildMode
.
release
;
return
super
.
validateCommand
();
}
bool
get
forSimulator
=>
argResults
[
'simulator'
];
@override
Future
<
FlutterCommandResult
>
runCommand
()
async
{
if
(
getCurrentHostPlatform
()
!=
HostPlatform
.
darwin_x64
)
throwToolExit
(
'Building for iOS is only supported on the Mac.'
);
...
...
packages/flutter_tools/lib/src/commands/create.dart
View file @
76061c4f
...
...
@@ -211,7 +211,10 @@ class CreateCommand extends FlutterCommand {
throwToolExit
(
'Neither the --flutter-root command line flag nor the FLUTTER_ROOT environment '
'variable was specified. Unable to find package:flutter.'
,
exitCode:
2
);
await
Cache
.
instance
.
updateAll
();
await
Cache
.
instance
.
updateAll
(
skipUnknown:
true
,
clobber:
false
,
);
final
String
flutterRoot
=
fs
.
path
.
absolute
(
Cache
.
flutterRoot
);
...
...
packages/flutter_tools/lib/src/commands/doctor.dart
View file @
76061c4f
...
...
@@ -6,6 +6,7 @@ import 'dart:async';
import
'../base/common.dart'
;
import
'../doctor.dart'
;
import
'../globals.dart'
;
import
'../runner/flutter_command.dart'
;
class
DoctorCommand
extends
FlutterCommand
{
...
...
@@ -48,4 +49,12 @@ class DoctorCommand extends FlutterCommand {
final
bool
success
=
await
doctor
.
diagnose
(
androidLicenses:
argResults
[
'android-licenses'
],
verbose:
verbose
);
return
FlutterCommandResult
(
success
?
ExitStatus
.
success
:
ExitStatus
.
warning
);
}
@override
Future
<
void
>
updateCache
()
async
{
await
cache
.
updateAll
(
clobber:
false
,
skipUnknown:
true
,
);
}
}
packages/flutter_tools/lib/src/commands/ide_config.dart
View file @
76061c4f
...
...
@@ -223,8 +223,6 @@ class IdeConfigCommand extends FlutterCommand {
throwToolExit
(
'Currently, the only supported IDE is IntelliJ
\n
$usage
'
,
exitCode:
2
);
}
await
Cache
.
instance
.
updateAll
();
if
(
argResults
[
'update-templates'
])
{
_handleTemplateUpdate
();
return
null
;
...
...
packages/flutter_tools/lib/src/commands/precache.dart
View file @
76061c4f
...
...
@@ -4,6 +4,7 @@
import
'dart:async'
;
import
'../cache.dart'
;
import
'../globals.dart'
;
import
'../runner/flutter_command.dart'
;
...
...
@@ -11,6 +12,8 @@ class PrecacheCommand extends FlutterCommand {
PrecacheCommand
()
{
argParser
.
addFlag
(
'all-platforms'
,
abbr:
'a'
,
negatable:
false
,
help:
'Precache artifacts for all platforms.'
);
argParser
.
addFlag
(
'force'
,
abbr:
'f'
,
negatable:
false
,
help:
'Force download of new cached artifacts'
);
}
@override
...
...
@@ -24,14 +27,18 @@ class PrecacheCommand extends FlutterCommand {
@override
Future
<
FlutterCommandResult
>
runCommand
()
async
{
if
(
argResults
[
'all-platforms'
])
if
(
argResults
[
'all-platforms'
])
{
cache
.
includeAllPlatforms
=
true
;
if
(
cache
.
isUpToDate
())
}
final
UpdateResult
result
=
cache
.
isUpToDate
(
skipUnknown:
false
);
if
(
result
.
isUpToDate
&&
!
result
.
clobber
&&
!
argResults
[
'force'
])
{
printStatus
(
'Already up-to-date.'
);
else
await
cache
.
updateAll
();
return
null
;
}
else
{
await
cache
.
updateAll
(
skipUnknown:
false
,
clobber:
argResults
[
'force'
]
||
result
.
clobber
,
);
}
return
const
FlutterCommandResult
(
ExitStatus
.
success
);
}
}
packages/flutter_tools/lib/src/commands/run.dart
View file @
76061c4f
...
...
@@ -61,6 +61,34 @@ abstract class RunCommandBase extends FlutterCommand {
bool
get
traceStartup
=>
argResults
[
'trace-startup'
];
String
get
route
=>
argResults
[
'route'
];
@override
bool
get
shouldUpdateCache
=>
true
;
@override
Future
<
void
>
updateCache
()
async
{
final
BuildInfo
buildInfo
=
getBuildInfo
();
final
BuildMode
buildMode
=
buildInfo
.
mode
??
BuildMode
.
debug
;
final
Set
<
TargetPlatform
>
targetPlatforms
=
Set
<
TargetPlatform
>();
if
(
buildInfo
.
targetPlatform
!=
null
)
{
targetPlatforms
.
add
(
buildInfo
.
targetPlatform
);
}
await
for
(
Device
device
in
deviceManager
.
getAllConnectedDevices
())
{
targetPlatforms
.
add
(
await
device
.
targetPlatform
);
}
if
(
targetPlatforms
.
contains
(
TargetPlatform
.
android_arm
)
||
targetPlatforms
.
contains
(
TargetPlatform
.
android_arm64
))
{
targetPlatforms
.
add
(
TargetPlatform
.
android_x64
);
targetPlatforms
.
add
(
TargetPlatform
.
android_x86
);
targetPlatforms
.
add
(
TargetPlatform
.
android_arm
);
targetPlatforms
.
add
(
TargetPlatform
.
android_arm64
);
}
await
cache
.
updateAll
(
buildModes:
<
BuildMode
>[
buildMode
],
targetPlatforms:
targetPlatforms
.
toList
(),
clobber:
false
,
skipUnknown:
false
,
);
}
}
class
RunCommand
extends
RunCommandBase
{
...
...
packages/flutter_tools/lib/src/runner/flutter_command.dart
View file @
76061c4f
...
...
@@ -323,30 +323,43 @@ abstract class FlutterCommand extends Command<void> {
}
BuildMode
getBuildMode
()
{
final
List
<
bool
>
modeFlags
=
<
bool
>[
argResults
[
'debug'
],
argResults
[
'profile'
],
argResults
[
'release'
]];
if
(
modeFlags
.
where
((
bool
flag
)
=>
flag
).
length
>
1
)
bool
debug
;
bool
profile
;
bool
release
;
if
(
argParser
.
options
.
containsKey
(
'debug'
))
{
debug
=
argResults
[
'debug'
];
}
else
{
debug
=
_defaultBuildMode
==
BuildMode
.
debug
;
}
if
(
argParser
.
options
.
containsKey
(
'profile'
))
{
profile
=
argResults
[
'profile'
];
}
else
{
profile
=
_defaultBuildMode
==
BuildMode
.
profile
;
}
if
(
argParser
.
options
.
containsKey
(
'release'
))
{
release
=
argResults
[
'release'
];
}
else
{
release
=
_defaultBuildMode
==
BuildMode
.
release
;
}
if
(
debug
&&
profile
||
debug
&&
release
||
release
&&
profile
)
{
throw
UsageException
(
'Only one of --debug, --profile, or --release can be specified.'
,
null
);
}
final
bool
dynamicFlag
=
argParser
.
options
.
containsKey
(
'dynamic'
)
?
argResults
[
'dynamic'
]
:
false
;
if
(
argResults
[
'debug'
]
)
{
if
(
dynamicFlag
)
if
(
debug
)
{
if
(
dynamicFlag
)
{
throw
ToolExit
(
'Error: --dynamic requires --release or --profile.'
);
}
return
BuildMode
.
debug
;
}
if
(
argResults
[
'profile'
])
if
(
profile
)
{
return
dynamicFlag
?
BuildMode
.
dynamicProfile
:
BuildMode
.
profile
;
if
(
argResults
[
'release'
])
}
if
(
release
)
{
return
dynamicFlag
?
BuildMode
.
dynamicRelease
:
BuildMode
.
release
;
if
(
_defaultBuildMode
==
BuildMode
.
debug
&&
dynamicFlag
)
throw
ToolExit
(
'Error: --dynamic requires --release or --profile.'
);
if
(
_defaultBuildMode
==
BuildMode
.
release
&&
dynamicFlag
)
return
BuildMode
.
dynamicRelease
;
if
(
_defaultBuildMode
==
BuildMode
.
profile
&&
dynamicFlag
)
return
BuildMode
.
dynamicProfile
;
}
return
_defaultBuildMode
;
}
...
...
@@ -384,7 +397,7 @@ abstract class FlutterCommand extends Command<void> {
'--patch-number (
${argResults['patch-number']}
) must be an int.'
,
null
);
}
String
extraFrontEndOptions
=
List
<
String
>
extraFrontEndOptions
=
argParser
.
options
.
containsKey
(
FlutterOptions
.
kExtraFrontEndOptions
)
?
argResults
[
FlutterOptions
.
kExtraFrontEndOptions
]
:
null
;
...
...
@@ -393,9 +406,9 @@ abstract class FlutterCommand extends Command<void> {
for
(
String
expFlag
in
argResults
[
FlutterOptions
.
kEnableExperiment
])
{
final
String
flag
=
'--enable-experiment='
+
expFlag
;
if
(
extraFrontEndOptions
!=
null
)
{
extraFrontEndOptions
+=
','
+
flag
;
extraFrontEndOptions
.
add
(
flag
)
;
}
else
{
extraFrontEndOptions
=
flag
;
extraFrontEndOptions
=
<
String
>[
flag
]
;
}
}
}
...
...
@@ -421,9 +434,9 @@ abstract class FlutterCommand extends Command<void> {
baselineDir:
argParser
.
options
.
containsKey
(
'baseline-dir'
)
?
argResults
[
'baseline-dir'
]
:
null
,
extraFrontEndOptions:
extraFrontEndOptions
,
extraFrontEndOptions:
extraFrontEndOptions
?.
join
(
', '
)
,
extraGenSnapshotOptions:
argParser
.
options
.
containsKey
(
FlutterOptions
.
kExtraGenSnapshotOptions
)
?
argResults
[
FlutterOptions
.
kExtraGenSnapshotOptions
]
?
argResults
[
FlutterOptions
.
kExtraGenSnapshotOptions
]
?.
join
(
', '
)
:
null
,
buildSharedLibrary:
argParser
.
options
.
containsKey
(
'build-shared-library'
)
?
argResults
[
'build-shared-library'
]
...
...
@@ -513,6 +526,19 @@ abstract class FlutterCommand extends Command<void> {
);
}
/// A hook called to populate the cache with a particular target platform
/// or build mode.
///
/// If a command requires specific artifacts, it is it's responsibility to
/// request them here.
Future
<
void
>
updateCache
()
async
{
// Only download the minimum set of binaries.
await
cache
.
updateAll
(
clobber:
false
,
skipUnknown:
true
,
);
}
/// Perform validation then call [runCommand] to execute the command.
/// Return a [Future] that completes with an exit code
/// indicating whether execution was successful.
...
...
@@ -523,11 +549,11 @@ abstract class FlutterCommand extends Command<void> {
@mustCallSuper
Future
<
FlutterCommandResult
>
verifyThenRunCommand
(
String
commandPath
)
async
{
await
validateCommand
();
// 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.
if
(
shouldUpdateCache
)
await
cache
.
updateAll
();
if
(
shouldUpdateCache
)
{
await
updateCache
();
}
if
(
shouldRunPub
)
{
await
pubGet
(
context:
PubContext
.
getVerifyContext
(
name
));
...
...
packages/flutter_tools/test/cache_test.dart
View file @
76061c4f
This diff is collapsed.
Click to expand it.
packages/flutter_tools/test/runner/flutter_command_test.dart
View file @
76061c4f
...
...
@@ -42,7 +42,12 @@ void main() {
testUsingContext
(
'honors shouldUpdateCache true'
,
()
async
{
final
DummyFlutterCommand
flutterCommand
=
DummyFlutterCommand
(
shouldUpdateCache:
true
);
await
flutterCommand
.
run
();
verify
(
cache
.
updateAll
()).
called
(
1
);
verify
(
cache
.
updateAll
(
buildModes:
anyNamed
(
'buildModes'
),
clobber:
anyNamed
(
'clobber'
),
skipUnknown:
anyNamed
(
'skipUnknown'
),
targetPlatforms:
anyNamed
(
'targetPlatforms'
)
)).
called
(
1
);
},
overrides:
<
Type
,
Generator
>{
Cache:
()
=>
cache
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment