binhost: add RegenBuildCache

BUG=chromium:904943 b:127692338
TEST=Unit tests pass.
CQ-DEPEND=CL:1568126

Change-Id: I8ba888e802810ac48de2e9fef71da0872f286d19
Reviewed-on: https://chromium-review.googlesource.com/1567463
Commit-Ready: LaMont Jones <lamontjones@chromium.org>
Tested-by: LaMont Jones <lamontjones@chromium.org>
Reviewed-by: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/binhost.py b/api/controller/binhost.py
index 2ecf81c..69747a2 100644
--- a/api/controller/binhost.py
+++ b/api/controller/binhost.py
@@ -10,6 +10,8 @@
 import urlparse
 
 from chromite.api.gen.chromite.api import binhost_pb2
+from chromite.lib import constants
+from chromite.lib import cros_build_lib
 from chromite.lib import gs
 from chromite.service import binhost
 
@@ -63,3 +65,26 @@
   private = input_proto.private
   output_proto.output_file = binhost.SetBinhost(target, key, uri,
                                                 private=private)
+
+_overlay_type_to_name = {
+    binhost_pb2.OVERLAYTYPE_PUBLIC: constants.PUBLIC_OVERLAYS,
+    binhost_pb2.OVERLAYTYPE_PRIVATE: constants.PRIVATE_OVERLAYS,
+    binhost_pb2.OVERLAYTYPE_BOTH: constants.BOTH_OVERLAYS,
+    binhost_pb2.OVERLAYTYPE_NONE: None
+}
+
+def RegenBuildCache(input_proto):
+  """Regenerate the Build Cache for a build target.
+
+  See BinhostService documentation in api/proto/binhost.proto.
+
+  Args:
+    input_proto (RegenBuildCacheRequest): The input proto.
+    output_proto (RegenBuildCacheResponse): The output proto.
+  """
+  overlay_type = input_proto.overlay_type
+  sysroot = input_proto.sysroot
+  if overlay_type in _overlay_type_to_name:
+    binhost.RegenBuildCache(_overlay_type_to_name[overlay_type], sysroot.path)
+  else:
+    cros_build_lib.Die('Overlay_type must be specified.')