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
40598449
Commit
40598449
authored
Apr 07, 2016
by
Devon Carew
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add cache.dart to help manage the cache dir (#3168)
* add cache.dart to help manage the cache dir * sp
parent
7570495b
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
232 additions
and
30 deletions
+232
-30
update_material_fonts.sh
bin/cache/update_material_fonts.sh
+0
-28
flutter
bin/flutter
+0
-1
logger.dart
packages/flutter_tools/lib/src/base/logger.dart
+96
-1
cache.dart
packages/flutter_tools/lib/src/cache.dart
+122
-0
daemon.dart
packages/flutter_tools/lib/src/commands/daemon.dart
+6
-0
globals.dart
packages/flutter_tools/lib/src/globals.dart
+2
-0
flutter_command.dart
packages/flutter_tools/lib/src/runner/flutter_command.dart
+6
-0
No files found.
bin/cache/update_material_fonts.sh
deleted
100755 → 0
View file @
7570495b
#!/bin/bash
# Copyright 2016 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.
set
-e
FLUTTER_ROOT
=
$(
dirname
$(
dirname
$(
dirname
"
${
BASH_SOURCE
[0]
}
"
)))
MATERIAL_FONTS_STAMP_PATH
=
"
$FLUTTER_ROOT
/bin/cache/material_fonts.stamp"
MATERIAL_FONTS_VERSION
=
`
cat
"
$FLUTTER_ROOT
/bin/cache/material_fonts.version"
`
if
[
!
-f
"
$MATERIAL_FONTS_STAMP_PATH
"
]
||
[
"
$MATERIAL_FONTS_VERSION
"
!=
`
cat
"
$MATERIAL_FONTS_STAMP_PATH
"
`
]
;
then
echo
"Downloading Material Design fonts..."
MATERIAL_FONTS_URL
=
"
$MATERIAL_FONTS_VERSION
"
MATERIAL_FONTS_PATH
=
"
$FLUTTER_ROOT
/bin/cache/artifacts/material_fonts"
MATERIAL_FONTS_ZIP
=
"
$FLUTTER_ROOT
/bin/cache/material_fonts.zip"
mkdir
-p
--
"
$MATERIAL_FONTS_PATH
"
curl
--progress-bar
-continue-at
=
-
--location
--output
"
$MATERIAL_FONTS_ZIP
"
"
$MATERIAL_FONTS_URL
"
rm
-rf
--
"
$MATERIAL_FONTS_PATH
"
unzip
-o
-q
"
$MATERIAL_FONTS_ZIP
"
-d
"
$MATERIAL_FONTS_PATH
"
rm
-f
--
"
$MATERIAL_FONTS_ZIP
"
echo
"
$MATERIAL_FONTS_VERSION
"
>
"
$MATERIAL_FONTS_STAMP_PATH
"
fi
bin/flutter
View file @
40598449
...
...
@@ -30,7 +30,6 @@ REVISION=`(cd "$FLUTTER_ROOT"; git rev-parse HEAD)`
if
[
!
-f
"
$SNAPSHOT_PATH
"
]
||
[
!
-f
"
$STAMP_PATH
"
]
||
[
`
cat
"
$STAMP_PATH
"
`
!=
"
$REVISION
"
]
||
[
"
$FLUTTER_TOOLS_DIR
/pubspec.yaml"
-nt
"
$FLUTTER_TOOLS_DIR
/pubspec.lock"
]
;
then
"
$FLUTTER_ROOT
/bin/cache/update_dart_sdk.sh"
"
$FLUTTER_ROOT
/bin/cache/update_engine.sh"
"
$FLUTTER_ROOT
/bin/cache/update_material_fonts.sh"
echo
Building flutter tool...
FLUTTER_DIR
=
"
$FLUTTER_ROOT
/packages/flutter"
...
...
packages/flutter_tools/lib/src/base/logger.dart
View file @
40598449
...
...
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'dart:async'
;
import
'dart:io'
;
final
_AnsiTerminal
_terminal
=
new
_AnsiTerminal
();
...
...
@@ -21,27 +22,59 @@ abstract class Logger {
/// to help diagnose issues with the toolchain or with their setup.
void
printTrace
(
String
message
);
/// Start an indeterminate progress display.
Status
startProgress
(
String
message
);
/// Flush any buffered output.
void
flush
()
{
}
}
class
Status
{
void
stop
({
bool
showElapsedTime:
false
})
{
}
void
cancel
()
{
}
}
class
StdoutLogger
implements
Logger
{
Status
_status
;
@override
bool
get
isVerbose
=>
false
;
@override
void
printError
(
String
message
,
[
StackTrace
stackTrace
])
{
_status
?.
cancel
();
_status
=
null
;
stderr
.
writeln
(
message
);
if
(
stackTrace
!=
null
)
stderr
.
writeln
(
stackTrace
);
}
@override
void
printStatus
(
String
message
)
=>
print
(
message
);
void
printStatus
(
String
message
)
{
_status
?.
cancel
();
_status
=
null
;
print
(
message
);
}
@override
void
printTrace
(
String
message
)
{
}
@override
Status
startProgress
(
String
message
)
{
_status
?.
cancel
();
_status
=
null
;
if
(
_terminal
.
supportsColor
)
{
_status
=
new
_AnsiStatus
(
message
);
return
_status
;
}
else
{
printStatus
(
message
);
return
new
Status
();
}
}
@override
void
flush
()
{
}
}
...
...
@@ -67,6 +100,12 @@ class BufferLogger implements Logger {
@override
void
printTrace
(
String
message
)
=>
_trace
.
writeln
(
message
);
@override
Status
startProgress
(
String
message
)
{
printStatus
(
message
);
return
new
Status
();
}
@override
void
flush
()
{
}
}
...
...
@@ -95,6 +134,12 @@ class VerboseLogger implements Logger {
lastMessage
=
new
_LogMessage
(
_LogType
.
trace
,
message
);
}
@override
Status
startProgress
(
String
message
)
{
printStatus
(
message
);
return
new
Status
();
}
@override
void
flush
()
=>
_emit
();
...
...
@@ -157,3 +202,53 @@ class _AnsiTerminal {
String
writeBold
(
String
str
)
=>
supportsColor
?
'
$_bold$str$_reset
'
:
str
;
}
class
_AnsiStatus
extends
Status
{
_AnsiStatus
(
this
.
message
)
{
stopwatch
=
new
Stopwatch
()..
start
();
stdout
.
write
(
'
${message.padRight(40)}
'
);
stdout
.
write
(
'
${_progress[0]}
'
);
timer
=
new
Timer
.
periodic
(
new
Duration
(
milliseconds:
100
),
_callback
);
}
static
final
List
<
String
>
_progress
=
<
String
>[
'-'
,
r'\'
,
'|'
,
r'/'
,
'-'
,
r'\'
,
'|'
,
'/'
];
final
String
message
;
Stopwatch
stopwatch
;
Timer
timer
;
int
index
=
1
;
bool
live
=
true
;
void
_callback
(
Timer
timer
)
{
stdout
.
write
(
'
\
b
${_progress[index]}
'
);
index
=
++
index
%
_progress
.
length
;
}
@override
void
stop
({
bool
showElapsedTime:
false
})
{
if
(!
live
)
return
;
live
=
false
;
if
(
showElapsedTime
)
{
double
seconds
=
stopwatch
.
elapsedMilliseconds
/
1000.0
;
print
(
'
\
b
\
b
\
b
\
b
${seconds.toStringAsFixed(1)}
s'
);
}
else
{
print
(
'
\
b'
);
}
timer
.
cancel
();
}
@override
void
cancel
()
{
if
(!
live
)
return
;
live
=
false
;
print
(
'
\
b'
);
timer
.
cancel
();
}
}
packages/flutter_tools/lib/src/cache.dart
0 → 100644
View file @
40598449
// Copyright 2016 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
'dart:io'
;
import
'package:path/path.dart'
as
path
;
import
'artifacts.dart'
;
import
'base/context.dart'
;
import
'base/logger.dart'
;
import
'base/process.dart'
;
import
'globals.dart'
;
// update_material_fonts
class
Cache
{
static
Cache
get
instance
=>
context
[
Cache
]
??
(
context
[
Cache
]
=
new
Cache
());
/// Return the top-level directory in the cache; this is `bin/cache`.
Directory
getRoot
()
=>
new
Directory
(
path
.
join
(
ArtifactStore
.
flutterRoot
,
'bin'
,
'cache'
));
/// Return the top-level mutable directory in the cache; this is `bin/cache/artifacts`.
Directory
getCacheArtifacts
()
{
Directory
artifacts
=
new
Directory
(
path
.
join
(
getRoot
().
path
,
'artifacts'
));
if
(!
artifacts
.
existsSync
())
artifacts
.
createSync
();
return
artifacts
;
}
/// Get a named directory from with the cache's artifact directory; for example,
/// `material_fonts` would return `bin/cache/artifacts/material_fonts`.
Directory
getArtifactDirectory
(
String
name
)
{
return
new
Directory
(
path
.
join
(
getCacheArtifacts
().
path
,
name
));
}
String
getVersionFor
(
String
kArtifactName
)
{
File
versionFile
=
new
File
(
path
.
join
(
getRoot
().
path
,
'
$kArtifactName
.version'
));
return
versionFile
.
existsSync
()
?
versionFile
.
readAsStringSync
().
trim
()
:
null
;
}
String
getStampFor
(
String
kArtifactName
)
{
File
stampFile
=
new
File
(
path
.
join
(
getRoot
().
path
,
'
$kArtifactName
.stamp'
));
return
stampFile
.
existsSync
()
?
stampFile
.
readAsStringSync
().
trim
()
:
null
;
}
void
setStampFor
(
String
kArtifactName
,
String
version
)
{
File
stampFile
=
new
File
(
path
.
join
(
getRoot
().
path
,
'
$kArtifactName
.stamp'
));
stampFile
.
writeAsStringSync
(
version
);
}
/// Download a file from the given URL and return the bytes.
static
Future
<
List
<
int
>>
_downloadFile
(
Uri
url
)
async
{
printTrace
(
'Downloading
$url
.'
);
HttpClient
httpClient
=
new
HttpClient
();
HttpClientRequest
request
=
await
httpClient
.
getUrl
(
url
);
HttpClientResponse
response
=
await
request
.
close
();
printTrace
(
'Received response statusCode=
${response.statusCode}
'
);
if
(
response
.
statusCode
!=
200
)
throw
new
Exception
(
response
.
reasonPhrase
);
BytesBuilder
responseBody
=
new
BytesBuilder
(
copy:
false
);
await
for
(
List
<
int
>
chunk
in
response
)
responseBody
.
add
(
chunk
);
return
responseBody
.
takeBytes
();
}
/// Download a file from the given url and write it to the cache.
/// If [unzip] is true, treat the url as a zip file, and unzip it to the
/// directory given.
static
Future
<
Null
>
_downloadFileToCache
(
Uri
url
,
FileSystemEntity
location
,
bool
unzip
)
async
{
if
(!
location
.
parent
.
existsSync
())
location
.
parent
.
createSync
(
recursive:
true
);
List
<
int
>
fileBytes
=
await
_downloadFile
(
url
);
if
(
unzip
)
{
if
(
location
is
Directory
&&
!
location
.
existsSync
())
location
.
createSync
(
recursive:
true
);
File
tempFile
=
new
File
(
path
.
join
(
Directory
.
systemTemp
.
path
,
'
${url.toString().hashCode}
.zip'
));
tempFile
.
writeAsBytesSync
(
fileBytes
,
flush:
true
);
// unzip -o -q zipfile -d dest
runSync
(<
String
>[
'unzip'
,
'-o'
,
'-q'
,
tempFile
.
path
,
'-d'
,
location
.
path
]);
tempFile
.
deleteSync
();
}
else
{
(
location
as
File
).
writeAsBytesSync
(
fileBytes
,
flush:
true
);
}
}
}
class
MaterialFonts
{
MaterialFonts
(
this
.
cache
);
static
const
String
kName
=
'material_fonts'
;
final
Cache
cache
;
bool
isUpToDate
()
{
if
(!
cache
.
getArtifactDirectory
(
kName
).
existsSync
())
return
false
;
return
cache
.
getVersionFor
(
kName
)
==
cache
.
getStampFor
(
kName
);
}
Future
<
Null
>
download
()
{
Status
status
=
logger
.
startProgress
(
'Downloading Material fonts...'
);
return
Cache
.
_downloadFileToCache
(
Uri
.
parse
(
cache
.
getVersionFor
(
kName
)),
cache
.
getArtifactDirectory
(
kName
),
true
).
then
((
_
)
{
cache
.
setStampFor
(
kName
,
cache
.
getVersionFor
(
kName
));
status
.
stop
(
showElapsedTime:
true
);
}).
whenComplete
(()
{
status
.
cancel
();
});
}
}
packages/flutter_tools/lib/src/commands/daemon.dart
View file @
40598449
...
...
@@ -412,6 +412,12 @@ class NotifyingLogger extends Logger {
void
printTrace
(
String
message
)
{
// This is a lot of traffic to send over the wire.
}
@override
Status
startProgress
(
String
message
)
{
printStatus
(
message
);
return
new
Status
();
}
}
class
LogMessage
{
...
...
packages/flutter_tools/lib/src/globals.dart
View file @
40598449
...
...
@@ -5,6 +5,7 @@
import
'android/android_sdk.dart'
;
import
'base/context.dart'
;
import
'base/logger.dart'
;
import
'cache.dart'
;
import
'device.dart'
;
import
'doctor.dart'
;
...
...
@@ -12,6 +13,7 @@ DeviceManager get deviceManager => context[DeviceManager];
Logger
get
logger
=>
context
[
Logger
];
AndroidSdk
get
androidSdk
=>
context
[
AndroidSdk
];
Doctor
get
doctor
=>
context
[
Doctor
];
Cache
get
cache
=>
Cache
.
instance
;
/// Display an error level message to the user. Commands should use this if they
/// fail in some way.
...
...
packages/flutter_tools/lib/src/runner/flutter_command.dart
View file @
40598449
...
...
@@ -9,6 +9,7 @@ import 'package:args/command_runner.dart';
import
'../application_package.dart'
;
import
'../build_configuration.dart'
;
import
'../cache.dart'
;
import
'../dart/pub.dart'
;
import
'../device.dart'
;
import
'../flx.dart'
as
flx
;
...
...
@@ -126,6 +127,11 @@ abstract class FlutterCommand extends Command {
return
exitCode
;
}
// Populate the cache.
MaterialFonts
materialFonts
=
new
MaterialFonts
(
cache
);
if
(!
materialFonts
.
isUpToDate
())
await
materialFonts
.
download
();
_setupToolchain
();
_setupApplicationPackages
();
...
...
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