scripts: package_has_missing_deps: improve logging output

Add some more debug statements to track down the internals, and
make sure existing user-facing output is sorted for stability.

BUG=None
TEST=`./scripts/package_has_missing_deps --board=betty --match chromeos-base/secanomalyd --debug`

Change-Id: Ie7fc1ddb2cc126a332f007326230b54b1ec36d37
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/4882560
Commit-Queue: Allen Webb <allenwebb@google.com>
Tested-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Allen Webb <allenwebb@google.com>
diff --git a/scripts/package_has_missing_deps.py b/scripts/package_has_missing_deps.py
index f72f7cc..192f08a 100644
--- a/scripts/package_has_missing_deps.py
+++ b/scripts/package_has_missing_deps.py
@@ -14,6 +14,7 @@
 
 import argparse
 import collections
+import logging
 import os
 from pathlib import Path
 import pprint
@@ -172,6 +173,7 @@
                 continue
             if info.pv and info.pv != dep_info.pv:
                 continue
+            logging.debug("query: %s: matched %s", query, dep_info.cpvr)
             yield package
 
     def get_required_libs(self, package) -> Set[str]:
@@ -198,6 +200,7 @@
         for dep in portage_util.GetFlattenedDepsForPackage(
             cpvr, board=self.board, depth=1
         ):
+            logging.debug("%s: found package dependency: %s", cpvr, dep)
             info = package_info.parse(dep)
             if not info:
                 continue
@@ -210,6 +213,8 @@
             pkg = self.db.GetInstalledPackage(info.category, info.pvr)
             if pkg:
                 deps.append(pkg)
+            else:
+                logging.warning("%s: could not find installed %s", cpvr, dep)
 
         for dep in expanded:
             deps.extend(self.get_packages(dep))
@@ -281,6 +286,11 @@
         # since a package can depend on its own libs.
         provided_libs.update(self.provided_libs(package))
         for pkg in self.get_deps(package):
+            logging.debug(
+                "%s: loading libs from dependency %s",
+                package.package_info.cpvr,
+                pkg.package_info.cpvr,
+            )
             provided_libs.update(self.provided_libs(pkg))
         return provided_libs
 
@@ -397,25 +407,25 @@
     provided = resolver.get_provided_from_all_deps(package)
     if debug:
         print("provided")
-        pprint.pprint(provided)
+        pprint.pprint(sorted(provided))
 
     available = provided.union(implicit)
     required = resolver.get_required_libs(package)
     if debug:
         print("required")
-        pprint.pprint(required)
+        pprint.pprint(sorted(required))
     unsatisfied = required - available
     if unsatisfied:
         cpvr = package.package_info.cpvr
         print(f"'{cpvr}' missing deps for: ", end="")
-        pprint.pprint(unsatisfied)
+        pprint.pprint(sorted(unsatisfied))
         if match:
             missing = set()
             for lib in unsatisfied:
                 missing.update(resolver.lib_to_package(lib))
             if missing:
                 print(f"'{cpvr}' needs: ", end="")
-                pprint.pprint(missing)
+                pprint.pprint(sorted(missing))
         return False
     return True