Support --pet-name for cvd acloud

Per discussion with Ram, we are adding --pet-name flag to cvd acloud.

Bug: 265201102
Test: acloud create --local-instance --local-image --pet-name=Foo-Bar
Test: acloud create --local-instance --local-image
Change-Id: I92d9cff73287368c7df0e8ed818bcf6e67145812
diff --git a/host/commands/cvd/acloud/Android.bp b/host/commands/cvd/acloud/Android.bp
index bea3a56..89e19a5 100644
--- a/host/commands/cvd/acloud/Android.bp
+++ b/host/commands/cvd/acloud/Android.bp
@@ -24,8 +24,9 @@
         "config.cpp",
     ],
     static_libs: [
-        "libprotobuf-cpp-full",
         "libcuttlefish_launch_cvd_proto",
+        "libcvd_selector",
+        "libprotobuf-cpp-full",
     ],
     defaults: ["cvd_lib_defaults"],
 }
diff --git a/host/commands/cvd/acloud/converter.cpp b/host/commands/cvd/acloud/converter.cpp
index bc67252..66e5c09 100644
--- a/host/commands/cvd/acloud/converter.cpp
+++ b/host/commands/cvd/acloud/converter.cpp
@@ -39,6 +39,7 @@
 #include "host/commands/cvd/command_sequence.h"
 #include "host/commands/cvd/common_utils.h"
 #include "host/commands/cvd/instance_lock.h"  // TempDir()
+#include "host/commands/cvd/selector/instance_database_utils.h"
 #include "host/commands/cvd/selector/selector_constants.h"
 #include "host/commands/cvd/server_client.h"
 #include "host/commands/cvd/server_command/utils.h"
@@ -103,6 +104,7 @@
  public:
   INJECT(ConvertAcloudCreateCommandImpl()) {}
   ~ConvertAcloudCreateCommandImpl() override = default;
+
   Result<ConvertedAcloudCreateCommand> Convert(
       const RequestWithStdio& request) {
     auto arguments = ParseInvocation(request.Message()).arguments;
@@ -382,6 +384,16 @@
               return true;
             }));
 
+    std::optional<std::string> pet_name;
+    Flag pet_name_gflag = GflagsCompatFlag("pet-name");
+    flags.emplace_back(
+        GflagsCompatFlag("pet-name")
+            .Getter([&pet_name]() { return (pet_name ? *pet_name : ""); })
+            .Setter([&pet_name](const FlagMatch& match) {
+              pet_name = match.value;
+              return true;
+            }));
+
     CF_EXPECT(ParseFlags(flags, arguments));
     CF_EXPECT(arguments.size() == 0,
               "Unrecognized arguments:'"
@@ -620,7 +632,23 @@
     start_command.mutable_selector_opts()->add_args(
         std::string("--") + selector::SelectorFlags::kDisableDefaultGroup +
         "=true");
-    static constexpr char kAndroidProductOut[] = "ANDROID_PRODUCT_OUT";
+    if (pet_name) {
+      const auto [group_name, instance_name] =
+          CF_EXPECT(selector::BreakDeviceName(*pet_name),
+                    *pet_name << " must be a group name followed by - "
+                              << "followed by an instance name.");
+      std::string group_name_arg = "--";
+      group_name_arg.append(selector::SelectorFlags::kGroupName)
+          .append("=")
+          .append(group_name);
+      std::string instance_name_arg = "--";
+      instance_name_arg.append(selector::SelectorFlags::kInstanceName)
+          .append("=")
+          .append(instance_name);
+      start_command.mutable_selector_opts()->add_args(group_name_arg);
+      start_command.mutable_selector_opts()->add_args(instance_name_arg);
+    }
+
     auto& start_env = *start_command.mutable_env();
     if (local_image) {
       start_env[kAndroidHostOut] = host_artifacts_path->second;
diff --git a/host/commands/cvd/server_command/Android.bp b/host/commands/cvd/server_command/Android.bp
index a006b80..7bb0be1 100644
--- a/host/commands/cvd/server_command/Android.bp
+++ b/host/commands/cvd/server_command/Android.bp
@@ -53,6 +53,7 @@
     ],
     static_libs: [
         "libcvd_acloud",
+        "libcvd_selector",
     ],
     defaults: ["cvd_lib_defaults"],
 }