parallel_emerge: Recognize buildtime_slot_op and runtime_slot_op.

Update parallel_emerge to recognize buildtime_slot_op and
runtime_slot_op, and to fail if we recognize any unknown types of
dependencies.

BUG=chromium:418296
TEST=rush-paladin, lumpy-release, chromiumos-sdk

Change-Id: Ifbefc5bd665053515b880a5745464857618e778f
Reviewed-on: https://chromium-review.googlesource.com/220449
Reviewed-by: Bertrand Simonnet <bsimonnet@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Tested-by: David James <davidjames@chromium.org>
Commit-Queue: David James <davidjames@chromium.org>
diff --git a/scripts/parallel_emerge.py b/scripts/parallel_emerge.py
index 1963632..ff49359 100644
--- a/scripts/parallel_emerge.py
+++ b/scripts/parallel_emerge.py
@@ -566,7 +566,10 @@
         Unsanitized digraph.
       """
       binpkg_phases = set(["setup", "preinst", "postinst"])
-      needed_dep_types = set(["blocker", "buildtime", "runtime"])
+      needed_dep_types = set(["blocker", "buildtime", "buildtime_slot_op",
+                              "runtime", "runtime_slot_op"])
+      ignored_dep_types = set(["ignored", "optional", "runtime_post", "soft"])
+      all_dep_types = ignored_dep_types | needed_dep_types
       for pkg in packages:
 
         # Create an entry for the package
@@ -603,6 +606,13 @@
             deps_map[dep]["provides"].add(pkg)
             this_pkg["needs"][dep] = "/".join(dep_types)
 
+          # Verify we processed all appropriate dependency types.
+          unknown_dep_types = set(dep_types) - all_dep_types
+          if unknown_dep_types:
+            print("Unknown dependency types found:")
+            print("  %s -> %s (%s)" % (pkg, dep, "/".join(unknown_dep_types)))
+            sys.exit(1)
+
           # If there's a blocker, Portage may need to move files from one
           # package to another, which requires editing the CONTENTS files of
           # both packages. To avoid race conditions while editing this file,