Revert "Replace netls and netaddr with dev_finder" (#26249)
* Revert "Replace netls and netaddr with dev_finder (#26090)"
This reverts commit eee154affbce8a4d69ee4dbfed332edc7550d264.
diff --git a/packages/flutter_tools/bin/fuchsia_attach.dart b/packages/flutter_tools/bin/fuchsia_attach.dart
index 0180b73..71c0d9f 100644
--- a/packages/flutter_tools/bin/fuchsia_attach.dart
+++ b/packages/flutter_tools/bin/fuchsia_attach.dart
@@ -41,7 +41,6 @@
final String buildDirectory = argResults['build-dir'];
final File frontendServer = fs.file('$buildDirectory/host_x64/gen/third_party/flutter/frontend_server/frontend_server_tool.snapshot');
final File sshConfig = fs.file('$buildDirectory/ssh-keys/ssh_config');
- final File devFinder = fs.file('$buildDirectory/host_x64/dev_finder');
final File platformKernelDill = fs.file('$buildDirectory/flutter_runner_patched_sdk/platform_strong.dill');
final File flutterPatchedSdk = fs.file('$buildDirectory/flutter_runner_patched_sdk');
final String packages = '$buildDirectory/dartlang/gen/$path/${name}_dart_library.packages';
@@ -92,7 +91,7 @@
muteCommandLogging: false,
verboseHelp: false,
overrides: <Type, Generator>{
- FuchsiaArtifacts: () => FuchsiaArtifacts(sshConfig: sshConfig, devFinder: devFinder),
+ FuchsiaArtifacts: () => FuchsiaArtifacts(sshConfig: sshConfig),
Artifacts: () => OverrideArtifacts(
parent: CachedArtifacts(),
frontendServer: frontendServer,
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
index ed48b22..be89010 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
@@ -108,8 +108,12 @@
if (!fuchsiaWorkflow.canListDevices) {
return <Device>[];
}
- final String text = await fuchsiaSdk.listDevices();
- final List<FuchsiaDevice> devices = parseListDevices(text);
+ final String text = await fuchsiaSdk.netls();
+ final List<FuchsiaDevice> devices = <FuchsiaDevice>[];
+ for (String name in parseFuchsiaDeviceOutput(text)) {
+ final String id = await fuchsiaSdk.netaddr();
+ devices.add(FuchsiaDevice(id, name: name));
+ }
return devices;
}
@@ -117,18 +121,24 @@
Future<List<String>> getDiagnostics() async => const <String>[];
}
+/// Parses output from the netls tool into fuchsia devices names.
+///
+/// Example output:
+/// $ ./netls
+/// > device liliac-shore-only-last (fe80::82e4:da4d:fe81:227d/3)
@visibleForTesting
-List<FuchsiaDevice> parseListDevices(String text) {
- final List<FuchsiaDevice> devices = <FuchsiaDevice>[];
+List<String> parseFuchsiaDeviceOutput(String text) {
+ final List<String> names = <String>[];
for (String rawLine in text.trim().split('\n')) {
final String line = rawLine.trim();
- // ['ip', 'device name']
+ if (!line.startsWith('device'))
+ continue;
+ // ['device', 'device name', '(id)']
final List<String> words = line.split(' ');
final String name = words[1];
- final String id = words[0];
- devices.add(FuchsiaDevice(id, name: name));
+ names.add(name);
}
- return devices;
+ return names;
}
class FuchsiaDevice extends Device {
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_sdk.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_sdk.dart
index a9f95a6..63f91e1 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_sdk.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_sdk.dart
@@ -24,15 +24,21 @@
/// This workflow assumes development within the fuchsia source tree,
/// including a working fx command-line tool in the user's PATH.
class FuchsiaSdk {
+ static const List<String> _netaddrCommand = <String>['fx', 'netaddr', '--fuchsia', '--nowait'];
+ static const List<String> _netlsCommand = <String>['fx', 'netls', '--nowait'];
static const List<String> _syslogCommand = <String>['fx', 'syslog', '--clock', 'Local'];
+ /// Invokes the `netaddr` command.
+ ///
+ /// This returns the network address of an attached fuchsia device. Does
+ /// not currently support multiple attached devices.
+ ///
/// Example output:
- /// $ dev_finder list -full
- /// > 192.168.42.56 paper-pulp-bush-angel
- Future<String> listDevices() async {
+ /// $ fx netaddr --fuchsia --nowait
+ /// > fe80::9aaa:fcff:fe60:d3af%eth1
+ Future<String> netaddr() async {
try {
- final String path = fuchsiaArtifacts.devFinder.absolute.path;
- final RunResult process = await runAsync(<String>[path, 'list', '-full']);
+ final RunResult process = await runAsync(_netaddrCommand);
return process.stdout.trim();
} on ArgumentError catch (exception) {
throwToolExit('$exception');
@@ -63,19 +69,36 @@
}
return null;
}
+
+ /// Invokes the `netls` command.
+ ///
+ /// This lists attached fuchsia devices with their name and address. Does
+ /// not currently support multiple attached devices.
+ ///
+ /// Example output:
+ /// $ fx netls --nowait
+ /// > device liliac-shore-only-last (fe80::82e4:da4d:fe81:227d/3)
+ Future<String> netls() async {
+ try {
+ final RunResult process = await runAsync(_netlsCommand);
+ return process.stdout;
+ } on ArgumentError catch (exception) {
+ throwToolExit('$exception');
+ }
+ return null;
+ }
}
/// Fuchsia-specific artifacts used to interact with a device.
class FuchsiaArtifacts {
/// Creates a new [FuchsiaArtifacts].
///
- /// May optionally provide a file `sshConfig` file and `devFinder` file.
- FuchsiaArtifacts({File sshConfig, File devFinder})
- : _sshConfig = sshConfig,
- _devFinder = devFinder;
+ /// May optionally provide a file `sshConfig` file.
+ FuchsiaArtifacts({File sshConfig})
+ : _sshConfig = sshConfig;
/// The location of the SSH configuration file used to interact with a
- /// Fuchsia device.
+ /// fuchsia device.
///
/// Requires the env variable `BUILD_DIR` to be set if not provided by
/// the constructor.
@@ -91,22 +114,4 @@
return _sshConfig;
}
File _sshConfig;
-
- /// The location of the dev finder tool used to locate connected
- /// Fuchsia devices.
- ///
- /// Requires the env variable `BUILD_DIR` to be set if not provided by
- /// the constructor.
- File get devFinder {
- if (_devFinder == null) {
- final String buildDirectory = platform.environment['BUILD_DIR'];
- if (buildDirectory == null) {
- throwToolExit('BUILD_DIR must be supplied to dev_finder. For example:\n'
- ' export BUILD_DIR=path/to/fuchsia/out/x64\n');
- }
- _devFinder = fs.file('$buildDirectory/host_x64/dev_finder');
- }
- return _devFinder;
- }
- File _devFinder;
}
diff --git a/packages/flutter_tools/test/fuchsia/fuchsa_device_test.dart b/packages/flutter_tools/test/fuchsia/fuchsa_device_test.dart
index db1ce50..fb192f0 100644
--- a/packages/flutter_tools/test/fuchsia/fuchsa_device_test.dart
+++ b/packages/flutter_tools/test/fuchsia/fuchsa_device_test.dart
@@ -29,13 +29,12 @@
expect(device.name, name);
});
- test('parse dev_finder output', () {
- const String example = '192.168.42.56 paper-pulp-bush-angel';
- final List<FuchsiaDevice> names = parseListDevices(example);
+ test('parse netls log output', () {
+ const String example = 'device lilia-shore-only-last (fe80::0000:a00a:f00f:2002/3)';
+ final List<String> names = parseFuchsiaDeviceOutput(example);
expect(names.length, 1);
- expect(names.first.name, 'paper-pulp-bush-angel');
- expect(names.first.id, '192.168.42.56');
+ expect(names.first, 'lilia-shore-only-last');
});
test('default capabilities', () async {