Allow metrcs_registry.gni to take multiple config directories.

Bug: 3767
Change-Id: Idc6b17f0c6668421c191446f7c3f0d47dc3a70ab
diff --git a/metrics_registry.gni b/metrics_registry.gni
index 5597e53..7da7f4e 100644
--- a/metrics_registry.gni
+++ b/metrics_registry.gni
@@ -17,7 +17,7 @@
 #   generate_dart: (default: false) Should we generate a dart library.
 #   generate_rust: (default: false) Should we generate a rust crate.
 #   v1_project: (default: true) Is this a v1 project.
-#   directory: (default: //third_party/cobalt_config) The directory to parse.
+#   directories: (default: [//third_party/cobalt_config]) The directories to parse.
 #
 # Note: Other args are forwarded to dart_library when generate_dart is true.
 #
@@ -127,10 +127,10 @@
     output_name = target_name
   }
 
-  if (defined(invoker.directory)) {
-    cobalt_config_dir = invoker.directory
+  if (defined(invoker.directories)) {
+    cobalt_config_dirs = invoker.directories
   } else {
-    cobalt_config_dir = "//third_party/cobalt_config"
+    cobalt_config_dirs = [ "//third_party/cobalt_config" ]
   }
 
   out_format = ""
@@ -174,9 +174,10 @@
 
     depfile = "$target_gen_dir/$output_name.d"
     outputs = generated_files
-    inputs = [
-      "$cobalt_config_dir/projects.yaml",
-    ]
+    inputs = []
+    foreach(config_dir, cobalt_config_dirs) {
+      inputs += [ "$config_dir/projects.yaml" ]
+    }
 
     script = "//build/gn_run_binary.sh"
     args = [
@@ -218,10 +219,13 @@
       }
     } else {
       not_needed([ "v1_project" ])
-      args += [
-        "-config_dir",
-        rebase_path(cobalt_config_dir, root_build_dir),
-      ]
+
+      foreach(config_dir, cobalt_config_dirs) {
+        args += [
+          "-config_dir",
+          rebase_path(config_dir, root_build_dir),
+        ]
+      }
     }
 
     if (defined(customer_id)) {
diff --git a/src/bin/test_app/test_registry/BUILD.gn b/src/bin/test_app/test_registry/BUILD.gn
index 850e9d2..67179bb 100644
--- a/src/bin/test_app/test_registry/BUILD.gn
+++ b/src/bin/test_app/test_registry/BUILD.gn
@@ -9,7 +9,7 @@
 
   skip_validation = true
   for_testing = true
-  directory = "."
+  directories = [ "." ]
   namespace = "cobalt.test_app.testing"
   generate_binarypb = false
   generate_cc = true
diff --git a/src/lib/client/rust/BUILD.gn b/src/lib/client/rust/BUILD.gn
index a4e05ac..f0cec51 100644
--- a/src/lib/client/rust/BUILD.gn
+++ b/src/lib/client/rust/BUILD.gn
@@ -11,7 +11,7 @@
   project_id = 1
   generate_rust = true
 
-  directory = "tests/test_registry"
+  directories = [ "tests/test_registry" ]
 }
 
 metrics_registry("rustc_registry_ns") {
@@ -20,7 +20,7 @@
   generate_rust = true
   namespace = "one.two"
 
-  directory = "tests/test_registry"
+  directories = [ "tests/test_registry" ]
 }
 
 rustc_test("source_generator_interop_test") {
diff --git a/src/logger/BUILD.gn b/src/logger/BUILD.gn
index b2075f8..7920e39 100644
--- a/src/logger/BUILD.gn
+++ b/src/logger/BUILD.gn
@@ -383,6 +383,7 @@
   public_deps = [
     ":project_context",
     "$cobalt_root/src/pb",
+    "test_registries:multiple_project_context_test_registry_directories",
     "test_registries:project_context_test_registry",
     "//third_party/abseil-cpp/absl/strings",
     "//third_party/googletest:gtest",
diff --git a/src/logger/test_registries/BUILD.gn b/src/logger/test_registries/BUILD.gn
index 23b93da..6213847 100644
--- a/src/logger/test_registries/BUILD.gn
+++ b/src/logger/test_registries/BUILD.gn
@@ -99,7 +99,22 @@
   global = true
   skip_validation = true
   for_testing = true
-  directory = "project_context_test_registry"
+  directories = [ "project_context_test_registry" ]
+  namespace = "cobalt.logger"
+  var_name = "cobalt_registry_base64"
+
+  generate_binarypb = false
+  generate_cc = true
+}
+
+metrics_registry("multiple_project_context_test_registry_directories") {
+  global = true
+  skip_validation = true
+  for_testing = true
+  directories = [
+    "project_context_factory_test_registry",
+    "project_context_test_registry",
+  ]
   namespace = "cobalt.logger"
   var_name = "cobalt_registry_base64"
 
diff --git a/src/logger/test_registries/project_context_factory_test_registry/BUILD.gn b/src/logger/test_registries/project_context_factory_test_registry/BUILD.gn
index 723ba45..4a22e6b 100644
--- a/src/logger/test_registries/project_context_factory_test_registry/BUILD.gn
+++ b/src/logger/test_registries/project_context_factory_test_registry/BUILD.gn
@@ -9,7 +9,7 @@
   project_id = 1
   skip_validation = true
   for_testing = true
-  directory = "."
+  directories = [ "." ]
   namespace = "cobalt.logger.a"
   var_name = "cobalt_registry_base64"
 
@@ -22,7 +22,7 @@
   project_id = 1
   skip_validation = true
   for_testing = true
-  directory = "."
+  directories = [ "." ]
   namespace = "cobalt.logger.b"
   var_name = "cobalt_registry_base64"
 
@@ -34,7 +34,7 @@
   global = true
   skip_validation = true
   for_testing = true
-  directory = "."
+  directories = [ "." ]
   namespace = "cobalt.logger.c"
   var_name = "cobalt_registry_base64"