Move local-image flag to converter parser

Bug: b/280670526
Test: m -j 150
Change-Id: If1c831e937a2beee1f62201ba8050dc5db16dcc3
diff --git a/host/commands/cvd/acloud/converter.cpp b/host/commands/cvd/acloud/converter.cpp
index 5184c96..ec17054 100644
--- a/host/commands/cvd/acloud/converter.cpp
+++ b/host/commands/cvd/acloud/converter.cpp
@@ -177,19 +177,6 @@
 
   std::vector<Flag> flags;
 
-  bool local_image = false;
-  std::optional<std::string> local_image_path;
-  flags.emplace_back(
-      Flag()
-          .Alias({FlagAliasMode::kFlagConsumesArbitrary, "--local-image"})
-          .Setter([&local_image, &local_image_path](const FlagMatch& m) {
-            local_image = true;
-            if (m.value != "") {
-              local_image_path = m.value;
-            }
-            return true;
-          }));
-
   std::optional<std::string> build_id;
   flags.emplace_back(
       Flag()
@@ -431,7 +418,7 @@
   std::string fetch_command_str;
   std::string fetch_cvd_args_file;
 
-  if (local_image) {
+  if (parsed_flags.local_image) {
     CF_EXPECT(!(system_branch || system_build_target || system_build_id),
               "--local-image incompatible with --system-* flags");
     CF_EXPECT(
@@ -600,10 +587,10 @@
     mixsuperimage_command.add_args("--super_image");
 
     auto& mixsuperimage_env = *mixsuperimage_command.mutable_env();
-    if (local_image) {
-      if (local_image_path) {
+    if (parsed_flags.local_image) {
+      if (parsed_flags.local_image_path) {
         // added image_dir to required_paths for MixSuperImage use
-        required_paths += ("," + local_image_path.value());
+        required_paths += ("," + parsed_flags.local_image_path.value());
       } else {
         required_paths += ",";
       }
@@ -738,9 +725,9 @@
   }
 
   auto& start_env = *start_command.mutable_env();
-  if (local_image) {
-    if (local_image_path) {
-      std::string local_image_path_str = local_image_path.value();
+  if (parsed_flags.local_image) {
+    if (parsed_flags.local_image_path) {
+      std::string local_image_path_str = parsed_flags.local_image_path.value();
       // Python acloud source: local_image_local_instance.py;l=81
       // this acloud flag is equal to launch_cvd flag system_image_dir
       start_command.add_args("-system_image_dir");
diff --git a/host/commands/cvd/acloud/create_converter_parser.cpp b/host/commands/cvd/acloud/create_converter_parser.cpp
index bac992d..676daa9 100644
--- a/host/commands/cvd/acloud/create_converter_parser.cpp
+++ b/host/commands/cvd/acloud/create_converter_parser.cpp
@@ -63,6 +63,19 @@
   return verbose_flag;
 }
 
+static Flag LocalImageFlag(bool& local_image,
+                           std::optional<std::string>& local_image_path) {
+  return Flag()
+      .Alias({FlagAliasMode::kFlagConsumesArbitrary, "--local-image"})
+      .Setter([&local_image, &local_image_path](const FlagMatch& m) {
+        local_image = true;
+        if (m.value != "") {
+          local_image_path = m.value;
+        }
+        return true;
+      });
+}
+
 Result<ConverterParsed> ParseAcloudCreateFlags(cvd_common::Args& arguments) {
   std::vector<Flag> flags;
 
@@ -91,6 +104,10 @@
   std::optional<std::string> branch;
   flags.emplace_back(CF_EXPECT(AcloudCompatFlag({"branch"}, branch)));
 
+  bool local_image = false;
+  std::optional<std::string> local_image_path;
+  flags.emplace_back(LocalImageFlag(local_image, local_image_path));
+
   CF_EXPECT(ParseFlags(flags, arguments));
   return ConverterParsed{
       .local_instance_set = local_instance_set,
@@ -101,6 +118,8 @@
       .local_system_image = local_system_image,
       .verbose = verbose,
       .branch = branch,
+      .local_image = local_image,
+      .local_image_path = local_image_path,
   };
 }
 
diff --git a/host/commands/cvd/acloud/create_converter_parser.h b/host/commands/cvd/acloud/create_converter_parser.h
index 6ad2d8a..e6bcf5e 100644
--- a/host/commands/cvd/acloud/create_converter_parser.h
+++ b/host/commands/cvd/acloud/create_converter_parser.h
@@ -34,6 +34,8 @@
   std::optional<std::string> local_system_image;
   bool verbose;
   std::optional<std::string> branch;
+  bool local_image;
+  std::optional<std::string> local_image_path;
 };
 
 Result<ConverterParsed> ParseAcloudCreateFlags(cvd_common::Args& arguments);