controller_util: Add a util module for controllers.

BUG=None
TEST=run_tests, new tests

Change-Id: Ib938adad72dfab09133958ded11869ff4c09a69e
Reviewed-on: https://chromium-review.googlesource.com/1577651
Commit-Ready: Alex Klein <saklein@chromium.org>
Tested-by: Alex Klein <saklein@chromium.org>
Reviewed-by: Evan Hernandez <evanhernandez@chromium.org>
diff --git a/api/controller/sysroot.py b/api/controller/sysroot.py
index c30922b..5e6f82e 100644
--- a/api/controller/sysroot.py
+++ b/api/controller/sysroot.py
@@ -7,9 +7,9 @@
 
 from __future__ import print_function
 
+from chromite.api.controller import controller_util
 from chromite.lib import build_target_util
 from chromite.lib import cros_build_lib
-from chromite.lib import portage_util
 from chromite.lib import sysroot_lib
 from chromite.service import sysroot
 
@@ -69,7 +69,7 @@
     # Error installing - populate the failed package info.
     for package in e.failed_toolchain_info:
       package_info = output_proto.failed_packages.add()
-      _CPVToPackageInfo(package, package_info)
+      controller_util.CPVToPackageInfo(package, package_info)
 
     return RC_ERROR
 
@@ -80,7 +80,7 @@
 
   sysroot_path = input_proto.sysroot.path
   build_target_name = input_proto.sysroot.build_target.name
-  packages = map(_PackageInfoToCPV, input_proto.packages)
+  packages = map(controller_util.PackageInfoToString, input_proto.packages)
 
   if not build_target_name:
     cros_build_lib.Die('Build target name is required.')
@@ -102,31 +102,6 @@
   except sysroot_lib.PackageInstallError as e:
     for package in e.failed_packages:
       package_info = output_proto.failed_packages.add()
-      _CPVToPackageInfo(package, package_info)
+      controller_util.CPVToPackageInfo(package, package_info)
 
     return RC_ERROR
-
-
-def _CPVToPackageInfo(cpv, package_info):
-  """Helper to translate CPVs into a PackageInfo message."""
-  package_info.package_name = cpv.package
-  if cpv.category:
-    package_info.category = cpv.category
-  if cpv.version:
-    package_info.version = cpv.version
-
-
-def _PackageInfoToCPV(package_info):
-  """Helper to translate a PackageInfo message into a CPV."""
-  if not package_info or not package_info.package_name:
-    return None
-
-  # Combine the components into the full CPV string that SplitCPV parses.
-  # TODO: Turn portage_util.CPV into a class that can handle building out an
-  #  instance from components.
-  c = ('%s/' % package_info.category) if package_info.category else ''
-  p = package_info.package_name
-  v = ('-%s' % package_info.version) if package_info.version else ''
-  cpv = '%s%s%s' % (c, p, v)
-
-  return portage_util.SplitCPV(cpv)