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
5a85c0d8
Unverified
Commit
5a85c0d8
authored
3 years ago
by
Kenzie (Schmoll) Davisson
Committed by
GitHub
3 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Launch DevTools from the 'dart devtools' command instead of pub (#90894)
parent
15967669
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
2 additions
and
673 deletions
+2
-673
README.md
bin/internal/README.md
+0
-4
devtools.version
bin/internal/devtools.version
+0
-1
test.dart
dev/bots/test.dart
+0
-19
executable.dart
packages/flutter_tools/lib/executable.dart
+0
-3
context_runner.dart
packages/flutter_tools/lib/src/context_runner.dart
+0
-3
devtools_launcher.dart
packages/flutter_tools/lib/src/devtools_launcher.dart
+1
-133
persistent_tool_state.dart
packages/flutter_tools/lib/src/persistent_tool_state.dart
+0
-15
devtools_launcher_test.dart
...tter_tools/test/general.shard/devtools_launcher_test.dart
+1
-467
persistent_tool_state_test.dart
..._tools/test/general.shard/persistent_tool_state_test.dart
+0
-19
resident_devtools_handler_test.dart
...ls/test/general.shard/resident_devtools_handler_test.dart
+0
-9
No files found.
bin/internal/README.md
View file @
5a85c0d8
...
...
@@ -25,7 +25,3 @@ of the `flutter/plugins` repository to be used for testing. The
`flutter/flutter`
; it is only used as part of the test suite for
verification, and the pinned version here makes sure that tests are
deterministic at each
`flutter/flutter`
commit.
The
`bin/internal/devtools.version`
file specifies the version of the
`devtools`
package on
`pub`
that should be activated when running the
Flutter command line tool.
This diff is collapsed.
Click to expand it.
bin/internal/devtools.version
deleted
100644 → 0
View file @
15967669
2.6.0
This diff is collapsed.
Click to expand it.
dev/bots/test.dart
View file @
5a85c0d8
...
...
@@ -308,25 +308,6 @@ Future<void> _runIntegrationToolTests() async {
.
map
<
String
>((
FileSystemEntity
entry
)
=>
path
.
relative
(
entry
.
path
,
from:
toolsPath
))
.
where
((
String
testPath
)
=>
path
.
basename
(
testPath
).
endsWith
(
'_test.dart'
)).
toList
();
// Make sure devtools is ready first, because that might take a while and we don't
// want any of the tests to time out while they themselves try to activate devtools.
final
Map
<
String
,
String
>
pubEnvironment
=
<
String
,
String
>{
'FLUTTER_ROOT'
:
flutterRoot
,
};
if
(
Directory
(
pubCache
).
existsSync
())
{
pubEnvironment
[
'PUB_CACHE'
]
=
pubCache
;
}
await
runCommand
(
pub
,
<
String
>[
'global'
,
'activate'
,
'devtools'
,
File
(
path
.
join
(
flutterRoot
,
'bin'
,
'internal'
,
'devtools.version'
)).
readAsStringSync
(),
],
environment:
pubEnvironment
,
);
await
_pubRunTest
(
toolsPath
,
forceSingleCore:
true
,
...
...
This diff is collapsed.
Click to expand it.
packages/flutter_tools/lib/executable.dart
View file @
5a85c0d8
...
...
@@ -108,11 +108,8 @@ Future<void> main(List<String> args) async {
// devtools source code.
DevtoolsLauncher:
()
=>
DevtoolsServerLauncher
(
processManager:
globals
.
processManager
,
fileSystem:
globals
.
fs
,
dartExecutable:
globals
.
artifacts
.
getHostArtifact
(
HostArtifact
.
engineDartBinary
).
path
,
logger:
globals
.
logger
,
platform:
globals
.
platform
,
persistentToolState:
globals
.
persistentToolState
,
),
Logger:
()
{
final
LoggerFactory
loggerFactory
=
LoggerFactory
(
...
...
This diff is collapsed.
Click to expand it.
packages/flutter_tools/lib/src/context_runner.dart
View file @
5a85c0d8
...
...
@@ -215,11 +215,8 @@ Future<T> runInContext<T>(
),
DevtoolsLauncher:
()
=>
DevtoolsServerLauncher
(
processManager:
globals
.
processManager
,
fileSystem:
globals
.
fs
,
dartExecutable:
globals
.
artifacts
.
getHostArtifact
(
HostArtifact
.
engineDartBinary
).
path
,
logger:
globals
.
logger
,
platform:
globals
.
platform
,
persistentToolState:
globals
.
persistentToolState
,
),
Doctor:
()
=>
Doctor
(
logger:
globals
.
logger
),
DoctorValidatorsProvider:
()
=>
DoctorValidatorsProvider
.
defaultInstance
,
...
...
This diff is collapsed.
Click to expand it.
packages/flutter_tools/lib/src/devtools_launcher.dart
View file @
5a85c0d8
...
...
@@ -9,55 +9,31 @@ import 'dart:async';
import
'package:meta/meta.dart'
;
import
'package:process/process.dart'
;
import
'base/file_system.dart'
;
import
'base/io.dart'
as
io
;
import
'base/logger.dart'
;
import
'base/platform.dart'
;
import
'cache.dart'
;
import
'convert.dart'
;
import
'persistent_tool_state.dart'
;
import
'resident_runner.dart'
;
/// An implementation of the devtools launcher that uses `pub global activate` to
/// start a server instance.
class
DevtoolsServerLauncher
extends
DevtoolsLauncher
{
DevtoolsServerLauncher
({
@required
Platform
platform
,
@required
ProcessManager
processManager
,
@required
FileSystem
fileSystem
,
@required
String
dartExecutable
,
@required
Logger
logger
,
@required
PersistentToolState
persistentToolState
,
@visibleForTesting
io
.
HttpClient
httpClient
,
})
:
_processManager
=
processManager
,
_fileSystem
=
fileSystem
,
_dartExecutable
=
dartExecutable
,
_logger
=
logger
,
_platform
=
platform
,
_persistentToolState
=
persistentToolState
,
_httpClient
=
httpClient
??
io
.
HttpClient
();
_logger
=
logger
;
final
ProcessManager
_processManager
;
final
FileSystem
_fileSystem
;
final
String
_dartExecutable
;
final
Logger
_logger
;
final
Platform
_platform
;
final
PersistentToolState
_persistentToolState
;
final
io
.
HttpClient
_httpClient
;
final
Completer
<
void
>
_processStartCompleter
=
Completer
<
void
>();
io
.
Process
_devToolsProcess
;
static
final
RegExp
_serveDevToolsPattern
=
RegExp
(
r'Serving DevTools at ((http|//)[a-zA-Z0-9:/=_\-\.\[\]]+?)\.?$'
);
static
const
String
_pubHostedUrlKey
=
'PUB_HOSTED_URL'
;
static
String
_devtoolsVersion
;
static
String
devtoolsVersion
(
FileSystem
fs
)
{
return
_devtoolsVersion
??=
fs
.
file
(
fs
.
path
.
join
(
Cache
.
flutterRoot
,
'bin'
,
'internal'
,
'devtools.version'
),
).
readAsStringSync
();
}
@override
Future
<
void
>
get
processStart
=>
_processStartCompleter
.
future
;
...
...
@@ -67,61 +43,8 @@ class DevtoolsServerLauncher extends DevtoolsLauncher {
// Place this entire method in a try/catch that swallows exceptions because
// this method is guaranteed not to return a Future that throws.
try
{
bool
offline
=
false
;
bool
useOverrideUrl
=
false
;
try
{
Uri
uri
;
if
(
_platform
.
environment
.
containsKey
(
_pubHostedUrlKey
))
{
useOverrideUrl
=
true
;
uri
=
Uri
.
parse
(
_platform
.
environment
[
_pubHostedUrlKey
]);
}
else
{
uri
=
Uri
.
https
(
'pub.dev'
,
''
);
}
final
io
.
HttpClientRequest
request
=
await
_httpClient
.
headUrl
(
uri
);
final
io
.
HttpClientResponse
response
=
await
request
.
close
();
await
response
.
drain
<
void
>();
if
(
response
.
statusCode
!=
io
.
HttpStatus
.
ok
)
{
_logger
.
printTrace
(
'Skipping devtools launch because pub.dev responded with HTTP '
'status code
${response.statusCode}
instead of
${io.HttpStatus.ok}
.'
,
);
offline
=
true
;
}
}
on
Exception
catch
(
e
)
{
_logger
.
printTrace
(
'Skipping devtools launch because connecting to pub.dev failed with
$e
'
,
);
offline
=
true
;
}
on
ArgumentError
{
if
(!
useOverrideUrl
)
{
rethrow
;
}
// The user supplied a custom pub URL that was invalid, pretend to be offline
// and inform them that the URL was invalid.
offline
=
true
;
_logger
.
printError
(
'PUB_HOSTED_URL was set to an invalid URL: "
${_platform.environment[_pubHostedUrlKey]}
".'
);
}
bool
devToolsActive
=
await
_checkForActiveDevTools
();
if
(!
offline
)
{
await
_activateDevTools
(
throttleUpdates:
devToolsActive
);
if
(!
devToolsActive
)
{
devToolsActive
=
await
_checkForActiveDevTools
();
}
}
if
(!
devToolsActive
)
{
// We don't have devtools installed and installing it failed;
// _activateDevTools will have reported the error already.
return
;
}
_devToolsProcess
=
await
_processManager
.
start
(<
String
>[
_dartExecutable
,
'pub'
,
'global'
,
'run'
,
'devtools'
,
'--no-launch-browser'
,
if
(
vmServiceUri
!=
null
)
'--vm-uri=
$vmServiceUri
'
,
...
...
@@ -149,61 +72,6 @@ class DevtoolsServerLauncher extends DevtoolsLauncher {
}
}
static
final
RegExp
_devToolsInstalledPattern
=
RegExp
(
r'^devtools '
,
multiLine:
true
);
/// Check if the DevTools package is already active by running "pub global list".
Future
<
bool
>
_checkForActiveDevTools
()
async
{
final
io
.
ProcessResult
_pubGlobalListProcess
=
await
_processManager
.
run
(
<
String
>[
_dartExecutable
,
'pub'
,
'global'
,
'list'
],
);
return
_pubGlobalListProcess
.
stdout
.
toString
().
contains
(
_devToolsInstalledPattern
);
}
/// Helper method to activate the DevTools pub package.
///
/// If throttleUpdates is true, then this is a no-op if it was run in
/// the last twelve hours. It should be set to true if devtools is known
/// to already be installed.
///
/// Return value indicates if DevTools was installed or updated.
Future
<
bool
>
_activateDevTools
({
@required
bool
throttleUpdates
})
async
{
assert
(
throttleUpdates
!=
null
);
const
Duration
_throttleDuration
=
Duration
(
hours:
12
);
if
(
throttleUpdates
)
{
if
(
_persistentToolState
.
lastDevToolsActivationTime
!=
null
&&
DateTime
.
now
().
difference
(
_persistentToolState
.
lastDevToolsActivationTime
)
<
_throttleDuration
)
{
_logger
.
printTrace
(
'DevTools activation throttled until
${_persistentToolState.lastDevToolsActivationTime.add(_throttleDuration).toLocal()}
.'
);
return
false
;
// Throttled.
}
}
final
Status
status
=
_logger
.
startProgress
(
'Activating Dart DevTools...'
);
try
{
final
io
.
ProcessResult
_devToolsActivateProcess
=
await
_processManager
.
run
(<
String
>[
_dartExecutable
,
'pub'
,
'global'
,
'activate'
,
'devtools'
,
devtoolsVersion
(
_fileSystem
),
]);
if
(
_devToolsActivateProcess
.
exitCode
!=
0
)
{
_logger
.
printError
(
'Error running `pub global activate devtools`:
\n
'
'
${_devToolsActivateProcess.stderr}
'
);
return
false
;
// Failed to activate.
}
_persistentToolState
.
lastDevToolsActivation
=
DateTime
.
now
();
return
true
;
// Activation succeeded!
}
on
Exception
catch
(
e
,
_
)
{
_logger
.
printError
(
'Error running `pub global activate devtools`:
$e
'
);
return
false
;
}
finally
{
status
.
stop
();
}
}
@override
Future
<
DevToolsServerAddress
>
serve
()
async
{
if
(
activeDevToolsServer
==
null
)
{
...
...
This diff is collapsed.
Click to expand it.
packages/flutter_tools/lib/src/persistent_tool_state.dart
View file @
5a85c0d8
...
...
@@ -55,10 +55,6 @@ abstract class PersistentToolState {
/// Whether this client was already determined to be or not be a bot.
bool
?
get
isRunningOnBot
;
set
runningOnBot
(
bool
value
);
// Enforced nonnull setter.
/// The last time the DevTools package was activated from pub.
DateTime
?
get
lastDevToolsActivationTime
;
set
lastDevToolsActivation
(
DateTime
value
);
// Enforced nonnull setter.
}
class
_DefaultPersistentToolState
implements
PersistentToolState
{
...
...
@@ -92,7 +88,6 @@ class _DefaultPersistentToolState implements PersistentToolState {
Channel
.
stable
:
'last-active-stable-version'
};
static
const
String
_kBotKey
=
'is-bot'
;
static
const
String
_kLastDevToolsActivationTimeKey
=
'last-devtools-activation-time'
;
static
const
String
_kLicenseHash
=
'license-hash'
;
final
Config
_config
;
...
...
@@ -140,14 +135,4 @@ class _DefaultPersistentToolState implements PersistentToolState {
set
runningOnBot
(
bool
value
)
{
_config
.
setValue
(
_kBotKey
,
value
);
}
@override
DateTime
?
get
lastDevToolsActivationTime
{
final
String
?
value
=
_config
.
getValue
(
_kLastDevToolsActivationTimeKey
)
as
String
?;
return
value
!=
null
?
DateTime
.
parse
(
value
)
:
null
;
}
@override
set
lastDevToolsActivation
(
DateTime
time
)
=>
_config
.
setValue
(
_kLastDevToolsActivationTimeKey
,
time
.
toString
());
}
This diff is collapsed.
Click to expand it.
packages/flutter_tools/test/general.shard/devtools_launcher_test.dart
View file @
5a85c0d8
This diff is collapsed.
Click to expand it.
packages/flutter_tools/test/general.shard/persistent_tool_state_test.dart
View file @
5a85c0d8
...
...
@@ -57,23 +57,4 @@ void main() {
expect
(
state2
.
lastActiveVersion
(
Channel
.
beta
),
'ghi'
);
expect
(
state2
.
lastActiveVersion
(
Channel
.
stable
),
'jkl'
);
});
testWithoutContext
(
'lastDevToolsActivationTime can be cached and stored'
,
()
{
final
MemoryFileSystem
fileSystem
=
MemoryFileSystem
.
test
();
final
Directory
directory
=
fileSystem
.
directory
(
'state_dir'
)..
createSync
();
final
PersistentToolState
state1
=
PersistentToolState
.
test
(
directory:
directory
,
logger:
BufferLogger
.
test
(),
);
final
DateTime
time
=
DateTime
.
now
();
state1
.
lastDevToolsActivation
=
time
;
final
PersistentToolState
state2
=
PersistentToolState
.
test
(
directory:
directory
,
logger:
BufferLogger
.
test
(),
);
expect
(
state2
.
lastDevToolsActivationTime
,
equals
(
time
));
});
}
This diff is collapsed.
Click to expand it.
packages/flutter_tools/test/general.shard/resident_devtools_handler_test.dart
View file @
5a85c0d8
...
...
@@ -6,9 +6,7 @@
import
'dart:async'
;
import
'package:file/memory.dart'
;
import
'package:flutter_tools/src/base/logger.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:flutter_tools/src/build_info.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/device.dart'
;
...
...
@@ -78,10 +76,6 @@ final FakeVmServiceRequest listViews = FakeVmServiceRequest(
void
main
(
)
{
Cache
.
flutterRoot
=
''
;
final
MemoryFileSystem
fakefs
=
MemoryFileSystem
.
test
()
..
directory
(
'bin'
).
createSync
()
..
directory
(
'bin/internal'
).
createSync
()
..
file
(
'bin/internal/devtools.version'
).
writeAsStringSync
(
'1.0.0'
);
testWithoutContext
(
'Does not serve devtools if launcher is null'
,
()
async
{
final
ResidentDevtoolsHandler
handler
=
FlutterResidentDevtoolsHandler
(
...
...
@@ -110,11 +104,8 @@ void main() {
testWithoutContext
(
'Can use devtools with existing devtools URI'
,
()
async
{
final
DevtoolsServerLauncher
launcher
=
DevtoolsServerLauncher
(
processManager:
FakeProcessManager
.
empty
(),
fileSystem:
fakefs
,
dartExecutable:
'dart'
,
logger:
BufferLogger
.
test
(),
platform:
FakePlatform
(),
persistentToolState:
null
,
);
final
ResidentDevtoolsHandler
handler
=
FlutterResidentDevtoolsHandler
(
// Uses real devtools instance which should be a no-op if
...
...
This diff is collapsed.
Click to expand it.
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