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 {