dependency: prefer sysroot in GetBuildDependencyGraphRequest

Also freshen API python bindings.

BUG=chromium:1081828, chromium:1053703
TEST=unit tests pass

Cq-Depend: chromium:2197281
Change-Id: I27b98a40b4dbc6197c8a07fc1098c5c45ebc4be6
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2197226
Tested-by: LaMont Jones <lamontjones@chromium.org>
Commit-Queue: LaMont Jones <lamontjones@chromium.org>
Reviewed-by: Alex Klein <saklein@chromium.org>
Reviewed-by: Sean Abraham <seanabraham@chromium.org>
diff --git a/api/controller/dependency.py b/api/controller/dependency.py
index ea243c1..fd3a434 100644
--- a/api/controller/dependency.py
+++ b/api/controller/dependency.py
@@ -16,6 +16,8 @@
 from chromite.api import faux
 from chromite.api import validate
 from chromite.api.controller import controller_util
+# TODO(crbug/1081828): stop using build_target and drop it from the proto.
+from chromite.lib import cros_build_lib
 from chromite.lib import portage_util
 from chromite.service import dependency
 
@@ -32,6 +34,9 @@
     graph: the proto object that represents the dependency graph (see DepGraph
       message in chromite/api/depgraph.proto)
   """
+  graph.sysroot.build_target.name = json_map['target_board']
+  graph.sysroot.path = json_map['sysroot_path']
+  # TODO(crbug/1081828): Drop this when no longer used.
   graph.build_target.name = json_map['target_board']
 
   for data in json_map['package_deps'].values():
@@ -62,7 +67,6 @@
 
 @faux.success(_GetBuildDependencyGraphResponse)
 @faux.empty_error
-@validate.require('build_target.name')
 @validate.validation_complete
 def GetBuildDependencyGraph(input_proto, output_proto, _config):
   """Create the build dependency graph.
@@ -72,10 +76,18 @@
     output_proto (GetBuildDependencyGraphResponse): The empty output message.
     _config (api_config.ApiConfig): The API call config.
   """
-  board = input_proto.build_target.name
+  if input_proto.HasField('sysroot'):
+    board = input_proto.sysroot.build_target.name
+    sysroot_path = input_proto.sysroot.path
+  else:
+    # TODO(crbug/1081828): stop using build_target and drop it from the proto.
+    board = input_proto.build_target.name
+    sysroot_path = cros_build_lib.GetSysroot(board or None)
+
   packages = [controller_util.PackageInfoToCPV(x) for x in input_proto.packages]
 
-  json_map, sdk_json_map = dependency.GetBuildDependency(board, packages)
+  json_map, sdk_json_map = dependency.GetBuildDependency(sysroot_path, board,
+                                                         packages)
   AugmentDepGraphProtoFromJsonMap(json_map, output_proto.dep_graph)
   AugmentDepGraphProtoFromJsonMap(sdk_json_map, output_proto.sdk_dep_graph)
 
diff --git a/api/controller/dependency_unittest.py b/api/controller/dependency_unittest.py
index 34758c6..9e97b78 100644
--- a/api/controller/dependency_unittest.py
+++ b/api/controller/dependency_unittest.py
@@ -30,6 +30,7 @@
     self.response = depgraph_pb2.GetBuildDependencyGraphResponse()
     self.json_deps = {
         'target_board': 'deathstar',
+        'sysroot_path': '/build/deathstar',
         'package_deps': {
             'commander/darthvader-1.49.3.3': {
                 'action': 'merge',
@@ -120,7 +121,7 @@
                                        self.api_config)
     self.assertEqual(self.response.dep_graph.build_target.name, 'deathstar')
     pkg_to_cpv.assert_called_once_with(package)
-    get_dep.assert_called_once_with('target', [pkg_mock])
+    get_dep.assert_called_once_with('/build/target', 'target', [pkg_mock])
 
   def testValidateOnly(self):
     """Sanity check that a validate only call does not execute any logic."""