Add GetBestVisible handling to packages controller.

TEST=./run_tests
BUG=chromium:964064

Change-Id: I782c0f889488154c10f074c2b41a17e73a792568
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1683908
Tested-by: David Burger <dburger@chromium.org>
Commit-Queue: David Burger <dburger@chromium.org>
Reviewed-by: David Burger <dburger@chromium.org>
diff --git a/api/controller/packages.py b/api/controller/packages.py
index bc9ab47..6c13082 100644
--- a/api/controller/packages.py
+++ b/api/controller/packages.py
@@ -7,8 +7,10 @@
 
 from __future__ import print_function
 
+from chromite.api import validate
 from chromite.api.controller import controller_util
 from chromite.api.gen.chromite.api import binhost_pb2
+from chromite.api.gen.chromiumos import common_pb2
 from chromite.lib import build_target_util
 from chromite.lib import constants
 from chromite.lib import cros_build_lib
@@ -42,3 +44,11 @@
   except packages.Error as e:
     # Handle module errors nicely, let everything else bubble up.
     cros_build_lib.Die(e.message)
+
+@validate.require('atom')
+def GetBestVisible(input_proto, output_proto):
+  """Returns the best visible PackageInfo for the indicated atom."""
+  cpv = packages.get_best_visible(input_proto.atom)
+  package_info = common_pb2.PackageInfo()
+  controller_util.CPVToPackageInfo(cpv, package_info)
+  output_proto.package_info.CopyFrom(package_info)